@nebutra/ui 0.2.1 → 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.
Files changed (55) hide show
  1. package/LICENSE +21 -676
  2. package/README.md +81 -86
  3. package/dist/agent/index.d.ts +119 -0
  4. package/dist/agent/index.js +135 -0
  5. package/dist/agent/index.js.map +1 -0
  6. package/dist/canonical-CrO71UPO.d.ts +4058 -0
  7. package/dist/components/index.d.ts +51 -56
  8. package/dist/components/index.js +1467 -1160
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/hooks/index.d.ts +62 -15
  11. package/dist/hooks/index.js +56 -34
  12. package/dist/hooks/index.js.map +1 -1
  13. package/dist/index-CKLIGfiU.d.ts +19 -0
  14. package/dist/index-Dg4jRJV2.d.ts +57 -0
  15. package/dist/layout/index.d.ts +5 -1
  16. package/dist/layout/index.js +427 -533
  17. package/dist/layout/index.js.map +1 -1
  18. package/dist/layouts/index.js +11 -9
  19. package/dist/layouts/index.js.map +1 -1
  20. package/dist/patterns/index.d.ts +128 -2
  21. package/dist/patterns/index.js +1478 -786
  22. package/dist/patterns/index.js.map +1 -1
  23. package/dist/primitives/canonical.d.ts +25 -0
  24. package/dist/primitives/canonical.js +11903 -0
  25. package/dist/primitives/canonical.js.map +1 -0
  26. package/dist/primitives/index.d.ts +577 -3545
  27. package/dist/primitives/index.js +8002 -6159
  28. package/dist/primitives/index.js.map +1 -1
  29. package/dist/shared/animation/css/index.d.ts +1 -0
  30. package/dist/shared/animation/css/index.js +14 -0
  31. package/dist/shared/animation/css/index.js.map +1 -0
  32. package/dist/shared/animation/index.d.ts +6 -0
  33. package/dist/shared/animation/index.js +272 -0
  34. package/dist/shared/animation/index.js.map +1 -0
  35. package/dist/shared/animation/motion/index.d.ts +4 -0
  36. package/dist/shared/animation/motion/index.js +205 -0
  37. package/dist/shared/animation/motion/index.js.map +1 -0
  38. package/dist/styles/brand-override.css +11 -11
  39. package/dist/tailwind.preset.d.ts +10 -10
  40. package/dist/tailwind.preset.js +7 -4
  41. package/dist/tailwind.preset.js.map +1 -1
  42. package/dist/theme/index.d.ts +2 -2
  43. package/dist/tokens-EAC6uPem.d.ts +302 -0
  44. package/dist/typography/fonts.css +31 -12
  45. package/dist/typography/index.d.ts +27 -27
  46. package/dist/typography/index.js +24 -4
  47. package/dist/typography/index.js.map +1 -1
  48. package/dist/utils/index.d.ts +36 -14
  49. package/dist/utils/index.js +44 -10
  50. package/dist/utils/index.js.map +1 -1
  51. package/package.json +38 -12
  52. package/src/styles/brand-override.css +61 -0
  53. package/src/styles/preset.css +29 -0
  54. package/src/styles/sources.css +27 -0
  55. package/src/typography/fonts.css +129 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/cn.ts","../../src/utils/slot.tsx","../../src/primitives/button.tsx","../../src/primitives/dialog.tsx","../../src/tokens/primitive.ts","../../src/tokens/components/textarea.ts","../../src/primitives/textarea.tsx","../../src/primitives/tooltip.tsx","../../src/components/ai-prompt-box.tsx","../../src/components/animate-in.tsx","../../src/components/ascii-text.tsx","../../src/components/changelog-widget.tsx","../../src/components/node-graph-canvas-adapter.ts","../../src/components/node-graph-canvas.tsx","../../src/components/onboarding-checklist.tsx","../../src/tokens/components/input.ts","../../src/primitives/kbd.tsx","../../src/primitives/input.tsx","../../src/components/team-chat.tsx"],"names":["React","jsx","Fragment","React2","BaseDialog","React3","jsxs","X","React4","BaseTooltip","React5","cn","files","BrainCog","FolderCode","Mic","React7","cva","useId","useState","useMemo","useCallback","Button","motion","CheckCircle2","Image","React8","isInvalid","joinDescriptionIds","React9","BaseInput","Loader2","m","CheckCheck","SmilePlus","Send"],"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\";\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","\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Cross as X } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\n// We keep these standard export names so the rest of the application using Nebutra UI doesn't break.\nconst Dialog = BaseDialog.Root;\nconst DialogPortal = BaseDialog.Portal;\n\nconst DialogTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Trigger> & { asChild?: boolean }\n>(({ asChild, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseDialog.Trigger\n ref={ref}\n {...props}\n render={children as React.ReactElement<Record<string, unknown>>}\n />\n );\n }\n return (\n <BaseDialog.Trigger ref={ref} {...props}>\n {children}\n </BaseDialog.Trigger>\n );\n});\nDialogTrigger.displayName = \"DialogTrigger\";\n\nconst DialogClose = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Close> & { asChild?: boolean }\n>(({ asChild, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseDialog.Close\n ref={ref}\n {...props}\n render={children as React.ReactElement<Record<string, unknown>>}\n />\n );\n }\n return (\n <BaseDialog.Close ref={ref} {...props}>\n {children}\n </BaseDialog.Close>\n );\n});\nDialogClose.displayName = \"DialogClose\";\n\nconst DialogOverlay = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Backdrop>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Backdrop\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/40 backdrop-blur-sm data-ending-style:animate-out data-starting-style:animate-in data-ending-style:fade-out-0 data-starting-style:fade-in-0 duration-300 transition-[opacity,display]\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = \"DialogOverlay\";\n\nconst DialogContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Popup>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <BaseDialog.Popup\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border/50 bg-background/90 p-6 shadow-2xl backdrop-blur-xl duration-300 transition-[opacity,transform,display] data-starting-style:animate-in data-ending-style:animate-out data-ending-style:fade-out-0 data-starting-style:fade-in-0 data-ending-style:zoom-out-95 data-starting-style:zoom-in-95 sm:rounded-2xl\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogClose className=\"absolute right-4 top-4 rounded-[var(--radius-sm)] opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[open]:bg-accent data-[open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n </BaseDialog.Popup>\n </DialogPortal>\n));\nDialogContent.displayName = \"DialogContent\";\n\nconst DialogHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className)}\n {...props}\n />\n ),\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)}\n {...props}\n />\n ),\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Title>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Title\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Description>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\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 * 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 { 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 {\n ArrowUp,\n Brain as BrainCog,\n FolderClosed as FolderCode,\n Globe,\n Microphone as Mic,\n Paperclip,\n StopCircle,\n Cross as X,\n} from \"@nebutra/icons\";\nimport { Square } from \"@phosphor-icons/react/dist/ssr\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport Image from \"next/image\";\nimport React from \"react\";\nimport { Button } from \"../primitives/button\";\nimport { Dialog, DialogContent, DialogTitle } from \"../primitives/dialog\";\nimport { Textarea } from \"../primitives/textarea\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../primitives/tooltip\";\n\n// Utility function for className merging\nconst cn = (...classes: (string | undefined | null | false)[]) => classes.filter(Boolean).join(\" \");\n\ntype PromptTextareaStyle = React.CSSProperties & {\n \"--textarea-min-height\"?: string;\n};\n// VoiceRecorder Component\ninterface VoiceRecorderProps {\n isRecording: boolean;\n onStartRecording: () => void;\n onStopRecording: (duration: number) => void;\n visualizerBars?: number;\n}\nconst VoiceRecorder: React.FC<VoiceRecorderProps> = ({\n isRecording,\n onStartRecording,\n onStopRecording,\n visualizerBars = 32,\n}) => {\n const [time, setTime] = React.useState(0);\n const timerRef = React.useRef<NodeJS.Timeout | null>(null);\n React.useEffect(() => {\n if (isRecording) {\n onStartRecording();\n timerRef.current = setInterval(() => setTime((t) => t + 1), 1000);\n } else {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = null;\n }\n onStopRecording(time);\n setTime(0);\n }\n return () => {\n if (timerRef.current) clearInterval(timerRef.current);\n };\n }, [isRecording, time, onStartRecording, onStopRecording]);\n const formatTime = (seconds: number) => {\n const mins = Math.floor(seconds / 60);\n const secs = seconds % 60;\n return `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\n };\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center w-full transition-all duration-300 py-3\",\n isRecording ? \"opacity-100\" : \"opacity-0 h-0\",\n )}\n >\n <div className=\"flex items-center gap-2 mb-3\">\n <div className=\"h-2 w-2 rounded-full bg-red-500 animate-pulse\" />\n <span className=\"font-mono text-sm text-white/80\">{formatTime(time)}</span>\n </div>\n <div className=\"w-full h-10 flex items-center justify-center gap-0.5 px-4\">\n {[...Array(visualizerBars)].map((_, i) => (\n <div\n key={i}\n className=\"w-0.5 rounded-full bg-white/50 animate-pulse\"\n style={{\n height: `${Math.max(15, Math.random() * 100)}%`,\n animationDelay: `${i * 0.05}s`,\n animationDuration: `${0.5 + Math.random() * 0.5}s`,\n }}\n />\n ))}\n </div>\n </div>\n );\n};\n// ImageViewDialog Component\ninterface ImageViewDialogProps {\n imageUrl: string | null;\n onClose: () => void;\n}\nconst ImageViewDialog: React.FC<ImageViewDialogProps> = ({ imageUrl, onClose }) => {\n if (!imageUrl) return null;\n return (\n <Dialog open={!!imageUrl} onOpenChange={onClose}>\n <DialogContent className=\"p-0 border-none bg-transparent shadow-none max-w-[90vw] md:max-w-[800px]\">\n <DialogTitle className=\"sr-only\">Image Preview</DialogTitle>\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ duration: 0.2, ease: \"easeOut\" }}\n className=\"relative bg-background rounded-2xl overflow-hidden shadow-2xl\"\n >\n <Image\n src={imageUrl}\n alt=\"Full preview\"\n className=\"w-full max-h-[80vh] object-contain rounded-2xl\"\n fill\n />\n </motion.div>\n </DialogContent>\n </Dialog>\n );\n};\n// PromptInput Context and Components\ninterface PromptInputContextType {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: (() => void) | undefined;\n disabled?: boolean | undefined;\n}\nconst PromptInputContext = React.createContext<PromptInputContextType>({\n isLoading: false,\n value: \"\",\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n});\nfunction usePromptInput() {\n const context = React.useContext(PromptInputContext);\n if (!context) throw new Error(\"usePromptInput must be used within a PromptInput\");\n return context;\n}\ninterface PromptInputProps {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n onDragOver?: (e: React.DragEvent) => void;\n onDragLeave?: (e: React.DragEvent) => void;\n onDrop?: (e: React.DragEvent) => void;\n}\nconst PromptInput = React.forwardRef<HTMLDivElement, PromptInputProps>(\n (\n {\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n onDragOver,\n onDragLeave,\n onDrop,\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = React.useState(value || \"\");\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n }}\n >\n {/* biome-ignore lint/a11y/noStaticElementInteractions: drag-drop zone uses div intentionally */}\n <div\n ref={ref}\n className={cn(\n \"rounded-3xl border border-input bg-background p-2 shadow-lg transition-all duration-300\",\n isLoading && \"border-destructive/70\",\n className,\n )}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n },\n);\nPromptInput.displayName = \"PromptInput\";\ninterface PromptInputTextareaProps {\n disableAutosize?: boolean;\n placeholder?: string;\n className?: string;\n onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n}\nconst PromptInputTextarea: React.FC<\n PromptInputTextareaProps & React.ComponentProps<typeof Textarea>\n> = ({ className, onKeyDown, disableAutosize = false, placeholder, style, ...props }) => {\n const { value, setValue, maxHeight, onSubmit, disabled } = usePromptInput();\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n React.useEffect(() => {\n if (disableAutosize || !textareaRef.current) return;\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height =\n typeof maxHeight === \"number\"\n ? `${Math.min(textareaRef.current.scrollHeight, maxHeight)}px`\n : `min(${textareaRef.current.scrollHeight}px, ${maxHeight})`;\n }, [maxHeight, disableAutosize]);\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n return (\n <Textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n rows={1}\n style={{ \"--textarea-min-height\": \"2rem\", ...style } as PromptTextareaStyle}\n className={cn(\"resize-none border-0 shadow-none focus-visible:ring-0\", className)}\n disabled={disabled}\n placeholder={placeholder}\n {...props}\n />\n );\n};\ntype PromptInputActionsProps = React.HTMLAttributes<HTMLDivElement>;\nconst PromptInputActions: React.FC<PromptInputActionsProps> = ({\n children,\n className,\n ...props\n}) => (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n);\ninterface PromptInputActionProps extends Omit<React.ComponentProps<typeof Tooltip>, \"children\"> {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n className?: string;\n}\nconst PromptInputAction: React.FC<PromptInputActionProps> = ({\n tooltip,\n children,\n className,\n side = \"top\",\n ...props\n}) => {\n const { disabled } = usePromptInput();\n return (\n <Tooltip {...props}>\n <TooltipTrigger asChild disabled={disabled}>\n {children}\n </TooltipTrigger>\n <TooltipContent side={side} className={className || \"\"}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n};\n// Custom Divider Component\nconst CustomDivider: React.FC = () => (\n <div className=\"relative h-6 w-[1.5px] mx-1\">\n <div\n className=\"absolute inset-0 bg-gradient-to-t from-transparent via-cyan/40 to-transparent rounded-full\"\n style={{\n clipPath:\n \"polygon(0% 0%, 100% 0%, 100% 40%, 140% 50%, 100% 60%, 100% 100%, 0% 100%, 0% 60%, -40% 50%, 0% 40%)\",\n }}\n />\n </div>\n);\n// Main PromptInputBox Component\ninterface PromptInputBoxProps {\n onSend?: (message: string, files?: File[]) => void;\n isLoading?: boolean;\n placeholder?: string;\n className?: string;\n}\nexport const PromptInputBox = React.forwardRef(\n (props: PromptInputBoxProps, ref: React.Ref<HTMLDivElement>) => {\n const {\n onSend = () => {},\n isLoading = false,\n placeholder = \"Type your message here...\",\n className,\n } = props;\n const [input, setInput] = React.useState(\"\");\n const [files, setFiles] = React.useState<File[]>([]);\n const [filePreviews, setFilePreviews] = React.useState<{ [key: string]: string }>({});\n const [selectedImage, setSelectedImage] = React.useState<string | null>(null);\n const [isRecording, setIsRecording] = React.useState(false);\n const [showSearch, setShowSearch] = React.useState(false);\n const [showThink, setShowThink] = React.useState(false);\n const [showCanvas, setShowCanvas] = React.useState(false);\n const uploadInputRef = React.useRef<HTMLInputElement>(null);\n const promptBoxRef = React.useRef<HTMLDivElement>(null);\n const handleToggleChange = (value: string) => {\n if (value === \"search\") {\n setShowSearch((prev) => !prev);\n setShowThink(false);\n } else if (value === \"think\") {\n setShowThink((prev) => !prev);\n setShowSearch(false);\n }\n };\n const handleCanvasToggle = () => setShowCanvas((prev) => !prev);\n const isImageFile = React.useCallback((file: File) => file.type.startsWith(\"image/\"), []);\n const processFile = React.useCallback(\n (file: File) => {\n if (!isImageFile(file)) {\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n return;\n }\n setFiles([file]);\n const reader = new FileReader();\n reader.onload = (e) => setFilePreviews({ [file.name]: e.target?.result as string });\n reader.readAsDataURL(file);\n },\n [isImageFile],\n );\n const handleDragOver = React.useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n const handleDragLeave = React.useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n const handleDrop = React.useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const files = Array.from(e.dataTransfer.files);\n const imageFiles = files.filter((file) => isImageFile(file));\n const firstFile = imageFiles[0];\n if (firstFile) processFile(firstFile);\n },\n [isImageFile, processFile],\n );\n const handleRemoveFile = (index: number) => {\n const fileToRemove = files[index];\n if (fileToRemove && filePreviews[fileToRemove.name]) {\n const newPreviews = { ...filePreviews };\n delete newPreviews[fileToRemove.name];\n setFilePreviews(newPreviews);\n }\n setFiles([]);\n };\n const openImageModal = (imageUrl: string) => setSelectedImage(imageUrl);\n const handlePaste = React.useCallback(\n (e: ClipboardEvent) => {\n const items = e.clipboardData?.items;\n if (!items) return;\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item && item.type.indexOf(\"image\") !== -1) {\n const file = item.getAsFile();\n if (file) {\n e.preventDefault();\n processFile(file);\n break;\n }\n }\n }\n },\n [processFile],\n );\n React.useEffect(() => {\n document.addEventListener(\"paste\", handlePaste);\n return () => document.removeEventListener(\"paste\", handlePaste);\n }, [handlePaste]);\n const handleSubmit = () => {\n if (input.trim() || files.length > 0) {\n let messagePrefix = \"\";\n if (showSearch) messagePrefix = \"[Search: \";\n else if (showThink) messagePrefix = \"[Think: \";\n else if (showCanvas) messagePrefix = \"[Canvas: \";\n const formattedInput = messagePrefix ? `${messagePrefix}${input}]` : input;\n onSend(formattedInput, files);\n setInput(\"\");\n setFiles([]);\n setFilePreviews({});\n }\n };\n const handleStartRecording = () => {};\n const handleStopRecording = (duration: number) => {\n setIsRecording(false);\n onSend(`[Voice message - ${duration} seconds]`, []);\n };\n const hasContent = input.trim() !== \"\" || files.length > 0;\n return (\n <>\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className={cn(\n \"w-full bg-background border-input shadow-lg transition-all duration-300 ease-in-out\",\n isRecording && \"border-destructive/70\",\n className,\n )}\n disabled={isLoading || isRecording}\n ref={ref || promptBoxRef}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {files.length > 0 && !isRecording && (\n <div className=\"flex flex-wrap gap-2 p-0 pb-1 transition-all duration-300\">\n {files.map((file, index) => (\n <div key={index} className=\"relative group\">\n {file.type.startsWith(\"image/\") && filePreviews[file.name] && (\n // biome-ignore lint/a11y/useSemanticElements: ARIA pattern\n <div\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const preview = filePreviews[file.name];\n if (preview) openImageModal(preview);\n }\n }}\n className=\"w-16 h-16 rounded-xl overflow-hidden cursor-pointer transition-all duration-300\"\n onClick={() => {\n const preview = filePreviews[file.name];\n if (preview) openImageModal(preview);\n }}\n >\n <Image\n src={filePreviews[file.name] ?? \"\"}\n alt={file.name}\n className=\"h-full w-full object-cover\"\n fill\n />\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveFile(index);\n }}\n className=\"absolute top-1 right-1 rounded-full bg-black/70 p-0.5 opacity-100 transition-opacity\"\n >\n <X className=\"h-3 w-3 text-white\" />\n </button>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n <div\n className={cn(\n \"transition-all duration-300\",\n isRecording ? \"h-0 overflow-hidden opacity-0\" : \"opacity-100\",\n )}\n >\n <PromptInputTextarea\n placeholder={\n showSearch\n ? \"Search the web...\"\n : showThink\n ? \"Think deeply...\"\n : showCanvas\n ? \"Create on canvas...\"\n : placeholder\n }\n className=\"text-base\"\n />\n </div>\n {isRecording && (\n <VoiceRecorder\n isRecording={isRecording}\n onStartRecording={handleStartRecording}\n onStopRecording={handleStopRecording}\n />\n )}\n <PromptInputActions className=\"flex items-center justify-between gap-2 p-0 pt-2\">\n <div\n className={cn(\n \"flex items-center gap-1 transition-opacity duration-300\",\n isRecording ? \"opacity-0 invisible h-0\" : \"opacity-100 visible\",\n )}\n >\n <PromptInputAction tooltip=\"Upload image\">\n <button\n type=\"button\"\n onClick={() => uploadInputRef.current?.click()}\n className=\"flex h-8 w-8 text-muted-foreground cursor-pointer items-center justify-center rounded-full transition-colors hover:bg-accent hover:text-foreground\"\n disabled={isRecording}\n >\n <Paperclip className=\"h-5 w-5 transition-colors\" />\n <input\n ref={uploadInputRef}\n type=\"file\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) processFile(file);\n if (e.target) e.target.value = \"\";\n }}\n accept=\"image/*\"\n />\n </button>\n </PromptInputAction>\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n onClick={() => handleToggleChange(\"search\")}\n className={cn(\n \"rounded-full transition-all flex items-center gap-1 px-2 py-1 border h-8\",\n showSearch\n ? \"bg-info/15 border-info text-info\"\n : \"bg-transparent border-transparent text-muted-foreground hover:text-foreground\",\n )}\n >\n <div className=\"w-5 h-5 flex items-center justify-center flex-shrink-0\">\n <motion.div\n animate={{ rotate: showSearch ? 360 : 0, scale: showSearch ? 1.1 : 1 }}\n whileHover={{\n rotate: showSearch ? 360 : 15,\n scale: 1.1,\n transition: { type: \"spring\", stiffness: 300, damping: 10 },\n }}\n transition={{ type: \"spring\", stiffness: 260, damping: 25 }}\n >\n <Globe className={cn(\"w-4 h-4\", showSearch ? \"text-info\" : \"text-inherit\")} />\n </motion.div>\n </div>\n <AnimatePresence>\n {showSearch && (\n <motion.span\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: \"auto\", opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"text-xs overflow-hidden whitespace-nowrap text-info flex-shrink-0\"\n >\n Search\n </motion.span>\n )}\n </AnimatePresence>\n </button>\n <CustomDivider />\n <button\n type=\"button\"\n onClick={() => handleToggleChange(\"think\")}\n className={cn(\n \"rounded-full transition-all flex items-center gap-1 px-2 py-1 border h-8\",\n showThink\n ? \"bg-indigo-500/15 border-indigo-500 text-indigo-500\"\n : \"bg-transparent border-transparent text-muted-foreground hover:text-foreground\",\n )}\n >\n <div className=\"w-5 h-5 flex items-center justify-center flex-shrink-0\">\n <motion.div\n animate={{ rotate: showThink ? 360 : 0, scale: showThink ? 1.1 : 1 }}\n whileHover={{\n rotate: showThink ? 360 : 15,\n scale: 1.1,\n transition: { type: \"spring\", stiffness: 300, damping: 10 },\n }}\n transition={{ type: \"spring\", stiffness: 260, damping: 25 }}\n >\n <BrainCog\n className={cn(\"w-4 h-4\", showThink ? \"text-indigo-500\" : \"text-inherit\")}\n />\n </motion.div>\n </div>\n <AnimatePresence>\n {showThink && (\n <motion.span\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: \"auto\", opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"text-xs overflow-hidden whitespace-nowrap text-indigo-500 flex-shrink-0\"\n >\n Think\n </motion.span>\n )}\n </AnimatePresence>\n </button>\n <CustomDivider />\n <button\n type=\"button\"\n onClick={handleCanvasToggle}\n className={cn(\n \"rounded-full transition-all flex items-center gap-1 px-2 py-1 border h-8\",\n showCanvas\n ? \"bg-warning/15 border-warning text-warning\"\n : \"bg-transparent border-transparent text-muted-foreground hover:text-foreground\",\n )}\n >\n <div className=\"w-5 h-5 flex items-center justify-center flex-shrink-0\">\n <motion.div\n animate={{ rotate: showCanvas ? 360 : 0, scale: showCanvas ? 1.1 : 1 }}\n whileHover={{\n rotate: showCanvas ? 360 : 15,\n scale: 1.1,\n transition: { type: \"spring\", stiffness: 300, damping: 10 },\n }}\n transition={{ type: \"spring\", stiffness: 260, damping: 25 }}\n >\n <FolderCode\n className={cn(\"w-4 h-4\", showCanvas ? \"text-warning\" : \"text-inherit\")}\n />\n </motion.div>\n </div>\n <AnimatePresence>\n {showCanvas && (\n <motion.span\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: \"auto\", opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"text-xs overflow-hidden whitespace-nowrap text-warning flex-shrink-0\"\n >\n Canvas\n </motion.span>\n )}\n </AnimatePresence>\n </button>\n </div>\n </div>\n <PromptInputAction\n tooltip={\n isLoading\n ? \"Stop generation\"\n : isRecording\n ? \"Stop recording\"\n : hasContent\n ? \"Send message\"\n : \"Voice message\"\n }\n >\n <Button\n variant=\"default\"\n size=\"icon\"\n className={cn(\n \"h-8 w-8 rounded-full transition-all duration-200\",\n isRecording\n ? \"bg-transparent hover:bg-accent text-destructive hover:text-destructive/80\"\n : hasContent\n ? \"bg-primary hover:bg-primary/90 text-primary-foreground\"\n : \"bg-transparent hover:bg-accent text-muted-foreground hover:text-foreground\",\n )}\n onClick={() => {\n if (isRecording) setIsRecording(false);\n else if (hasContent) handleSubmit();\n else setIsRecording(true);\n }}\n disabled={isLoading && !hasContent}\n >\n {isLoading ? (\n <Square className=\"h-4 w-4 fill-primary-foreground animate-pulse\" />\n ) : isRecording ? (\n <StopCircle className=\"h-5 w-5 text-destructive\" />\n ) : hasContent ? (\n <ArrowUp className=\"h-4 w-4 text-primary-foreground\" />\n ) : (\n <Mic className=\"h-5 w-5 text-primary-foreground transition-colors\" />\n )}\n </Button>\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n <ImageViewDialog imageUrl={selectedImage} onClose={() => setSelectedImage(null)} />\n </>\n );\n },\n);\nPromptInputBox.displayName = \"PromptInputBox\";\n","\"use client\";\n\nimport { brandSpring, emerge, flow } from \"@nebutra/brand\";\nimport { domAnimation, LazyMotion, m, useReducedMotion } from \"framer-motion\";\nimport type * as React from \"react\";\n\nconst PRESETS = {\n emerge: {\n initial: emerge.initial,\n animate: emerge.animate,\n exit: emerge.exit,\n transition: emerge.transition,\n },\n flow: {\n initial: flow.initial,\n animate: flow.animate,\n exit: flow.exit,\n transition: flow.transition,\n },\n fade: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n transition: { duration: 0.3 },\n },\n fadeUp: {\n initial: { opacity: 0, y: 16 },\n animate: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: 16 },\n transition: brandSpring,\n },\n scale: {\n initial: { opacity: 0, scale: 0.95 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n transition: brandSpring,\n },\n} as const;\n\ntype Preset = keyof typeof PRESETS;\n\nconst STAGGER = { fast: 0.05, normal: 0.1, slow: 0.2 } as const;\n\nfunction MotionDiv(props: React.ComponentProps<typeof m.div>) {\n return (\n <LazyMotion features={domAnimation}>\n <m.div {...props} />\n </LazyMotion>\n );\n}\n\nexport interface AnimateInProps {\n children: React.ReactNode;\n preset?: Preset;\n delay?: number;\n duration?: number;\n inView?: boolean;\n className?: string;\n}\n\n// NOTE: do not destructure at the parameter signature. Next.js build-time\n// type inference can mis-resolve destructured params without defaults as\n// required `any`, masking the typed AnimateInProps interface. Keep the signature\n// as `(props: AnimateInProps)` and destructure inside.\nexport function AnimateIn(props: AnimateInProps) {\n const { children, preset = \"emerge\", delay = 0, duration, inView = false, className } = props;\n const shouldReduce = useReducedMotion();\n const { initial, animate, exit, transition } = PRESETS[preset];\n const t = {\n ...transition,\n ...(delay ? { delay } : {}),\n ...(duration ? { duration } : {}),\n };\n\n if (shouldReduce) return <div className={className}>{children}</div>;\n\n if (inView) {\n return (\n <MotionDiv\n className={className}\n initial={initial}\n whileInView={animate}\n exit={exit}\n viewport={{ once: true, margin: \"-10%\" }}\n transition={t}\n >\n {children}\n </MotionDiv>\n );\n }\n\n return (\n <MotionDiv className={className} initial={initial} animate={animate} exit={exit} transition={t}>\n {children}\n </MotionDiv>\n );\n}\n\nexport interface AnimateInGroupProps {\n children: React.ReactNode;\n stagger?: keyof typeof STAGGER;\n inView?: boolean;\n className?: string;\n}\n\nexport function AnimateInGroup(props: AnimateInGroupProps) {\n const { children, stagger = \"normal\", inView = false, className } = props;\n const shouldReduce = useReducedMotion();\n const variants = {\n initial: {},\n animate: { transition: { staggerChildren: STAGGER[stagger] } },\n };\n\n if (shouldReduce) return <div className={className}>{children}</div>;\n\n if (inView) {\n return (\n <MotionDiv\n className={className}\n initial=\"initial\"\n whileInView=\"animate\"\n viewport={{ once: true, margin: \"-10%\" }}\n variants={variants}\n >\n {children}\n </MotionDiv>\n );\n }\n\n return (\n <MotionDiv className={className} initial=\"initial\" animate=\"animate\" variants={variants}>\n {children}\n </MotionDiv>\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { slant, useAsciiText } from \"react-ascii-text\";\n\ninterface AsciiTextProps {\n text: string;\n className?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n font?: any;\n}\n\nexport function AsciiText({ text, className = \"\", font = slant }: AsciiTextProps) {\n const asciiTextRef = useAsciiText({\n font: font,\n text: text,\n });\n\n return (\n <pre\n ref={asciiTextRef as React.RefObject<HTMLPreElement | null>}\n className={`font-mono leading-none m-0 p-0 ${className}`}\n />\n );\n}\n","\"use client\";\n\nimport { Bell, ChevronRight } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\n\nexport interface ChangelogEntry {\n version: string;\n title: string;\n date: string;\n tag?: string;\n tagColor?: string;\n excerpt: string;\n url: string;\n}\n\nexport interface ChangelogWidgetProps {\n entries: ChangelogEntry[];\n changelogUrl?: string;\n className?: string;\n}\n\nconst TAG_COLOR_MAP: Record<string, string> = {\n feature: \"bg-[var(--cyan-9)] text-white\",\n fix: \"bg-[var(--status-success)] text-white\",\n breaking: \"bg-[var(--status-danger)] text-white\",\n improvement: \"bg-[var(--status-warning)] text-white\",\n security: \"bg-[var(--status-danger)] text-white\",\n experimental: \"bg-[var(--neutral-8)] text-[var(--neutral-12)]\",\n};\n\nexport function ChangelogWidget({\n entries,\n changelogUrl = \"/changelog\",\n className,\n}: ChangelogWidgetProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [lastSeenVersion, setLastSeenVersion] = React.useState<string | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n const unreadCount = React.useMemo(() => {\n if (!lastSeenVersion) return entries.length;\n const lastSeenIndex = entries.findIndex((e) => e.version === lastSeenVersion);\n return lastSeenIndex === -1 ? entries.length : lastSeenIndex;\n }, [entries, lastSeenVersion]);\n\n const recentEntries = entries.slice(0, 5);\n\n const handleClose = React.useCallback(() => {\n setIsOpen(false);\n if (recentEntries.length > 0) {\n setLastSeenVersion(recentEntries[0]?.version ?? null);\n }\n }, [recentEntries]);\n\n React.useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleClose();\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n handleClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"keydown\", handleEscape);\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen, handleClose]);\n\n const getTagColor = (tag?: string) => {\n if (!tag) return \"bg-[var(--neutral-7)] text-[var(--neutral-12)]\";\n return TAG_COLOR_MAP[tag.toLowerCase()] || TAG_COLOR_MAP.feature;\n };\n\n return (\n <div className={cn(\"relative\", className)} ref={dropdownRef}>\n <button\n type=\"button\"\n aria-label=\"View changelog\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n className=\"relative inline-flex items-center justify-center rounded-lg p-2 transition-colors hover:bg-[var(--neutral-3)]\"\n >\n <Bell className=\"h-5 w-5 text-[var(--neutral-11)]\" />\n {unreadCount > 0 && (\n <span className=\"absolute right-0 top-0 flex h-5 w-5 items-center justify-center rounded-full bg-[var(--status-danger)] text-xs font-bold text-white\">\n {unreadCount > 9 ? \"9+\" : unreadCount}\n </span>\n )}\n </button>\n\n {isOpen && (\n <div className=\"absolute right-0 top-full z-50 mt-2 w-80 overflow-hidden rounded-lg border border-[var(--neutral-7)] bg-white shadow-lg transition-all duration-200\">\n <div className=\"bg-gradient-to-r from-[var(--blue-3)] to-[var(--cyan-3)] px-4 py-3\">\n <h3 className=\"font-semibold text-[var(--neutral-12)]\">What's New</h3>\n </div>\n\n <div className=\"max-h-96 overflow-y-auto\">\n {recentEntries.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-sm text-[var(--neutral-11)]\">\n No updates available\n </div>\n ) : (\n recentEntries.map((entry) => (\n <a\n key={entry.version}\n href={entry.url}\n className=\"block border-b border-[var(--neutral-6)] px-4 py-3 transition-colors hover:bg-[var(--neutral-2)]\"\n >\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs font-bold text-[var(--blue-9)]\">\n v{entry.version}\n </span>\n {entry.tag && (\n <span\n className={cn(\n \"rounded px-2 py-0.5 text-xs font-medium\",\n getTagColor(entry.tag),\n )}\n >\n {entry.tag}\n </span>\n )}\n </div>\n </div>\n <p className=\"mb-1 text-sm font-medium text-[var(--neutral-12)]\">{entry.title}</p>\n <p className=\"mb-2 line-clamp-2 text-xs text-[var(--neutral-11)]\">\n {entry.excerpt}\n </p>\n <span className=\"text-xs text-[var(--neutral-10)]\">{entry.date}</span>\n </a>\n ))\n )}\n </div>\n\n <a\n href={changelogUrl}\n onClick={handleClose}\n className=\"flex items-center justify-between border-t border-[var(--neutral-6)] bg-[var(--neutral-1)] px-4 py-3 text-sm font-medium text-[var(--blue-9)] transition-colors hover:bg-[var(--neutral-2)]\"\n >\n <span>View all updates</span>\n <ChevronRight className=\"h-4 w-4\" />\n </a>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Pure mapping layer between a neutral `@nebutra/graph-model` graph and the\n * `@xyflow/react` view model. Framework-free on purpose: no React, no DOM,\n * no domain types — every function is a referentially-transparent transform,\n * generic over the caller's node/edge specialization.\n *\n * Domain knowledge (how to build an edge from a connection, an edge's stable\n * identity) is INJECTED, so this library never depends on `@nebutra/reel` or\n * any feature package. The graph is the source of truth; xyflow shapes are\n * derived; gestures are translated back into a *new* immutable graph with all\n * non-structural fields preserved.\n */\n\nimport type { Graph, GraphEdge, GraphNode } from \"@nebutra/graph-model\";\nimport { wouldCreateCycle } from \"@nebutra/graph-model\";\n\n/** Stable, collision-free identity for an edge (injected per domain). */\nexport type EdgeIdentity<E extends GraphEdge> = (edge: E) => string;\n\n/** Build a domain edge from an xyflow connection, or reject it (null). */\nexport type MakeEdge<E extends GraphEdge> = (\n from: string,\n to: string,\n targetHandle: string | null,\n) => E | null;\n\n/** xyflow node shape we consume/produce (structurally compatible). */\nexport interface FlowNode<N extends GraphNode> {\n id: string;\n type: string;\n position: { x: number; y: number };\n data: { node: N };\n}\n\n/** xyflow edge shape we consume/produce (structurally compatible). */\nexport interface FlowEdge<E extends GraphEdge> {\n id: string;\n source: string;\n target: string;\n targetHandle?: string | null;\n data: { edge: E };\n}\n\n/** xyflow's connection payload (source/target may be null mid-drag). */\nexport interface FlowConnection {\n source: string | null;\n target: string | null;\n sourceHandle: string | null;\n targetHandle: string | null;\n}\n\nexport type AddEdgeResult<G> = { ok: true; graph: G } | { ok: false; reason: string };\n\n/** Single custom xyflow node `type` key — one renderer for every node. */\nexport const GRAPH_NODE_FLOW_TYPE = \"graph-node\" as const;\n\n/** Graph → xyflow view model. Pure; allocates fresh arrays. */\nexport function graphToFlow<N extends GraphNode, E extends GraphEdge>(\n graph: Graph<N, E>,\n edgeIdentity: EdgeIdentity<E>,\n): { nodes: FlowNode<N>[]; edges: FlowEdge<E>[] } {\n const nodes = graph.nodes.map((n) => ({\n id: n.id,\n type: GRAPH_NODE_FLOW_TYPE,\n position: { x: n.x, y: n.y },\n data: { node: n },\n }));\n const edges = graph.edges.map((e) => ({\n id: edgeIdentity(e),\n source: e.from,\n target: e.to,\n data: { edge: e },\n }));\n return { nodes, edges };\n}\n\n/**\n * Apply xyflow node positions back onto the graph. Returns a *new* graph;\n * the input and its `nodes` array are never mutated. Non-structural fields\n * (anything besides `nodes`/`edges`) are preserved by spread.\n */\nexport function applyNodePositions<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n flowNodes: readonly FlowNode<N>[],\n): G {\n const posById = new Map(flowNodes.map((n) => [n.id, n.position] as const));\n const nodes = graph.nodes.map((n) => {\n const pos = posById.get(n.id);\n if (!pos || (pos.x === n.x && pos.y === n.y)) return n;\n return { ...n, x: pos.x, y: pos.y };\n });\n return { ...graph, nodes };\n}\n\n/**\n * Attempt to add a connection as a domain edge. Rejected (with a\n * human-readable hint) on missing endpoints, self-loop, duplicate, a domain\n * `makeEdge` veto, or when it would make the graph cyclic — enforced via the\n * neutral `@nebutra/graph-model` guard so the UI can never persist a non-DAG.\n */\nexport function tryAddEdge<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n connection: FlowConnection,\n opts: { makeEdge: MakeEdge<E>; edgeIdentity: EdgeIdentity<E> },\n): AddEdgeResult<G> {\n if (!connection.source || !connection.target) {\n return { ok: false, reason: \"Connection needs both a source and a target node.\" };\n }\n if (connection.source === connection.target) {\n return { ok: false, reason: \"A node cannot connect to itself.\" };\n }\n const candidate = opts.makeEdge(connection.source, connection.target, connection.targetHandle);\n if (!candidate) {\n return { ok: false, reason: \"That connection is not allowed between these nodes.\" };\n }\n const candidateId = opts.edgeIdentity(candidate);\n if (graph.edges.some((e) => opts.edgeIdentity(e) === candidateId)) {\n return { ok: false, reason: \"That connection already exists between these nodes.\" };\n }\n if (wouldCreateCycle(graph.edges, candidate.from, candidate.to)) {\n return {\n ok: false,\n reason: \"That connection would create a cycle. The graph must stay acyclic (DAG).\",\n };\n }\n return { ok: true, graph: { ...graph, edges: [...graph.edges, candidate] } };\n}\n\n/** Remove a node and every edge incident to it. Returns a new graph. */\nexport function removeNode<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n nodeId: string,\n): G {\n return {\n ...graph,\n nodes: graph.nodes.filter((n) => n.id !== nodeId),\n edges: graph.edges.filter((e) => e.from !== nodeId && e.to !== nodeId),\n };\n}\n\n/** Remove one edge identified by its injected stable identity. */\nexport function removeFlowEdge<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n flowEdgeId: string,\n edgeIdentity: EdgeIdentity<E>,\n): G {\n return {\n ...graph,\n edges: graph.edges.filter((e) => edgeIdentity(e) !== flowEdgeId),\n };\n}\n","\"use client\";\n\n/**\n * <NodeGraphCanvas> — generic interactive editor for any acyclic graph that\n * conforms to `@nebutra/graph-model` (`GraphNode` / `GraphEdge`).\n *\n * Domain-free: it imports NO feature package. The caller injects how to make\n * an edge from a connection (`makeEdge`), an edge's stable identity\n * (`edgeIdentity`), and how to present a node (`renderNode`). The reel\n * binding lives in `@nebutra/reel/canvas`. The graph is the single source of\n * truth; every gesture yields a *new* immutable graph (non-structural fields\n * preserved) through `onChange`. Cyclic connections are rejected via the\n * neutral `@nebutra/graph-model` guard.\n *\n * Chrome uses the shared `@lobehub/ui` `Button`; xyflow surfaces are themed\n * through xyflow CSS custom properties bound to Nebutra semantic tokens. The\n * custom node is intentionally not `Card`-wrapped (it owns its sizing + the\n * two connection `Handle`s) — see docs/capabilities/canvas/ANTI_PATTERNS.md.\n */\n\nimport type { Graph, GraphEdge, GraphNode } from \"@nebutra/graph-model\";\nimport { CrossSmall } from \"@nebutra/icons\";\nimport {\n Background,\n type Connection,\n Controls,\n type Edge,\n type EdgeChange,\n Handle,\n type Node,\n type NodeChange,\n Panel,\n Position,\n ReactFlow,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { Button } from \"@lobehub/ui\";\nimport { cva } from \"class-variance-authority\";\nimport { type CSSProperties, type ReactNode, useCallback, useId, useMemo, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { AnimateIn } from \"./animate-in\";\nimport {\n applyNodePositions,\n type EdgeIdentity,\n type FlowNode,\n GRAPH_NODE_FLOW_TYPE,\n graphToFlow,\n type MakeEdge,\n removeFlowEdge,\n removeNode,\n tryAddEdge,\n} from \"./node-graph-canvas-adapter\";\n\n/** Domain-supplied presentation for one node. */\nexport interface NodeView {\n readonly label: string;\n readonly subtitle?: string;\n readonly icon?: ReactNode;\n /** Drives the accent border (e.g. \"has produced output\"). */\n readonly ready?: boolean;\n}\n\nexport interface NodeGraphCanvasProps<\n N extends GraphNode,\n E extends GraphEdge,\n G extends Graph<N, E>,\n> {\n /** The graph to render. Treated as the single source of truth. */\n readonly graph: G;\n /** Called with a new immutable graph after every accepted mutation. */\n readonly onChange: (next: G) => void;\n /** Stable identity for an edge (also used for dedupe + removal). */\n readonly edgeIdentity: EdgeIdentity<E>;\n /** Build a domain edge from a connection, or veto it (return null). */\n readonly makeEdge: MakeEdge<E>;\n /** Map a node to its visual presentation. */\n readonly renderNode: (node: N) => NodeView;\n /** When true, the canvas is view/pan/zoom only — no edits. */\n readonly readOnly?: boolean;\n /** Optional extra class on the outer container. */\n readonly className?: string;\n}\n\nconst XYFLOW_TOKEN_THEME: CSSProperties = {\n [\"--xy-background-pattern-color\" as string]: \"var(--neutral-6)\",\n [\"--xy-edge-stroke\" as string]: \"var(--neutral-8)\",\n [\"--xy-connectionline-stroke\" as string]: \"var(--neutral-8)\",\n [\"--xy-handle-background-color\" as string]: \"var(--neutral-9)\",\n [\"--xy-handle-border-color\" as string]: \"var(--neutral-7)\",\n [\"--xy-controls-button-background-color\" as string]: \"var(--neutral-2)\",\n [\"--xy-controls-button-border-color\" as string]: \"var(--neutral-7)\",\n [\"--xy-controls-button-color\" as string]: \"var(--neutral-11)\",\n};\n\nconst nodeCardVariants = cva(\n \"min-w-[160px] rounded-lg border bg-neutral-2 px-3 py-2 text-neutral-12 shadow-sm transition-colors\",\n {\n variants: { ready: { true: \"border-success\", false: \"border-neutral-7\" } },\n defaultVariants: { ready: false },\n },\n);\n\nexport function NodeGraphCanvas<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>({\n graph,\n onChange,\n edgeIdentity,\n makeEdge,\n renderNode,\n readOnly = false,\n className,\n}: NodeGraphCanvasProps<N, E, G>) {\n const statusId = useId();\n const [rejection, setRejection] = useState<string | null>(null);\n\n const { nodes, edges } = useMemo(() => graphToFlow(graph, edgeIdentity), [graph, edgeIdentity]);\n\n const nodeTypes = useMemo(\n () => ({\n [GRAPH_NODE_FLOW_TYPE]: ({ data }: { data: FlowNode<N>[\"data\"] }) => {\n const view = renderNode(data.node);\n return (\n <div className={nodeCardVariants({ ready: view.ready ?? false })}>\n <Handle type=\"target\" position={Position.Left} />\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-neutral-11 uppercase tracking-wide\">\n {view.icon}\n {view.label}\n </div>\n {view.subtitle ? (\n <div className=\"mt-0.5 text-sm text-neutral-12\">{view.subtitle}</div>\n ) : null}\n <Handle type=\"source\" position={Position.Right} />\n </div>\n );\n },\n }),\n [renderNode],\n );\n\n const onNodesChange = useCallback(\n (changes: NodeChange[]) => {\n if (readOnly) return;\n const removed = changes.filter(\n (c): c is NodeChange & { type: \"remove\"; id: string } => c.type === \"remove\",\n );\n if (removed.length > 0) {\n let next = graph;\n for (const r of removed) next = removeNode(next, r.id);\n onChange(next);\n return;\n }\n const positional = changes.some((c) => c.type === \"position\" && c.dragging === false);\n if (positional) {\n const moved = nodes.map((n) => {\n const change = changes.find((c) => c.type === \"position\" && c.id === n.id);\n if (change && change.type === \"position\" && change.position) {\n return { ...n, position: change.position } as FlowNode<N>;\n }\n return n as FlowNode<N>;\n });\n onChange(applyNodePositions(graph, moved));\n }\n },\n [graph, nodes, onChange, readOnly],\n );\n\n const onEdgesChange = useCallback(\n (changes: EdgeChange[]) => {\n if (readOnly) return;\n const removed = changes.filter(\n (c): c is EdgeChange & { type: \"remove\"; id: string } => c.type === \"remove\",\n );\n if (removed.length === 0) return;\n let next = graph;\n for (const r of removed) next = removeFlowEdge(next, r.id, edgeIdentity);\n onChange(next);\n },\n [graph, edgeIdentity, onChange, readOnly],\n );\n\n const onConnect = useCallback(\n (connection: Connection) => {\n if (readOnly) return;\n const result = tryAddEdge(graph, connection, { makeEdge, edgeIdentity });\n if (result.ok) {\n setRejection(null);\n onChange(result.graph);\n } else {\n setRejection(result.reason);\n }\n },\n [graph, edgeIdentity, makeEdge, onChange, readOnly],\n );\n\n return (\n <AnimateIn preset=\"emerge\">\n <div\n style={XYFLOW_TOKEN_THEME}\n className={cn(\n \"relative h-[480px] w-full overflow-hidden rounded-xl border border-neutral-7 bg-neutral-1\",\n className,\n )}\n >\n <ReactFlowProvider>\n <ReactFlow\n nodes={nodes as Node[]}\n edges={edges as Edge[]}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onConnect={onConnect}\n nodesDraggable={!readOnly}\n nodesConnectable={!readOnly}\n elementsSelectable={!readOnly}\n fitView\n proOptions={{ hideAttribution: true }}\n >\n <Background color=\"var(--neutral-6)\" />\n <Controls showInteractive={!readOnly} />\n {rejection ? (\n <Panel position=\"top-center\">\n <div\n id={statusId}\n role=\"alert\"\n aria-live=\"assertive\"\n className=\"flex items-center gap-2 rounded-md border border-destructive bg-destructive/10 px-3 py-2 text-sm text-destructive\"\n >\n <span>{rejection}</span>\n <Button\n size=\"small\"\n type=\"text\"\n icon={<CrossSmall size={14} />}\n aria-label=\"Dismiss connection error\"\n onClick={() => setRejection(null)}\n >\n Dismiss\n </Button>\n </div>\n </Panel>\n ) : null}\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n </AnimateIn>\n );\n}\n","\"use client\";\n\nimport { CheckCircle as CheckCircle2, PlayCircle } from \"@nebutra/icons\";\nimport { motion, type Variants } from \"framer-motion\";\nimport Image from \"next/image\";\nimport { Dialog, DialogContent, DialogTrigger } from \"../primitives/dialog\";\nimport { cn } from \"../utils/cn\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ChecklistItem {\n /** Unique identifier for the item */\n id: number | string;\n /** Main text content */\n text: string;\n /** Optional helper text displayed below */\n helperText?: string;\n /** Optional link displayed after helper text */\n helperLink?: {\n href: string;\n text: string;\n };\n}\n\nexport interface OnboardingChecklistProps {\n /** Main heading for the checklist */\n title: string;\n /** Description displayed below the title */\n description: string;\n /** Array of checklist items to display */\n items: ChecklistItem[];\n /** URL for the video thumbnail image */\n videoThumbnailUrl: string;\n /** Embed URL for the video (YouTube, Vimeo, etc.) */\n videoUrl: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// Animation Variants\n// =============================================================================\n\nconst containerVariants: Variants = {\n hidden: { opacity: 0, y: 20 },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n duration: 0.5,\n ease: \"easeOut\",\n when: \"beforeChildren\",\n staggerChildren: 0.1,\n },\n },\n};\n\nconst itemVariants: Variants = {\n hidden: { opacity: 0, x: -20 },\n visible: {\n opacity: 1,\n x: 0,\n transition: {\n duration: 0.4,\n ease: \"easeOut\",\n },\n },\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * OnboardingChecklist - Animated checklist with video guide\n *\n * @description\n * A responsive onboarding component that displays a checklist of items\n * alongside a video thumbnail that opens in a modal dialog.\n *\n * @example Basic usage\n * ```tsx\n * <OnboardingChecklist\n * title=\"Get Started\"\n * description=\"Complete these steps to set up your account\"\n * items={[\n * { id: 1, text: \"Create your profile\" },\n * { id: 2, text: \"Add your first project\" },\n * {\n * id: 3,\n * text: \"Invite team members\",\n * helperText: \"Need help?\",\n * helperLink: { href: \"/docs\", text: \"Read the guide\" }\n * },\n * ]}\n * videoThumbnailUrl=\"https://example.com/thumbnail.jpg\"\n * videoUrl=\"https://youtube.com/embed/xxx\"\n * />\n * ```\n */\nexport function OnboardingChecklist({\n title,\n description,\n items,\n videoThumbnailUrl,\n videoUrl,\n className,\n}: OnboardingChecklistProps) {\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n variants={containerVariants}\n className={cn(\n \"w-full max-w-4xl mx-auto bg-card text-card-foreground border rounded-[var(--radius-2xl)] shadow-sm p-8 overflow-hidden\",\n className,\n )}\n >\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8 items-center\">\n {/* Left Side: Title and Checklist */}\n <div className=\"flex flex-col\">\n <h2 className=\"text-2xl font-bold tracking-tight\">{title}</h2>\n <p className=\"mt-2 text-muted-foreground\">{description}</p>\n <ul className=\"mt-6 grid grid-cols-1 sm:grid-cols-2 gap-x-8 gap-y-4\">\n {items.map((item) => (\n <motion.li key={item.id} variants={itemVariants} className=\"flex flex-col\">\n <div className=\"flex items-start\">\n <CheckCircle2 className=\"h-5 w-5 text-green-500 mt-0.5 flex-shrink-0\" />\n <span className=\"ml-3 text-sm font-medium\">{item.text}</span>\n </div>\n {item.helperText && item.helperLink && (\n <div className=\"ml-8 mt-1 text-xs text-muted-foreground\">\n {item.helperText}{\" \"}\n <a\n href={item.helperLink.href}\n className=\"text-primary underline-offset-4 hover:underline focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 rounded-[var(--radius-sm)]\"\n >\n {item.helperLink.text}\n </a>\n </div>\n )}\n </motion.li>\n ))}\n </ul>\n </div>\n\n {/* Right Side: Video Thumbnail */}\n <motion.div\n variants={itemVariants}\n className=\"relative group rounded-[var(--radius-lg)] overflow-hidden cursor-pointer w-full aspect-video\"\n >\n <Dialog>\n <DialogTrigger asChild>\n <button\n type=\"button\"\n className=\"w-full h-full focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 rounded-[var(--radius-lg)]\"\n >\n <Image\n src={videoThumbnailUrl}\n alt=\"Video guide thumbnail\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n fill\n />\n <div className=\"absolute inset-0 bg-black/30 flex items-center justify-center\">\n <PlayCircle className=\"h-16 w-16 text-white/80 transform transition-all duration-300 group-hover:scale-110 group-hover:text-white\" />\n </div>\n </button>\n </DialogTrigger>\n <DialogContent className=\"max-w-3xl p-0 border-0\">\n <div className=\"aspect-video\">\n <iframe\n src={videoUrl}\n title=\"Onboarding Video Guide\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n className=\"w-full h-full rounded-[var(--radius-lg)]\"\n />\n </div>\n </DialogContent>\n </Dialog>\n </motion.div>\n </div>\n </motion.div>\n );\n}\n","/**\n * Input Component Tokens — Layer 3\n *\n * Component-level sizing and interaction constants. Input consumes semantic\n * colors at runtime and only derives dimensions from primitive tokens here.\n */\n\nimport {\n primitiveFontSize,\n primitiveRadius,\n primitiveSizing,\n primitiveSpacing,\n} from \"../primitive\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport const inputTokens = {\n sizes: {\n sm: {\n height: primitiveSizing.sm,\n paddingX: primitiveSpacing[2],\n fontSize: primitiveFontSize.xs,\n radius: primitiveRadius.md,\n affixInset: primitiveSpacing[2],\n affixWidth: primitiveSizing.sm,\n controlInset: primitiveSpacing[2] - primitiveSpacing[1] / 2,\n controlSize: primitiveSizing.xs,\n controlIconSize: primitiveSizing.xs - primitiveSpacing[2],\n iconSize: primitiveFontSize.sm,\n },\n md: {\n height: primitiveSizing.md,\n paddingX: primitiveSpacing[3],\n fontSize: primitiveFontSize.sm,\n radius: primitiveRadius.md,\n affixInset: primitiveSpacing[3],\n affixWidth: primitiveSizing.sm + primitiveSpacing[1],\n controlInset: primitiveSpacing[2],\n controlSize: primitiveSizing.tiny,\n controlIconSize: primitiveSizing.tiny - primitiveSpacing[2],\n iconSize: primitiveFontSize.base,\n },\n lg: {\n height: primitiveSizing.lg,\n paddingX: primitiveSpacing[4],\n fontSize: primitiveFontSize.base,\n radius: primitiveRadius.lg,\n affixInset: primitiveSpacing[4],\n affixWidth: primitiveSizing.md,\n controlInset: primitiveSpacing[3],\n controlSize: primitiveSizing.tiny,\n controlIconSize: primitiveSizing.tiny - primitiveSpacing[2],\n iconSize: primitiveFontSize.base,\n },\n },\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 { 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 { Input as BaseInput } from \"@base-ui/react/input\";\nimport { Eye, EyeOff, LoaderCircle as Loader2, Cross as X } from \"@nebutra/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { type InputSize, inputTokens } from \"../tokens/components/input\";\nimport { cn } from \"../utils/cn\";\nimport { Kbd } from \"./kbd\";\n\ntype InputCssVars = React.CSSProperties & {\n \"--input-height\"?: string;\n \"--input-padding-x\"?: string;\n \"--input-padding-left\"?: string;\n \"--input-padding-right\"?: string;\n \"--input-font-size\"?: string;\n \"--input-radius\"?: string;\n \"--input-affix-inset\"?: string;\n \"--input-control-inset\"?: string;\n \"--input-control-size\"?: string;\n \"--input-control-icon-size\"?: string;\n \"--input-icon-size\"?: string;\n \"--input-focus-ring-width\"?: string;\n};\n\nconst inputVariants = cva(\n [\n \"flex h-[var(--input-height)] w-full rounded-[var(--input-radius)] border border-input bg-background\",\n \"px-[var(--input-padding-x)] text-[length:var(--input-font-size)] text-foreground shadow-[var(--shadow-xs)]\",\n \"transition-[background-color,border-color,box-shadow,color] duration-micro ease-out\",\n \"placeholder:text-muted-foreground\",\n \"outline-none focus:border-ring focus:ring-[length:var(--input-focus-ring-width)] focus:ring-ring/30\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"read-only:bg-muted/70 read-only:cursor-default\",\n \"file:h-full file:border-0 file:border-e file:border-solid file:border-input file:bg-transparent\",\n \"file:me-[var(--input-padding-x)] file:pe-[var(--input-padding-x)] file:text-[length:var(--input-font-size)] file:font-medium file:text-foreground\",\n \"aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20\",\n \"[&[type=search]::-webkit-search-cancel-button]:appearance-none\",\n \"[&[type=search]::-webkit-search-decoration]:appearance-none\",\n \"[&[type=search]::-webkit-search-results-button]:appearance-none\",\n \"[&[type=search]::-webkit-search-results-decoration]:appearance-none\",\n ].join(\" \"),\n {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n affix: {\n none: \"\",\n prefix: \"pl-[var(--input-padding-left)]\",\n suffix: \"pr-[var(--input-padding-right)]\",\n both: \"pl-[var(--input-padding-left)] pr-[var(--input-padding-right)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n affix: \"none\",\n },\n },\n);\n\nconst affixVariants = cva(\n [\n \"pointer-events-none absolute top-1/2 flex -translate-y-1/2 items-center text-muted-foreground\",\n \"[&_svg:not([class*=size-])]:size-[var(--input-icon-size)]\",\n ].join(\" \"),\n {\n variants: {\n side: {\n prefix: \"left-[var(--input-affix-inset)]\",\n suffix: \"right-[var(--input-affix-inset)]\",\n },\n },\n },\n);\n\nconst inputControlButtonVariants = cva(\n [\n \"absolute right-[var(--input-control-inset)] top-1/2 flex size-[var(--input-control-size)] -translate-y-1/2 items-center justify-center\",\n \"rounded-[var(--radius-sm)] text-muted-foreground transition-colors duration-micro ease-out\",\n \"hover:bg-accent hover:text-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:size-[var(--input-control-icon-size)]\",\n ].join(\" \"),\n);\n\nconst fieldMessageVariants = cva(\"text-xs\", {\n variants: {\n tone: {\n description: \"text-muted-foreground\",\n error: \"font-medium text-destructive\",\n },\n },\n});\n\ntype NativeInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"prefix\" | \"size\">;\n\ntype LabelledInputProps = {\n /** Visible label. Requires `id` so the label and input remain associated. */\n label: string;\n id: string;\n};\n\ntype UnlabelledInputProps = {\n label?: undefined;\n id?: string;\n};\n\ntype InputOwnProps = {\n /** Visual size variant. Uses Nebutra's compact form row scale. */\n size?: InputSize;\n /** Non-interactive adornment rendered inside the left edge. */\n prefix?: React.ReactNode;\n /** Non-interactive adornment rendered inside the right edge. Hidden by clear/shortcut controls. */\n suffix?: React.ReactNode;\n /** Show a clear button when the field has a value. */\n clearable?: boolean;\n /** Called after the clear button or Escape clears the field. */\n onClear?: () => void;\n /** Value-first change callback for consumers that do not need the native event. */\n onValueChange?: (value: string) => void;\n /** Visual shortcut hint, e.g. \"⌘K\". Dirty search fields show Esc instead. */\n shortcut?: string;\n /** Show an async spinner on the right side without disabling the field. */\n loading?: boolean;\n /** Adds a tokenized password visibility control when `type=\"password\"`. */\n revealable?: boolean;\n /** Accessible label for the password visibility control when the value is hidden. */\n revealLabel?: string;\n /** Accessible label for the password visibility control when the value is visible. */\n hideLabel?: string;\n /** Clear the current value when Escape is pressed. Defaults to true for search inputs. */\n clearOnEscape?: boolean;\n /** Helper text associated with the input through aria-describedby. */\n description?: string;\n /** Boolean marks invalid state; string also renders an inline error message. */\n error?: string | boolean;\n /** Applied to the control wrapper when affixes or control buttons are rendered. */\n wrapperClassName?: string;\n /** Applied to the label/helper/error field wrapper. */\n fieldClassName?: string;\n};\n\nexport type InputProps = NativeInputProps &\n InputOwnProps &\n (LabelledInputProps | UnlabelledInputProps) &\n VariantProps<typeof inputVariants>;\n\nfunction assignRef<T>(ref: React.ForwardedRef<T>, value: T | null) {\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n\n if (ref) {\n ref.current = value;\n }\n}\n\nfunction getInputStyle(size: InputSize, style: React.CSSProperties | undefined): InputCssVars {\n const token = inputTokens.sizes[size];\n\n return {\n \"--input-height\": `${token.height}px`,\n \"--input-padding-x\": `${token.paddingX}px`,\n \"--input-padding-left\": `${token.affixWidth}px`,\n \"--input-padding-right\": `${token.affixWidth}px`,\n \"--input-font-size\": `${token.fontSize}px`,\n \"--input-radius\": `${token.radius}px`,\n \"--input-affix-inset\": `${token.affixInset}px`,\n \"--input-control-inset\": `${token.controlInset}px`,\n \"--input-control-size\": `${token.controlSize}px`,\n \"--input-control-icon-size\": `${token.controlIconSize}px`,\n \"--input-icon-size\": `${token.iconSize}px`,\n \"--input-focus-ring-width\": `${inputTokens.focusRingWidth}px`,\n borderRadius: \"var(--input-radius)\",\n outline: \"none\",\n ...style,\n };\n}\n\nfunction getAffixMode(prefix: React.ReactNode, hasRightAdornment: boolean) {\n if (prefix != null && hasRightAdornment) return \"both\";\n if (prefix != null) return \"prefix\";\n if (hasRightAdornment) return \"suffix\";\n return \"none\";\n}\n\nfunction isInvalid(\n error: string | boolean | undefined,\n ariaInvalid: NativeInputProps[\"aria-invalid\"],\n) {\n return (\n error === true || typeof error === \"string\" || ariaInvalid === true || ariaInvalid === \"true\"\n );\n}\n\nfunction isTextAffix(value: React.ReactNode): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction joinDescriptionIds(...ids: Array<string | undefined>) {\n return ids.filter(Boolean).join(\" \") || undefined;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>((props, forwardedRef) => {\n const {\n className,\n type = \"text\",\n size = \"md\",\n prefix,\n suffix,\n clearable,\n onClear,\n onValueChange,\n shortcut,\n loading,\n revealable,\n revealLabel = \"Show password\",\n hideLabel = \"Hide password\",\n clearOnEscape,\n wrapperClassName,\n fieldClassName,\n label,\n description,\n error,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n disabled,\n style,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n id,\n ...rest\n } = props;\n\n const isControlled = value !== undefined;\n const baseId = React.useId();\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const descriptionId = description && id ? `${id}-description` : undefined;\n const errorId = typeof error === \"string\" && id ? `${id}-error` : undefined;\n const prefixDescriptionId = isTextAffix(prefix) ? `${id ?? baseId}-prefix` : undefined;\n const suffixDescriptionId = isTextAffix(suffix) ? `${id ?? baseId}-suffix` : undefined;\n const [internalValue, setInternalValue] = React.useState(\n typeof defaultValue === \"string\" || typeof defaultValue === \"number\"\n ? String(defaultValue)\n : \"\",\n );\n const [passwordVisible, setPasswordVisible] = React.useState(false);\n\n const currentValue = isControlled ? String(value ?? \"\") : internalValue;\n const clearOnEscapeEnabled = clearOnEscape ?? type === \"search\";\n const canRevealPassword = Boolean(revealable && type === \"password\");\n const showClear = Boolean(clearable && !disabled && currentValue.length > 0 && !loading);\n const showShortcut = Boolean(shortcut && !loading && !showClear);\n const showSpinner = Boolean(loading);\n const showPasswordToggle = Boolean(canRevealPassword && !loading && !showClear && !showShortcut);\n const hasRightAdornment =\n showClear || showShortcut || showSpinner || showPasswordToggle || suffix != null;\n const hasControlWrapper = prefix != null || hasRightAdornment;\n const affix = getAffixMode(prefix, hasRightAdornment);\n const resolvedInvalid = isInvalid(error, ariaInvalid);\n const describedBy = joinDescriptionIds(\n ariaDescribedBy,\n prefixDescriptionId,\n suffixDescriptionId,\n descriptionId,\n errorId,\n );\n const valueProps: Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"value\"\n > = isControlled\n ? { value }\n : clearable || shortcut || clearOnEscapeEnabled\n ? { value: currentValue }\n : { defaultValue };\n\n const setInputRef = React.useCallback(\n (node: HTMLElement | null) => {\n const input = node instanceof HTMLInputElement ? node : null;\n inputRef.current = input;\n assignRef(forwardedRef, input);\n },\n [forwardedRef],\n );\n\n const emitNativeInput = React.useCallback(\n (nextValue: string) => {\n const input = inputRef.current;\n\n if (!input) {\n if (!isControlled) setInternalValue(nextValue);\n onValueChange?.(nextValue);\n return;\n }\n\n const valueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\",\n )?.set;\n\n valueSetter?.call(input, nextValue);\n input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n },\n [isControlled, onValueChange],\n );\n\n const syncInputValue = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(event.currentTarget.value);\n onValueChange?.(event.currentTarget.value);\n onChange?.(event);\n },\n [isControlled, onChange, onValueChange],\n );\n\n const handleClear = React.useCallback(() => {\n emitNativeInput(\"\");\n onClear?.();\n inputRef.current?.focus();\n }, [emitNativeInput, onClear]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n !clearOnEscapeEnabled ||\n currentValue.length === 0 ||\n disabled\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n handleClear();\n },\n [clearOnEscapeEnabled, currentValue.length, disabled, handleClear, onKeyDown],\n );\n\n const control = (\n <BaseInput\n ref={setInputRef}\n data-slot=\"input\"\n type={canRevealPassword && passwordVisible ? \"text\" : type}\n id={id}\n disabled={disabled}\n aria-invalid={resolvedInvalid || undefined}\n aria-describedby={describedBy}\n aria-busy={loading || undefined}\n className={cn(\n inputVariants({ size, affix }),\n type === \"file\" && \"p-0 pr-[var(--input-padding-x)] text-muted-foreground\",\n className,\n )}\n style={getInputStyle(size, style)}\n onChange={syncInputValue}\n onKeyDown={handleKeyDown}\n {...rest}\n {...valueProps}\n />\n );\n\n const inputControl = hasControlWrapper ? (\n <div\n data-slot=\"input-wrapper\"\n className={cn(\"relative flex items-center\", wrapperClassName)}\n style={getInputStyle(size, undefined)}\n >\n {prefix != null && (\n <span\n id={prefixDescriptionId}\n aria-hidden={!isTextAffix(prefix)}\n className={affixVariants({ side: \"prefix\" })}\n >\n {prefix}\n </span>\n )}\n\n {control}\n\n {showSpinner && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-[var(--input-control-inset)] top-1/2 flex size-[var(--input-control-size)] -translate-y-1/2 items-center justify-center text-muted-foreground\"\n style={getInputStyle(size, undefined)}\n >\n <Loader2 className=\"size-[var(--input-control-icon-size)] animate-spin\" />\n </span>\n )}\n\n {showClear && (\n <button\n type=\"button\"\n aria-label=\"Clear input\"\n disabled={disabled}\n className={inputControlButtonVariants()}\n style={getInputStyle(size, undefined)}\n onClick={handleClear}\n >\n <X aria-hidden=\"true\" />\n </button>\n )}\n\n {showShortcut && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-[var(--input-control-inset)] top-1/2 flex -translate-y-1/2 items-center\"\n style={getInputStyle(size, undefined)}\n >\n <Kbd small>{currentValue.length > 0 ? \"Esc\" : shortcut}</Kbd>\n </span>\n )}\n\n {showPasswordToggle && (\n <button\n type=\"button\"\n aria-label={passwordVisible ? hideLabel : revealLabel}\n aria-pressed={passwordVisible}\n disabled={disabled}\n className={inputControlButtonVariants()}\n style={getInputStyle(size, undefined)}\n onClick={() => {\n setPasswordVisible((visible) => !visible);\n inputRef.current?.focus();\n }}\n >\n {passwordVisible ? <EyeOff aria-hidden=\"true\" /> : <Eye aria-hidden=\"true\" />}\n </button>\n )}\n\n {suffix != null && !showClear && !showShortcut && !showSpinner && !showPasswordToggle && (\n <span\n id={suffixDescriptionId}\n aria-hidden={!isTextAffix(suffix)}\n className={affixVariants({ side: \"suffix\" })}\n >\n {suffix}\n </span>\n )}\n </div>\n ) : (\n control\n );\n\n if (!label && !description && typeof error !== \"string\") {\n return inputControl;\n }\n\n return (\n <div\n data-slot=\"input-field\"\n className={cn(\"grid gap-[var(--input-field-gap)]\", fieldClassName)}\n style={\n {\n \"--input-field-gap\": `${inputTokens.fieldGap}px`,\n } as React.CSSProperties\n }\n >\n {label && (\n <label htmlFor={id} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n\n {inputControl}\n\n {description && !error && (\n <p id={descriptionId} className={fieldMessageVariants({ tone: \"description\" })}>\n {description}\n </p>\n )}\n\n {typeof error === \"string\" && (\n <p id={errorId} role=\"alert\" className={fieldMessageVariants({ tone: \"error\" })}>\n {error}\n </p>\n )}\n </div>\n );\n});\nInput.displayName = \"Input\";\n\nexport { Input, inputControlButtonVariants, inputVariants };\n","\"use client\";\n\nimport {\n Check,\n DoubleCheck as CheckCheck,\n MoreHorizontal,\n PaperAirplane as Send,\n FacePlus as SmilePlus,\n Users,\n} from \"@nebutra/icons\";\nimport Image from \"next/image\";\nimport type React from \"react\";\nimport { useState } from \"react\";\nimport { Input } from \"../primitives/input\";\nimport { cn } from \"../utils/cn\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ChatSender {\n /** Display name */\n name: string;\n /** Avatar URL */\n avatar: string;\n /** Online status */\n isOnline: boolean;\n}\n\nexport interface ChatReaction {\n /** Emoji character */\n emoji: string;\n /** Number of reactions */\n count: number;\n /** Whether current user has reacted */\n reacted: boolean;\n}\n\nexport interface ChatMessage {\n /** Unique message identifier */\n id: string;\n /** Message text content */\n content: string;\n /** Sender information */\n sender: ChatSender;\n /** Display timestamp */\n timestamp: string;\n /** Delivery status */\n status: \"sent\" | \"delivered\" | \"read\";\n /** Optional reactions */\n reactions?: ChatReaction[];\n}\n\nexport interface TeamChatProps {\n /** Chat/channel name */\n chatName: string;\n /** Optional tagline under the name */\n tagline?: string;\n /** Array of messages to display */\n messages: ChatMessage[];\n /** Placeholder text for input */\n inputPlaceholder?: string;\n /** Callback when send button clicked */\n onSendMessage?: (message: string) => void;\n /** Callback when reaction clicked */\n onReactionClick?: (messageId: string, emoji: string) => void;\n /** Callback when more options clicked */\n onMoreOptions?: () => void;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// Sub-components\n// =============================================================================\n\ninterface AvatarProps {\n src: string;\n alt: string;\n isOnline?: boolean;\n size?: \"sm\" | \"md\";\n}\n\nfunction Avatar({ src, alt, isOnline, size = \"md\" }: AvatarProps) {\n const sizeClasses = size === \"sm\" ? \"w-10 h-10\" : \"w-10 h-10\";\n\n return (\n <div className=\"relative\">\n <Image\n src={src}\n alt={alt}\n className={cn(\n sizeClasses,\n \"rounded-full ring-1 ring-gray-400 dark:ring-gray-600 object-cover\",\n )}\n width={400}\n height={400}\n />\n {isOnline !== undefined && (\n <span\n className={cn(\n \"absolute bottom-0 right-0 w-3 h-3 rounded-full ring-2 ring-white dark:ring-black\",\n isOnline ? \"bg-green-500\" : \"bg-[var(--neutral-8)]\",\n )}\n />\n )}\n </div>\n );\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * TeamChat - Team messaging interface with participant sidebar\n *\n * @description\n * A full-featured team chat UI component with participant list,\n * message display with reactions, and message input.\n *\n * @example\n * ```tsx\n * <TeamChat\n * chatName=\"Engineering Team\"\n * tagline=\"Ship fast, ship often\"\n * messages={[\n * {\n * id: \"1\",\n * content: \"Hey team! Ready for standup?\",\n * sender: { name: \"Alice\", avatar: \"/alice.jpg\", isOnline: true },\n * timestamp: \"10:00 AM\",\n * status: \"read\",\n * },\n * ]}\n * onSendMessage={(msg) => console.log(msg)}\n * />\n * ```\n */\nexport function TeamChat({\n chatName,\n tagline = \"Collaborate creatively, deliver clearly.\",\n messages,\n inputPlaceholder = \"Write your message...\",\n onSendMessage,\n onReactionClick,\n onMoreOptions,\n className,\n}: TeamChatProps) {\n const [selectedSender, setSelectedSender] = useState<string | null>(null);\n const [inputValue, setInputValue] = useState(\"\");\n\n // Get unique senders from messages\n const uniqueSenders = Array.from(\n new Map(messages.map((m) => [m.sender.name, m.sender])).values(),\n );\n\n // Filter messages by selected sender or show all\n const filteredMessages = selectedSender\n ? messages.filter((m) => m.sender.name === selectedSender)\n : messages;\n\n const handleSend = () => {\n if (inputValue.trim() && onSendMessage) {\n onSendMessage(inputValue.trim());\n setInputValue(\"\");\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n\n return (\n <div\n className={cn(\n \"w-full max-w-5xl mx-auto p-6 bg-white dark:bg-black rounded-[var(--radius-3xl)] shadow-lg flex flex-col h-[550px] border border-[var(--neutral-7)]\",\n className,\n )}\n >\n {/* Header */}\n <header className=\"flex justify-between items-center border-b border-[var(--neutral-7)] pb-3 mb-6\">\n <div className=\"flex items-center gap-3\">\n <Users className=\"w-8 h-8 text-black dark:text-white\" />\n <div>\n <h2 className=\"text-2xl font-semibold text-black dark:text-white\">{chatName}</h2>\n {tagline && <p className=\"italic text-sm text-[var(--neutral-10)]\">{tagline}</p>}\n </div>\n </div>\n <button\n type=\"button\"\n aria-label=\"More options\"\n onClick={onMoreOptions}\n className=\"p-2 rounded-[var(--radius-lg)] hover:bg-[var(--neutral-3)] transition\"\n >\n <MoreHorizontal className=\"w-6 h-6 text-[var(--neutral-10)]\" />\n </button>\n </header>\n\n {/* Body */}\n <main className=\"flex flex-1 overflow-hidden rounded-[var(--radius-xl)] border border-[var(--neutral-7)]\">\n {/* Participants List */}\n <aside className=\"w-56 bg-[var(--neutral-2)] border-r border-[var(--neutral-7)] p-4 overflow-y-auto\">\n {uniqueSenders.map((sender) => {\n const isSelected = selectedSender === sender.name;\n return (\n <button\n type=\"button\"\n key={sender.name}\n onClick={() => setSelectedSender(isSelected ? null : sender.name)}\n className={cn(\n \"flex items-center gap-3 w-full p-3 mb-3 rounded-[var(--radius-lg)] transition-colors\",\n isSelected\n ? \"bg-black dark:bg-white text-white dark:text-black\"\n : \"hover:bg-[var(--neutral-4)] text-[var(--neutral-12)]\",\n )}\n >\n <Avatar src={sender.avatar} alt={sender.name} isOnline={sender.isOnline} />\n <span className=\"text-left font-medium truncate\">{sender.name}</span>\n </button>\n );\n })}\n </aside>\n\n {/* Messages */}\n <section className=\"flex-1 p-6 overflow-y-auto bg-white dark:bg-black\">\n {filteredMessages.length === 0 ? (\n <p className=\"text-center text-[var(--neutral-9)]\">No messages to display.</p>\n ) : (\n filteredMessages.map((message) => (\n <div\n key={message.id}\n className=\"mb-6 last:mb-0 group border-b border-[var(--neutral-6)] pb-4\"\n >\n <div className=\"flex items-center gap-4 mb-2\">\n <Avatar src={message.sender.avatar} alt={message.sender.name} />\n <div>\n <p className=\"font-semibold text-black dark:text-white\">\n {message.sender.name}\n </p>\n <span className=\"text-xs text-[var(--neutral-9)]\">{message.timestamp}</span>\n </div>\n </div>\n <p className=\"text-[var(--neutral-12)] text-lg mb-1\">{message.content}</p>\n <div className=\"flex items-center justify-between text-sm text-[var(--neutral-10)]\">\n <div className=\"flex items-center gap-1\">\n {message.status === \"read\" && <CheckCheck className=\"w-5 h-5 text-green-500\" />}\n {message.status === \"delivered\" && <Check className=\"w-5 h-5\" />}\n <span>{message.timestamp}</span>\n </div>\n <div className=\"flex gap-2\">\n {message.reactions?.map((reaction) => (\n <button\n type=\"button\"\n key={reaction.emoji}\n onClick={() => onReactionClick?.(message.id, reaction.emoji)}\n className={cn(\n \"px-2 py-1 rounded-[var(--radius-md)] text-sm transition-colors\",\n reaction.reacted\n ? \"bg-[var(--neutral-5)] text-black dark:text-white\"\n : \"bg-[var(--neutral-3)] text-[var(--neutral-11)]\",\n \"hover:bg-[var(--neutral-4)]\",\n )}\n >\n {reaction.emoji} {reaction.count}\n </button>\n ))}\n </div>\n </div>\n </div>\n ))\n )}\n </section>\n </main>\n\n {/* Footer */}\n <footer className=\"mt-6 flex items-center gap-4 border-t border-[var(--neutral-7)] pt-4\">\n <button\n type=\"button\"\n aria-label=\"Add emoji\"\n className=\"p-3 rounded-full bg-[var(--neutral-3)] hover:bg-[var(--neutral-4)] transition\"\n >\n <SmilePlus className=\"w-6 h-6 text-[var(--neutral-10)]\" />\n </button>\n <Input\n type=\"text\"\n value={inputValue}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={inputPlaceholder}\n />\n <button\n type=\"button\"\n aria-label=\"Send message\"\n onClick={handleSend}\n className=\"p-3 rounded-full bg-black dark:bg-white text-white dark:text-black hover:brightness-90 transition\"\n >\n <Send className=\"w-6 h-6\" />\n </button>\n </footer>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/shared/animation/motion/tokens.ts","../../src/shared/animation/motion/variants.ts","../../src/shared/animation/motion/primitives/index.tsx","../../src/tokens/primitive.ts","../../src/tokens/shadows.ts","../../src/tokens/components/overlay.ts","../../src/utils/cn.ts","../../src/primitives/overlay.ts","../../src/primitives/dialog.tsx","../../src/components/ai-prompt-box/file-attachment-zone.tsx","../../src/utils/slot.tsx","../../src/primitives/button-variants.ts","../../src/primitives/button.tsx","../../src/tokens/components/textarea.ts","../../src/primitives/form-control.ts","../../src/primitives/textarea.tsx","../../src/primitives/tooltip.tsx","../../src/components/ai-prompt-box/voice-visualizer.tsx","../../src/components/ai-prompt-box/prompt-input.tsx","../../src/components/animate-in.tsx","../../src/components/ascii-text.tsx","../../src/components/changelog-widget.tsx","../../src/components/node-graph-canvas-adapter.ts","../../src/components/node-graph-canvas.tsx","../../src/components/onboarding-checklist.tsx","../../src/tokens/components/input.ts","../../src/primitives/kbd.tsx","../../src/primitives/input.tsx","../../src/components/team-chat.tsx"],"names":["containerVariants","itemVariants","BaseDialog","React","jsx","X","useReducedMotion","jsxs","React2","Fragment","React3","BaseTooltip","React4","BrainCog","FolderCode","AnimatePresence","Mic","animate","React6","useEffectEvent","cva","useId","useState","Button","motion","CheckCircle2","Image","React7","isInvalid","joinDescriptionIds","React8","BaseInput","Loader2","m","CheckCheck","SmilePlus","Send"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAChC,OAAA,EAAS,CAAA;AAAA,EACT,KAAA,EAAO,GAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,QAAA,EAAU,GAAA;AAAA,EACV,MAAA,EAAQ,GAAA;AAAA,EACR,IAAA,EAAM;AACR;AAEO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,CAAC,CAAA,EAAG,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EACpB,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EACnB,QAAA,EAAU,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EACzB,UAAA,EAAY,CAAC,IAAA,EAAM,CAAA,EAAG,KAAK,CAAC;AAC9B;AAEO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,GAAA,EAAI;AAAA,EACtE,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,CAAA,EAAE;AAAA,EAC/D,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,CAAA;AAC9D;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAChC,EAAA,EAAI,CAAA;AAAA,EACJ,EAAA,EAAI,CAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,KAAA,EAAO;AACT;AAEO,IAAM,oBAAA,GAAuB;AAAA,EAClC,OAAA,EAAS,EAAE,QAAA,EAAU,kBAAA,CAAmB,OAAA,EAAQ;AAAA,EAChD,OAAO,EAAE,QAAA,EAAU,mBAAmB,KAAA,EAAO,IAAA,EAAM,iBAAiB,KAAA,EAAM;AAAA,EAC1E,UAAU,EAAE,QAAA,EAAU,mBAAmB,QAAA,EAAU,IAAA,EAAM,iBAAiB,KAAA,EAAM;AAAA,EAChF,QAAQ,EAAE,QAAA,EAAU,mBAAmB,MAAA,EAAQ,IAAA,EAAM,iBAAiB,UAAA,EAAW;AAAA,EACjF,MAAM,EAAE,QAAA,EAAU,mBAAmB,IAAA,EAAM,IAAA,EAAM,iBAAiB,UAAA,EAAW;AAAA,EAC7E,QAAQ,gBAAA,CAAiB,MAAA;AAAA,EACzB,OAAO,gBAAA,CAAiB;AAC1B;;;ACtCO,IAAM,MAAA,GAAmB;AAAA,EAC9B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACtB,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,qBAAqB,QAAA,EAAS;AAAA,EACjE,MAAM,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,qBAAqB,KAAA;AACvD;AAEO,IAAM,OAAA,GAAoB;AAAA,EAC/B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,EACnC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAG,UAAA,EAAY,qBAAqB,MAAA,EAAO;AAAA,EACzE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAM,UAAA,EAAY,qBAAqB,KAAA;AACpE;AAEO,IAAM,OAAA,GAAU;AAAA,EACrB,EAAA,EAAI;AAAA,IACF,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,mBAAmB,EAAA,EAAG;AAAA,IAChD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,MAAA,EAAO;AAAA,IACrE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,kBAAA,CAAmB,EAAA,EAAI,UAAA,EAAY,oBAAA,CAAqB,KAAA;AAAM,GACvF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAC,mBAAmB,EAAA,EAAG;AAAA,IACjD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,MAAA,EAAO;AAAA,IACrE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAC,kBAAA,CAAmB,EAAA,EAAI,UAAA,EAAY,oBAAA,CAAqB,KAAA;AAAM,GACxF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,mBAAmB,EAAA,EAAG;AAAA,IAChD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,MAAA,EAAO;AAAA,IACrE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,kBAAA,CAAmB,EAAA,EAAI,UAAA,EAAY,oBAAA,CAAqB,KAAA;AAAM,GACvF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAC,mBAAmB,EAAA,EAAG;AAAA,IACjD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,MAAA,EAAO;AAAA,IACrE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAC,kBAAA,CAAmB,EAAA,EAAI,UAAA,EAAY,oBAAA,CAAqB,KAAA;AAAM;AAE1F;AAEO,IAAM,YAAA,GAAyB;AAAA,EACpC,SAAS,EAAC;AAAA,EACV,OAAA,EAAS,EAAE,UAAA,EAAY,EAAE,iBAAiB,IAAA,EAAM,aAAA,EAAe,MAAK,EAAE;AAAA,EACtE,IAAA,EAAM,EAAE,UAAA,EAAY,EAAE,iBAAiB,IAAA,EAAM,gBAAA,EAAkB,IAAG;AACpE;AAEO,IAAM,gBAAA,GAA6B;AAAA,EACxC,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,mBAAmB,EAAA,EAAG;AAAA,EAChD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,QAAA,EAAS;AAAA,EACvE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,kBAAA,CAAmB,EAAA,EAAI,UAAA,EAAY,oBAAA,CAAqB,KAAA;AACjF;AAEO,IAAM,YAAA,GAAyB;AAAA,EACpC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAM,CAAA,EAAG,mBAAmB,EAAA,EAAG;AAAA,EAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,KAAA,EAAO,GAAG,CAAA,EAAG,CAAA,EAAG,UAAA,EAAY,oBAAA,CAAqB,KAAA,EAAM;AAAA,EAC9E,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,KAAA,EAAO,IAAA;AAAA,IACP,GAAG,kBAAA,CAAmB,EAAA;AAAA,IACtB,YAAY,oBAAA,CAAqB;AAAA;AAErC;AAEO,IAAM,aAAA,GAAgB;AAAA,EAC3B,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,OAAA,EAAQ;AAAA,IAClC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,KAAA,EAAM;AAAA,IACpE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,OAAA,EAAS,UAAA,EAAY,qBAAqB,KAAA;AAAM,GACzE;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,MAAA,EAAO;AAAA,IACjC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,KAAA,EAAM;AAAA,IACpE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,MAAA,EAAQ,UAAA,EAAY,qBAAqB,KAAA;AAAM,GACxE;AAAA,EACA,GAAA,EAAK;AAAA,IACH,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,OAAA,EAAQ;AAAA,IAClC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,KAAA,EAAM;AAAA,IACpE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,OAAA,EAAS,UAAA,EAAY,qBAAqB,KAAA;AAAM,GACzE;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,MAAA,EAAO;AAAA,IACjC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,KAAA,EAAM;AAAA,IACpE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,MAAA,EAAQ,UAAA,EAAY,qBAAqB,KAAA;AAAM;AAE1E;AAEO,IAAM,cAAA,GAA2B;AAAA,EACtC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAM,CAAA,EAAG,mBAAmB,EAAA,EAAG;AAAA,EAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,KAAA,EAAO,GAAG,CAAA,EAAG,CAAA,EAAG,UAAA,EAAY,oBAAA,CAAqB,QAAA,EAAS;AAAA,EACjF,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,KAAA,EAAO,IAAA;AAAA,IACP,GAAG,kBAAA,CAAmB,EAAA;AAAA,IACtB,YAAY,oBAAA,CAAqB;AAAA;AAErC;AAEO,IAAM,cAAA,GAA2B;AAAA,EACtC,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,mBAAmB,EAAA,EAAG;AAAA,EAChD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,qBAAqB,IAAA,EAAK;AAAA,EACnE,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAC,kBAAA,CAAmB,EAAA,EAAI,UAAA,EAAY,oBAAA,CAAqB,QAAA;AAClF;AAEO,IAAM,qBAAA,GAAkC;AAAA,EAC7C,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACtB,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,qBAAqB,OAAA,EAAQ;AAAA,EAChE,MAAM,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,qBAAqB,OAAA;AACvD;AC9EA,SAAS,qBAAA,CAAsB,QAAA,EAAoB,cAAA,GAAiB,KAAA,EAAO;AACzE,EAAA,MAAM,qBAAqB,gBAAA,EAAiB;AAC5C,EAAA,OAAO,kBAAA,IAAsB,CAAC,cAAA,GAAiB,qBAAA,GAAwB,QAAA;AACzE;AAEO,SAAS,MAAA,CAAO,EAAE,QAAA,EAAU,GAAG,OAAM,EAAqB;AAC/D,EAAA,MAAM,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAE7C,EAAA,uBACE,GAAA,CAAC,MAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,MAAA,EAAO,QAAA,EAAqB,GAAG,OACjF,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,QAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEzD,EAAA,uBACE,GAAA,CAAC,MAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,MAAA,EAAO,QAAA,EAAqB,GAAG,OACjF,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAA,CAAQ,EAAE,QAAA,EAAU,GAAG,OAAM,EAAqB;AAChE,EAAA,MAAM,QAAA,GAAW,sBAAsB,OAAO,CAAA;AAE9C,EAAA,uBACE,GAAA,CAAC,MAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,MAAA,EAAO,QAAA,EAAqB,GAAG,OACjF,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,OAAM,EAAqB;AACrE,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,UAAA,EAAY,EAAE,GAAG,EAAA,EAAG,EAAG,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK,EAAI,GAAG,OAC5D,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,OAAM,EAAqB;AACrE,EAAA,MAAMA,kBAAAA,GAAoB,sBAAsB,YAAY,CAAA;AAC5D,EAAA,MAAMC,aAAAA,GAAe,sBAAsB,gBAAgB,CAAA;AAE3D,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAUD,kBAAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEH,gBAAM,OAAA,CAAQ,QAAQ,IACnB,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBACnB,GAAA,CAAC,MAAA,CAAO,KAAP,EAAuB,QAAA,EAAUC,eAC/B,QAAA,EAAA,KAAA,EAAA,EADc,KAEjB,CACD,CAAA,GACD;AAAA;AAAA,GACN;AAEJ;AAEO,SAAS,cAAc,EAAE,QAAA,EAAU,IAAA,EAAM,GAAG,OAAM,EAAyC;AAChG,EAAA,MAAM,QAAA,GAAW,sBAAsB,YAAY,CAAA;AAEnD,EAAA,2BACG,eAAA,EAAA,EACE,QAAA,EAAA,IAAA,uBACE,MAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,MAAK,MAAA,EAAO,QAAA,EAAqB,GAAG,KAAA,EACjF,QAAA,EACH,IACE,IAAA,EACN,CAAA;AAEJ;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,OAAA;AAAA,EACP,GAAG;AACL,CAAA,EAA4E;AAC1E,EAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,aAAA,CAAc,IAAI,CAAC,CAAA;AAE1D,EAAA,2BACG,eAAA,EAAA,EACE,QAAA,EAAA,IAAA,uBACE,MAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,MAAK,MAAA,EAAO,QAAA,EAAqB,GAAG,KAAA,EACjF,QAAA,EACH,IACE,IAAA,EACN,CAAA;AAEJ;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,QAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,MAAM,QAAA,GAAW,sBAAsB,cAAc,CAAA;AAErD,EAAA,2BACG,eAAA,EAAA,EACE,QAAA,EAAA,IAAA,uBACE,MAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,MAAK,MAAA,EAAO,QAAA,EAAqB,GAAG,KAAA,EACjF,QAAA,EACH,IACE,IAAA,EACN,CAAA;AAEJ;AAEO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,GAAG,OAAM,EAAqB;AACvE,EAAA,MAAM,QAAA,GAAW,sBAAsB,cAAc,CAAA;AAErD,EAAA,uBACE,GAAA,CAAC,MAAA,CAAO,GAAA,EAAP,EAAW,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,MAAA,EAAO,QAAA,EAAqB,GAAG,OACjF,QAAA,EACH,CAAA;AAEJ;CC7I+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,EAQH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAqBO,IAAM,eAAA,GAAkB;AAAA,EAC7B,EAAA,EAAI,EAAA;AAAA;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,CAIN,CAAA;AAMO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,IAAA,EAAM,EAMR,CAAA;;;AClIO,IAAM,aAAA,GAAgB;AAAA,EAI3B,EAAA,EAAI,WAAA;AAAA,EAGJ,KAAA,EAAO,YAGT,CAAA;;;AC/BA,IAAM,yBAAA,GACJ,uFAAA;AAEK,IAAM,aAAA,GAAgB;AAAA,EAC3B,QAAA,EAAU,IAAA;AAAA,EACV,KAAA,EAAO,IAAA;AAAA,EAEP,OAAA,EAAS;AACX,CAAA;AAkBO,IAAM,iBAAA,GAAoB;AAAA,EAE/B,QAAA,EACE,+NAAA;AAAA,EACF,YAAA,EAAc;AAAA,IACZ,qFAAA;AAAA,IACA,+EAAA;AAAA,IACA,4BAAA;AAAA,IACA,cAAc,KAAK,CAAA;AAAA,IACnB,cAAA;AAAA,IACA,sGAAA;AAAA,IACA,mHAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EAuCV,cAAA,EAAgB;AAAA,IACd,+IAAA;AAAA,IACA,aAAA,CAAc,EAAA;AAAA,IACd,sGAAA;AAAA,IACA,mHAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EAWV,WAAA,EAAa,uFAAuF,yBAAyB,CAAA,uNAAA;AAC/H,CAAA;ACzGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACeO,IAAM,0BAAA,GAA6B;AAAA,EACxC,YAAA,EACE,6FAoDJ,CAAA;AChEA,IAAM,SAASC,QAAA,CAAW,IAAA;AAC1B,IAAM,eAAeA,QAAA,CAAW,MAAA;AAEhC,IAAM,gBAAgB,CAAC;AAAA,EACrB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAEM;AACJ,EAAA,IAAI,OAAA,IAAiBC,MAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,uBACEC,GAAAA;AAAA,MAACF,QAAA,CAAW,OAAA;AAAA,MAAX;AAAA,QACC,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AACA,EAAA,uBACEE,IAACF,QAAA,CAAW,OAAA,EAAX,EAAmB,GAAA,EAAW,GAAG,OAC/B,QAAA,EACH,CAAA;AAEJ,CAAA;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,cAAc,CAAC;AAAA,EACnB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAEM;AACJ,EAAA,IAAI,OAAA,IAAiBC,MAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,uBACEC,GAAAA;AAAA,MAACF,QAAA,CAAW,KAAA;AAAA,MAAX;AAAA,QACC,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AACA,EAAA,uBACEE,IAACF,QAAA,CAAW,KAAA,EAAX,EAAiB,GAAA,EAAW,GAAG,OAC7B,QAAA,EACH,CAAA;AAEJ,CAAA;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,gBAAgB,CAAC;AAAA,EACrB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAGEE,GAAAA;AAAA,EAACF,QAAA,CAAW,QAAA;AAAA,EAAX;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,iBAAA,CAAkB,QAAA,EAAU,SAAS,CAAA;AAAA,IACnD,OAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,QAAA,EAAU,GAAG,KAAA,EAAM;AAAA,IACjD,GAAG;AAAA;AACN,CAAA;AAEF,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,gBAAgB,CAAC;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,0BAGG,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAE,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,kBACf,IAAA;AAAA,IAACF,QAAA,CAAW,KAAA;AAAA,IAAX;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,iBAAA,CAAkB,YAAA;AAAA,QAClB,0BAAA,CAA2B,YAAA;AAAA,QAC3B;AAAA,OACF;AAAA,MACA,OAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA,MAC9C,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,IAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,iBAAA,CAAkB,WAAA,EACxC,QAAA,EAAA;AAAA,0BAAAE,GAAAA,CAACC,KAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,0BACvBD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA;AACF,CAAA,EACF,CAAA;AAEF,aAAA,CAAc,WAAA,GAAc,eAAA;AA4B5B,IAAM,cAAc,CAAC;AAAA,EACnB,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAGEA,GAAAA;AAAA,EAACF,QAAA,CAAW,KAAA;AAAA,EAAX;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,mDAAA,EAAqD,SAAS,CAAA;AAAA,IAC3E,GAAG;AAAA;AACN,CAAA;AAEF,WAAA,CAAY,WAAA,GAAc,aAAA;AC9InB,IAAM,cAAc,CAAC,IAAA,KAAe,IAAA,CAAK,IAAA,CAAK,WAAW,QAAQ;AAEjE,IAAM,iBAAA,GAAoB,CAAC,IAAA,KAAe,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,YAAY,CAAA;AAExF,IAAM,mBAAA,GAAsB,CAAC,CAAA,KAAuB;AACzD,EAAA,CAAA,CAAE,cAAA,EAAe;AACjB,EAAA,CAAA,CAAE,eAAA,EAAgB;AACpB;AAQO,IAAM,eAAA,GAAkD,CAAC,EAAE,QAAA,EAAU,SAAQ,KAAM;AACxF,EAAA,MAAM,qBAAqBI,gBAAAA,EAAiB;AAE5C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,uBACEF,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,CAAC,CAAC,QAAA,EAAU,YAAA,EAAc,OAAA,EACtC,QAAA,kBAAAG,IAAAA,CAAC,aAAA,EAAA,EAAc,WAAU,0EAAA,EACvB,QAAA,EAAA;AAAA,oBAAAH,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,oBAC9CA,GAAAA;AAAA,MAAC,CAAA,CAAE,GAAA;AAAA,MAAF;AAAA,QACC,OAAA,EAAS,kBAAA,GAAqB,EAAE,OAAA,EAAS,CAAA,KAAM,EAAE,OAAA,EAAS,CAAA,EAAG,KAAA,EAAO,IAAA,EAAK;AAAA,QACzE,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAI,kBAAA,GAAqB,EAAC,GAAI,EAAE,KAAA,EAAO,CAAA,EAAE,EAAG;AAAA,QACnE,IAAA,EAAM,kBAAA,GAAqB,EAAE,OAAA,EAAS,CAAA,KAAM,EAAE,OAAA,EAAS,CAAA,EAAG,KAAA,EAAO,IAAA,EAAK;AAAA,QACtE,UAAA,EAAY,kBAAA,GAAqB,EAAE,QAAA,EAAU,CAAA,KAAM,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,SAAA,EAAU;AAAA,QACpF,SAAA,EAAU,+EAAA;AAAA,QAEV,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,QAAA;AAAA,YACL,GAAA,EAAI,cAAA;AAAA,YACJ,SAAA,EAAU,gEAAA;AAAA,YACV,IAAA,EAAI,IAAA;AAAA,YACJ,KAAA,EAAM;AAAA;AAAA;AACR;AAAA;AACF,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAWvB,SAAS,wBAAA,CAAyB;AAAA,EACvC,KAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAkC;AAChC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,WAAA,EAAa,OAAO,IAAA;AAE9C,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0JACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,IAAA,MAAM,UAAA,GAAa,kBAAkB,IAAI,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU,aAAa,UAAU,CAAA;AACvC,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAqB,SAAA,EAAU,0BAAA,EAC7B,QAAA,EAAA,WAAA,CAAY,IAAI,CAAA,IAAK,OAAA,oBACpBG,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAH,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAY,CAAA,QAAA,EAAW,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,UAChC,SAAA,EAAU,uMAAA;AAAA,UACV,OAAA,EAAS,MAAM,SAAA,CAAU,OAAO,CAAA;AAAA,UAEhC,QAAA,kBAAAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,OAAA;AAAA,cACL,KAAK,IAAA,CAAK,IAAA;AAAA,cACV,SAAA,EAAU,4BAAA;AAAA,cACV,IAAA,EAAI,IAAA;AAAA,cACJ,KAAA,EAAM;AAAA;AAAA;AACR;AAAA,OACF;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAY,CAAA,OAAA,EAAU,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,UAC/B,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,YAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,YAAA,QAAA,CAAS,IAAI,CAAA;AAAA,UACf,CAAA;AAAA,UACA,SAAA,EAAU,oHAAA;AAAA,UAEV,QAAA,kBAAAA,GAAAA,CAACC,KAAAA,EAAA,EAAE,WAAU,oBAAA,EAAqB;AAAA;AAAA;AACpC,KAAA,EACF,KA5BM,UA8BV,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;ACnGO,IAAM,IAAA,GAAaG,MAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,OAAO,GAAG,KAAA,IAAS,GAAA,KAAQ;AAKjD,IAAA,MAAM,UAAA,GAAmBA,MAAA,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,MAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG;AAEjD,MAAA,uBACEJ,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,OAAaI,MAAA,CAAA,YAAA;AAAA,MACX,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AC3DZ,IAAM,cAAA,GAAiB,GAAA;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,uBACEJ,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,CAAAE,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,OAAA,oBAAWL,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;;;AC3Id,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,EACxC,KAAA,EACE,qGAAA;AAAA,EACF,QAAA,EACE,wGAGJ,CAAA;AAEO,IAAM,4BAAA,GAA+B;AAAA,EAC1C,KAAA,EACE,iHAAA;AAAA,EACF,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,SAAeM,MAAA,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,MAAA,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,0BACJN,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;AC9IvB,IAAM,wBAAA,GAA2B,GAAA;AAKjC,IAAM,kBAAkB,CAAC;AAAA,EACvB,QAAA;AAAA,EACA,aAAA,GAAgB;AAClB,CAAA,KAGM;AACJ,EAAA,uBAAOA,GAAAA,CAACO,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,uBACEP,GAAAA,CAACO,SAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EACpB,QAAA,kBAAAP,GAAAA,CAACO,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,MAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,uBACER,GAAAA;AAAA,MAACO,SAAA,CAAY,OAAA;AAAA,MAAZ;AAAA,QACC,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AACA,EAAA,uBACEP,IAACO,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,qBAMEP,GAAAA,CAACO,SAAA,CAAY,MAAA,EAAZ,EACC,QAAA,kBAAAP,GAAAA;AAAA,EAACO,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,kBAAAP,GAAAA;AAAA,MAACO,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;AC3HtB,IAAM,mBAAA,GAAsB;AAC5B,IAAM,qBAAA,GAAwB,MAAM,IAAA,CAAK,EAAE,QAAQ,mBAAA,EAAoB,EAAG,CAAC,CAAA,EAAG,KAAA,MAAW;AAAA,EAC9F,EAAA,EAAI,aAAa,KAAK,CAAA,CAAA;AAAA,EACtB,MAAA,EAAQ,CAAA,EAAG,EAAA,GAAO,KAAA,GAAQ,KAAM,EAAG,CAAA,CAAA,CAAA;AAAA,EACnC,cAAA,EAAgB,CAAA,EAAG,KAAA,GAAQ,IAAI,CAAA,CAAA,CAAA;AAAA,EAC/B,mBAAmB,CAAA,EAAG,GAAA,GAAQ,KAAA,GAAQ,EAAA,GAAM,IAAK,EAAE,CAAA,CAAA;AACrD,CAAA,CAAE;AAEK,IAAM,mBAAA,GAAsB,CAAC,OAAA,KAAoB;AACtD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACpC,EAAA,MAAM,OAAO,OAAA,GAAU,EAAA;AACvB,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,QAAA,EAAS,CAAE,SAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAChF;AAQO,IAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAA;AAAA,EACA,IAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,KAAM;AACJ,EAAA,MAAM,YAAY,qBAAA,CAAsB,KAAA;AAAA,IACtC,CAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,cAAA,EAAgB,qBAAA,CAAsB,MAAM;AAAA,GACvD;AAEA,EAAA,uBACEJ,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,kJAAA;AAAA,QACA,cAAc,aAAA,GAAgB;AAAA,OAChC;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EAAgD,CAAA;AAAA,0BAC/DA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iCAAA,EAAmC,QAAA,EAAA,mBAAA,CAAoB,IAAI,CAAA,EAAE;AAAA,SAAA,EAC/E,CAAA;AAAA,wBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DACZ,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,qBACdA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,8CAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,QAAQ,GAAA,CAAI,MAAA;AAAA,cACZ,gBAAgB,GAAA,CAAI,cAAA;AAAA,cACpB,mBAAmB,GAAA,CAAI;AAAA;AACzB,WAAA;AAAA,UANK,GAAA,CAAI;AAAA,SAQZ,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AChB5B,IAAM,kBAAA,GAAqB,CAAC,MAAA,KAAmB;AAAC,CAAA;AAChD,IAAM,2BAAA,GAA8BD,eAAAA,CAAM,aAAA,CAAc,KAAK,CAAA;AAC7D,IAAM,uBAAA,GAA0BA,eAAAA,CAAM,aAAA,CAAc,EAAE,CAAA;AACtD,IAAM,0BAAA,GAA6BA,eAAAA,CAAM,aAAA,CAAuC,kBAAkB,CAAA;AAClG,IAAM,2BAAA,GAA8BA,eAAAA,CAAM,aAAA,CAA+B,GAAG,CAAA;AAC5E,IAAM,wBAAA,GAA2BA,eAAAA,CAAM,aAAA,CAAwC,MAAS,CAAA;AACxF,IAAM,0BAAA,GAA6BA,eAAAA,CAAM,aAAA,CAAc,KAAK,CAAA;AAE5D,SAAS,cAAA,GAAiB;AACxB,EAAA,OAAO;AAAA,IACL,SAAA,EAAWA,eAAAA,CAAM,GAAA,CAAI,2BAA2B,CAAA;AAAA,IAChD,KAAA,EAAOA,eAAAA,CAAM,GAAA,CAAI,uBAAuB,CAAA;AAAA,IACxC,QAAA,EAAUA,eAAAA,CAAM,GAAA,CAAI,0BAA0B,CAAA;AAAA,IAC9C,SAAA,EAAWA,eAAAA,CAAM,GAAA,CAAI,2BAA2B,CAAA;AAAA,IAChD,QAAA,EAAUA,eAAAA,CAAM,GAAA,CAAI,wBAAwB,CAAA;AAAA,IAC5C,QAAA,EAAUA,eAAAA,CAAM,GAAA,CAAI,0BAA0B;AAAA,GAChD;AACF;AAkBA,IAAM,cAA0C,CAAC;AAAA,EAC/C,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY,GAAA;AAAA,EACZ,KAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,IAAIA,eAAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAqB;AACzC,IAAA,gBAAA,CAAiB,QAAQ,CAAA;AACzB,IAAA,aAAA,GAAgB,QAAQ,CAAA;AAAA,EAC1B,CAAA;AACA,EAAA,MAAM,cAAc,KAAA,IAAS,aAAA;AAC7B,EAAA,MAAM,iBAAiB,aAAA,IAAiB,YAAA;AAExC,EAAA,uBACEC,IAAC,eAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,2BAAA,CAA4B,QAAA,EAA5B,EAAqC,KAAA,EAAO,SAAA,EAC3C,0BAAAA,GAAAA,CAAC,uBAAA,CAAwB,UAAxB,EAAiC,KAAA,EAAO,aACvC,QAAA,kBAAAA,GAAAA,CAAC,2BAA2B,QAAA,EAA3B,EAAoC,OAAO,cAAA,EAC1C,QAAA,kBAAAA,IAAC,2BAAA,CAA4B,QAAA,EAA5B,EAAqC,KAAA,EAAO,SAAA,EAC3C,0BAAAA,GAAAA,CAAC,wBAAA,CAAyB,UAAzB,EAAkC,KAAA,EAAO,UACxC,QAAA,kBAAAA,GAAAA,CAAC,2BAA2B,QAAA,EAA3B,EAAoC,KAAA,EAAO,QAAA,EAE1C,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wKAAA;AAAA,QACA,SAAA,IAAa,uBAAA;AAAA,QACb;AAAA,OACF;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MAEC;AAAA;AAAA,KAEL,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ,CAAA;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAU1B,IAAM,mBAAA,GAEF,CAAC,EAAE,SAAA,EAAW,SAAA,EAAW,eAAA,GAAkB,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,GAAG,KAAA,EAAM,KAAM;AACvF,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,WAAW,QAAA,EAAU,QAAA,KAAa,cAAA,EAAe;AAC1E,EAAA,MAAM,WAAA,GAAcD,eAAAA,CAAM,MAAA,CAA4B,IAAI,CAAA;AAC1D,EAAAA,eAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,eAAA,IAAmB,CAAC,WAAA,CAAY,OAAA,EAAS;AAC7C,IAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACnC,IAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GACxB,OAAO,cAAc,QAAA,GACjB,CAAA,EAAG,KAAK,GAAA,CAAI,WAAA,CAAY,QAAQ,YAAA,EAAc,SAAS,CAAC,CAAA,EAAA,CAAA,GACxD,CAAA,IAAA,EAAO,YAAY,OAAA,CAAQ,YAAY,OAAO,SAAS,CAAA,CAAA,CAAA;AAAA,EAC/D,CAAA,EAAG,CAAC,SAAA,EAAW,eAAe,CAAC,CAAA;AAC/B,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAgD;AACrE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACpC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,QAAA,IAAW;AAAA,IACb;AACA,IAAA,SAAA,GAAY,CAAC,CAAA;AAAA,EACf,CAAA;AACA,EAAA,uBACEC,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,WAAA;AAAA,MACL,KAAA;AAAA,MACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACxC,SAAA,EAAW,aAAA;AAAA,MACX,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,EAAE,uBAAA,EAAyB,MAAA,EAAQ,GAAG,KAAA,EAAM;AAAA,MACnD,SAAA,EAAW,EAAA,CAAG,uDAAA,EAAyD,SAAS,CAAA;AAAA,MAChF,QAAA;AAAA,MACA,WAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAKA,IAAM,qBAAwD,CAAC;AAAA,EAC7D,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,2BAA2B,SAAS,CAAA,EAAI,GAAG,KAAA,EAC3D,QAAA,EACH,CAAA;AAWF,IAAM,oBAAsD,CAAC;AAAA,EAC3D,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,cAAA,EAAe;AACpC,EAAA,uBACEG,IAAAA,CAAC,OAAA,EAAA,EAAS,GAAG,KAAA,EACX,QAAA,EAAA;AAAA,oBAAAH,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAC,UACrB,QAAA,EACH,CAAA;AAAA,oBACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,MAAY,SAAA,EAAW,SAAA,IAAa,IACjD,QAAA,EAAA,OAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAGA,IAAM,gBAA0B,sBAC9BA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACb,QAAA,kBAAAA,GAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAU,4FAAA;AAAA,IACV,KAAA,EAAO;AAAA,MACL,QAAA,EACE;AAAA;AACJ;AACF,CAAA,EACF,CAAA;AAOF,IAAM,uBAAA,GAGF;AAAA,EACF,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,kCAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,oDAAA;AAAA,IACR,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,2CAAA;AAAA,IACR,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX,CAAA;AAEA,SAAS,cAAA,CAAe,EAAE,IAAA,EAAM,MAAA,EAAO,EAA8C;AACnF,EAAA,MAAM,SAAA,GAAY,GAAG,SAAA,EAAW,MAAA,GAAS,wBAAwB,IAAI,CAAA,CAAE,OAAO,cAAc,CAAA;AAC5F,EAAA,IAAI,SAAS,QAAA,EAAU,uBAAOA,GAAAA,CAAC,SAAM,SAAA,EAAsB,CAAA;AAC3D,EAAA,IAAI,SAAS,OAAA,EAAS,uBAAOA,GAAAA,CAACS,SAAS,SAAA,EAAsB,CAAA;AAC7D,EAAA,uBAAOT,GAAAA,CAACU,YAAA,EAAA,EAAW,SAAA,EAAsB,CAAA;AAC3C;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,aAAA,GAAgB,wBAAwB,IAAI,CAAA;AAClD,EAAA,MAAM,qBAAqBR,gBAAAA,EAAiB;AAC5C,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,yIAAA;AAAA,QACA,MAAA,GACI,cAAc,MAAA,GACd;AAAA,OACN;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,UAAC,CAAA,CAAE,GAAA;AAAA,UAAF;AAAA,YACC,SACE,kBAAA,GACI,EAAE,OAAA,EAAS,MAAA,GAAS,IAAI,IAAA,EAAK,GAC7B,EAAE,MAAA,EAAQ,SAAS,GAAA,GAAM,CAAA,EAAG,KAAA,EAAO,MAAA,GAAS,MAAM,CAAA,EAAE;AAAA,YAE1D,UAAA,EACE,kBAAA,GACI,EAAE,OAAA,EAAS,GAAE,GACb;AAAA,cACE,MAAA,EAAQ,SAAS,GAAA,GAAM,EAAA;AAAA,cACvB,KAAA,EAAO,GAAA;AAAA,cACP,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG,aAC5D;AAAA,YAEN,UAAA,EACE,kBAAA,GAAqB,EAAE,QAAA,EAAU,CAAA,EAAE,GAAI,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAG;AAAA,YAGvF,QAAA,kBAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAY,MAAA,EAAgB;AAAA;AAAA,SAC9C,EACF,CAAA;AAAA,wBACAA,GAAAA,CAACW,eAAAA,EAAA,EACE,oCACCX,GAAAA;AAAA,UAAC,CAAA,CAAE,IAAA;AAAA,UAAF;AAAA,YACC,OAAA,EAAS,kBAAA,GAAqB,EAAE,OAAA,EAAS,CAAA,KAAM,EAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,CAAA,EAAE;AAAA,YACtE,OAAA,EAAS,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,YACrC,IAAA,EAAM,kBAAA,GAAqB,EAAE,OAAA,EAAS,CAAA,KAAM,EAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,CAAA,EAAE;AAAA,YACnE,UAAA,EAAY,qBAAqB,EAAE,QAAA,EAAU,GAAE,GAAI,EAAE,UAAU,GAAA,EAAI;AAAA,YACnE,SAAA,EAAW,EAAA;AAAA,cACT,yDAAA;AAAA,cACA,aAAA,CAAc;AAAA,aAChB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAWA,SAAS,iBAAA,CAAkB;AAAA,EACzB,cAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,yDAAA;AAAA,QACA,cAAc,yBAAA,GAA4B;AAAA,OAC5C;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAQ,cAAA,EACzB,QAAA,kBAAAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,cAAA;AAAA,YACX,OAAA,EAAS,MAAM,cAAA,CAAe,OAAA,EAAS,KAAA,EAAM;AAAA,YAC7C,SAAA,EAAU,oJAAA;AAAA,YACV,QAAA,EAAU,WAAA;AAAA,YAEV,QAAA,kBAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,2BAAA,EAA4B;AAAA;AAAA,SACnD,EACF,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,cAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,cAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AACnC,cAAA,IAAI,IAAA,gBAAoB,IAAI,CAAA;AAC5B,cAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,GAAQ,EAAA;AAAA,YACzC,CAAA;AAAA,YACA,MAAA,EAAO,SAAA;AAAA,YACP,YAAA,EAAW;AAAA;AAAA,SACb;AAAA,wBACAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,QAAQ,KAAA,CAAM,MAAA;AAAA,cACd,KAAA,EAAM,QAAA;AAAA,cACN,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,YAAA,CAAa,QAAQ;AAAA;AAAA,WACtC;AAAA,0BACAA,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,0BACfA,GAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,QAAQ,KAAA,CAAM,KAAA;AAAA,cACd,KAAA,EAAM,OAAA;AAAA,cACN,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,MAAM,YAAA,CAAa,OAAO;AAAA;AAAA,WACrC;AAAA,0BACAA,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,0BACfA,GAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,QAAQ,KAAA,CAAM,MAAA;AAAA,cACd,KAAA,EAAM,QAAA;AAAA,cACN,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS;AAAA;AAAA;AACX,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAUA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,qBAAqBE,gBAAAA,EAAiB;AAE5C,EAAA,uBACEF,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SACE,SAAA,GACI,iBAAA,GACA,WAAA,GACE,gBAAA,GACA,aACE,cAAA,GACA,eAAA;AAAA,MAGV,QAAA,kBAAAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,SAAA,EAAW,EAAA;AAAA,YACT,iHAAA;AAAA,YACA,WAAA,GACI,2EAAA,GACA,UAAA,GACE,wDAAA,GACA;AAAA,WACR;AAAA,UACA,OAAA,EAAS,UAAA;AAAA,UACT,QAAA,EAAU,aAAa,CAAC,UAAA;AAAA,UAEvB,sCACCA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,iCAAA;AAAA,gBACA,qBAAqB,aAAA,GAAgB;AAAA;AACvC;AAAA,cAEA,WAAA,mBACFA,IAAC,UAAA,EAAA,EAAW,SAAA,EAAU,4BAA2B,CAAA,GAC/C,UAAA,mBACFA,GAAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,iCAAA,EAAkC,CAAA,mBAErDA,GAAAA,CAACY,UAAA,EAAA,EAAI,WAAU,mDAAA,EAAoD;AAAA;AAAA;AAEvE;AAAA,GACF;AAEJ;AAuBA,IAAM,0BAAA,GAAkD;AAAA,EACtD,KAAA,EAAO,EAAA;AAAA,EACP,OAAO,EAAC;AAAA,EACR,cAAc,EAAC;AAAA,EACf,aAAA,EAAe,IAAA;AAAA,EACf,WAAA,EAAa,KAAA;AAAA,EACb,aAAA,EAAe,CAAA;AAAA,EACf,UAAA,EAAY,KAAA;AAAA,EACZ,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAcA,SAAS,qBAAA,CACP,OACA,MAAA,EACqB;AACrB,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,IACzC,KAAK,iBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,CAAC,OAAO,IAAI,CAAA,EAAG,YAAA,EAAc,EAAC,EAAE;AAAA,IAC5D,KAAK,kBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,YAAA,EAAc,EAAE,CAAC,MAAA,CAAO,UAAU,GAAG,MAAA,CAAO,OAAA,EAAQ,EAAE;AAAA,IAC3E,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,YAAA,GAAe,EAAE,GAAG,KAAA,CAAM,YAAA,EAAa;AAC7C,MAAA,OAAO,YAAA,CAAa,OAAO,UAAU,CAAA;AACrC,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,YAAA,EAAc,YAAA;AAAA,QACd,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,SAAS,iBAAA,CAAkB,IAAI,CAAA,KAAM,MAAA,CAAO,UAAU;AAAA,OACnF;AAAA,IACF;AAAA,IACA,KAAK,oBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAO,QAAA,EAAS;AAAA,IACpD,KAAK,aAAA;AACH,MAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,KAAA,CAAM,UAAA,EAAY,WAAW,KAAA,EAAM;AAAA,MACrE;AACA,MAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,OAAO,SAAA,EAAW,CAAC,MAAM,SAAA,EAAU;AAAA,MACpE;AACA,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,MAAM,UAAA,EAAW;AAAA,IACnD,KAAK,iBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,CAAA,EAAG,aAAa,IAAA,EAAK;AAAA,IACzD,KAAK,gBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,KAAA,CAAM,gBAAgB,CAAA,EAAE;AAAA,IAC5D,KAAK,gBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,eAAe,CAAA,EAAE;AAAA,IAC1D,KAAK,gBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,EAAA,EAAI,OAAO,EAAC,EAAG,YAAA,EAAc,EAAC,EAAE;AAAA;AAEhE;AAGO,IAAM,cAAA,GAAgD,CAAC,KAAA,KAAU;AACtE,EAAA,MAAM;AAAA,IACJ,SAAS,MAAM;AAAA,IAAC,CAAA;AAAA,IAChB,SAAA,GAAY,KAAA;AAAA,IACZ,WAAA,GAAc,2BAAA;AAAA,IACd,SAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAIb,eAAAA,CAAM,UAAA,CAAW,uBAAuB,0BAA0B,CAAA;AAC5F,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,MAAM,cAAA,GAAiBA,eAAAA,CAAM,MAAA,CAAyB,IAAI,CAAA;AAC1D,EAAA,MAAM,YAAA,GAAeA,eAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AACtD,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAC1B,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,CAAA;AACxC,EAAA,MAAM,kBAAA,GAAqB,MAAM,QAAA,CAAS,EAAE,MAAM,aAAA,EAAe,IAAA,EAAM,UAAU,CAAA;AAEjF,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAe;AAClC,IAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,IAAA,GAAO,EAAA,GAAK,IAAA,GAAO,IAAA,EAAM;AAChC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,kBAAkB,IAAI,CAAA;AACzC,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,KAAM;AACrB,MAAA,MAAM,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA;AAC1B,MAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,kBAAA,EAAoB,UAAA,EAAY,SAAS,CAAA;AAAA,MAC5D;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAuB;AACzC,IAAA,mBAAA,CAAoB,CAAC,CAAA;AACrB,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,aAAa,KAAK,CAAA;AACpD,IAAA,MAAM,YAAY,YAAA,CAAa,IAAA,CAAK,CAAC,IAAA,KAAS,WAAA,CAAY,IAAI,CAAC,CAAA;AAC/D,IAAA,IAAI,SAAA,cAAuB,SAAS,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,YAAA,KAAuB;AAC/C,IAAA,MAAM,UAAA,GAAa,kBAAkB,YAAY,CAAA;AACjD,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,UAAA,EAAY,CAAA;AAAA,EAC9C,CAAA;AACA,EAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,KAAqB,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,UAAU,CAAA;AAE9F,EAAA,MAAM,gBAAA,GAAmB,cAAA,CAAe,CAAC,CAAA,KAAsB;AAC7D,IAAA,MAAM,KAAA,GAAQ,EAAE,aAAA,EAAe,KAAA;AAC/B,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/B,QAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,WAAA,CAAY,IAAI,CAAA;AAChB,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAAA,eAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAsB,gBAAA,CAAiB,CAAC,CAAA;AAC7D,IAAA,QAAA,CAAS,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAC9C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,OAAA,EAAS,WAAW,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,eAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,WAAA,CAAY,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,gBAAA,EAAkB,CAAA,EAAG,GAAI,CAAA;AACjF,IAAA,OAAO,MAAM,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,KAAA,CAAM,IAAA,EAAK,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AACpC,MAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,MAAA,IAAI,YAAY,aAAA,GAAgB,WAAA;AAAA,WAAA,IACvB,WAAW,aAAA,GAAgB,UAAA;AAAA,WAAA,IAC3B,YAAY,aAAA,GAAgB,WAAA;AACrC,MAAA,MAAM,iBAAiB,aAAA,GAAgB,CAAA,EAAG,aAAa,CAAA,EAAG,KAAK,CAAA,CAAA,CAAA,GAAM,KAAA;AACrE,MAAA,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAC5B,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,gBAAA,EAAkB,CAAA;AAAA,IACrC;AAAA,EACF,CAAA;AACA,EAAA,MAAM,iBAAiB,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,mBAAmB,CAAA;AACjE,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,MAAA,CAAO,CAAA,iBAAA,EAAoB,aAAa,CAAA,SAAA,CAAA,EAAa,EAAE,CAAA;AACvD,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,gBAAA,EAAkB,CAAA;AAAA,EACrC,CAAA;AACA,EAAA,MAAM,aAAa,KAAA,CAAM,IAAA,EAAK,KAAM,EAAA,IAAM,MAAM,MAAA,GAAS,CAAA;AACzD,EAAA,uBACEI,IAAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAU,YAAA,EACpB,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,KAAA;AAAA,QACP,aAAA,EAAe,CAAC,KAAA,KAAU,QAAA,CAAS,EAAE,IAAA,EAAM,WAAA,EAAa,OAAO,CAAA;AAAA,QAC/D,SAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,oJAAA;AAAA,UACA,WAAA,IAAe,uBAAA;AAAA,UACf;AAAA,SACF;AAAA,QACA,UAAU,SAAA,IAAa,WAAA;AAAA,QACvB,KAAK,GAAA,IAAO,YAAA;AAAA,QACZ,UAAA,EAAY,mBAAA;AAAA,QACZ,WAAA,EAAa,mBAAA;AAAA,QACb,MAAA,EAAQ,UAAA;AAAA,QAER,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,wBAAA;AAAA,YAAA;AAAA,cACC,KAAA;AAAA,cACA,YAAA;AAAA,cACA,WAAA;AAAA,cACA,SAAA,EAAW,cAAA;AAAA,cACX,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,4FAAA;AAAA,gBACA,cAAc,+BAAA,GAAkC;AAAA,eAClD;AAAA,cAEA,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,mBAAA;AAAA,gBAAA;AAAA,kBACC,aACE,UAAA,GACI,mBAAA,GACA,SAAA,GACE,iBAAA,GACA,aACE,qBAAA,GACA,WAAA;AAAA,kBAEV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,WACF;AAAA,UACC,+BAAeA,GAAAA,CAAC,aAAA,EAAA,EAAc,WAAA,EAA0B,MAAM,aAAA,EAAe,CAAA;AAAA,0BAC9EG,IAAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAU,kDAAA,EAC5B,QAAA,EAAA;AAAA,4BAAAH,GAAAA;AAAA,cAAC,iBAAA;AAAA,cAAA;AAAA,gBACC,cAAA;AAAA,gBACA,WAAA;AAAA,gBACA,OAAO,EAAE,MAAA,EAAQ,YAAY,KAAA,EAAO,SAAA,EAAW,QAAQ,UAAA,EAAW;AAAA,gBAClE,YAAA,EAAc,kBAAA;AAAA,gBACd,cAAA,EAAgB,kBAAA;AAAA,gBAChB,aAAA,EAAe;AAAA;AAAA,aACjB;AAAA,4BACAA,GAAAA;AAAA,cAAC,kBAAA;AAAA,cAAA;AAAA,gBACC,SAAA;AAAA,gBACA,WAAA;AAAA,gBACA,UAAA;AAAA,gBACA,YAAY,MAAM;AAChB,kBAAA,IAAI,aAAa,aAAA,EAAc;AAAA,uBAAA,IACtB,YAAY,YAAA,EAAa;AAAA,uBAC7B,cAAA,EAAe;AAAA,gBACtB;AAAA;AAAA;AACF,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,aAAA;AAAA,QACV,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,oBAAA,EAAsB,QAAA,EAAU,MAAM;AAAA;AAAA;AACxE,GAAA,EACF,CAAA;AAEJ;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AC7sB7B,IAAM,gBAAA,GAAmB;AAAA,EACvB,QAAA,EAAU,OAAO,UAAA,CAAW,QAAA;AAAA,EAC5B,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,KAAK,CAAC;AACxB,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,QAAA,EAAU,KAAK,UAAA,CAAW,QAAA;AAAA,EAC1B,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,EAAG,KAAK,CAAC;AACrB,CAAA;AAEA,IAAM,uBAAA,GAA0B;AAAA,EAC9B,IAAA,EAAM,QAAA;AAAA,EACN,SAAA,EAAW,YAAY,OAAA,CAAQ,SAAA;AAAA,EAC/B,OAAA,EAAS,YAAY,OAAA,CAAQ,OAAA;AAAA,EAC7B,IAAA,EAAM,YAAY,OAAA,CAAQ;AAC5B,CAAA;AAEA,IAAM,OAAA,GAAU;AAAA,EACd,MAAA,EAAQ;AAAA,IACN,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,IACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,IACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,IACnB,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA;AAAI,GAC9B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,IAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,IAC1B,UAAA,EAAY;AAAA,GACd;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,IACnC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,IAChC,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,IAChC,UAAA,EAAY;AAAA;AAEhB,CAAA;AAIA,IAAM,UAAU,EAAE,IAAA,EAAM,MAAM,MAAA,EAAQ,GAAA,EAAK,MAAM,GAAA,EAAI;AAErD,SAAS,UAAU,KAAA,EAA2C;AAC5D,EAAA,uBACEA,GAAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAU,YAAA,EACpB,QAAA,kBAAAA,GAAAA,CAAC,CAAA,CAAE,GAAA,EAAF,EAAO,GAAG,KAAA,EAAO,CAAA,EACpB,CAAA;AAEJ;AAeO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,GAAS,QAAA,EAAU,KAAA,GAAQ,GAAG,QAAA,EAAU,MAAA,GAAS,KAAA,EAAO,SAAA,EAAU,GAAI,KAAA;AACxF,EAAA,MAAM,eAAeE,gBAAAA,EAAiB;AACtC,EAAA,MAAM,EAAE,SAAS,OAAA,EAAAW,QAAAA,EAAS,MAAM,UAAA,EAAW,GAAI,QAAQ,MAAM,CAAA;AAC7D,EAAA,MAAM,CAAA,GAAgB;AAAA,IACpB,GAAG,UAAA;AAAA,IACH,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,IACzB,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,GACjC;AAEA,EAAA,IAAI,cAAc,uBAAOb,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAuB,QAAA,EAAS,CAAA;AAE9D,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,uBACEA,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA,EAAaa,QAAAA;AAAA,QACb,IAAA;AAAA,QACA,QAAA,EAAU,EAAE,IAAA,EAAM,IAAA,EAAM,QAAQ,MAAA,EAAO;AAAA,QACvC,UAAA,EAAY,CAAA;AAAA,QAEX;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,uBACEb,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAsB,OAAA,EAAkB,SAASa,QAAAA,EAAS,IAAA,EAAY,UAAA,EAAY,CAAA,EAC1F,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,GAAU,UAAU,MAAA,GAAS,KAAA,EAAO,WAAU,GAAI,KAAA;AACpE,EAAA,MAAM,eAAeX,gBAAAA,EAAiB;AACtC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,SAAS,EAAC;AAAA,IACV,OAAA,EAAS,EAAE,UAAA,EAAY,EAAE,iBAAiB,OAAA,CAAQ,OAAO,GAAE;AAAE,GAC/D;AAEA,EAAA,IAAI,cAAc,uBAAOF,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAuB,QAAA,EAAS,CAAA;AAE9D,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,uBACEA,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,OAAA,EAAQ,SAAA;AAAA,QACR,WAAA,EAAY,SAAA;AAAA,QACZ,QAAA,EAAU,EAAE,IAAA,EAAM,IAAA,EAAM,QAAQ,MAAA,EAAO;AAAA,QACvC,QAAA;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,uBACEA,IAAC,SAAA,EAAA,EAAU,SAAA,EAAsB,SAAQ,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,QAAA,EAClE,QAAA,EACH,CAAA;AAEJ;ACjJO,SAAS,UAAU,EAAE,IAAA,EAAM,YAAY,EAAA,EAAI,IAAA,GAAO,OAAM,EAAmB;AAChF,EAAA,MAAM,eAAe,YAAA,CAAa;AAAA,IAChC,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,kCAAkC,SAAS,CAAA;AAAA;AAAA,GACxD;AAEJ;ACDA,IAAM,aAAA,GAAwC;AAAA,EAC5C,OAAA,EAAS,qCAAA;AAAA,EACT,GAAA,EAAK,uCAAA;AAAA,EACL,QAAA,EAAU,sCAAA;AAAA,EACV,WAAA,EAAa,uCAAA;AAAA,EACb,QAAA,EAAU,sCAAA;AAAA,EACV,YAAA,EAAc;AAChB,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,GAAA,KAAiB;AACpC,EAAA,IAAI,CAAC,KAAK,OAAO,uCAAA;AACjB,EAAA,OAAO,aAAA,CAAc,GAAA,CAAI,WAAA,EAAa,KAAK,aAAA,CAAc,OAAA;AAC3D,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,OAAA,EAA2B,eAAA,KAAmC;AACpF,EAAA,IAAI,CAAC,eAAA,EAAiB,OAAO,OAAA,CAAQ,MAAA;AACrC,EAAA,MAAM,gBAAgB,OAAA,CAAQ,SAAA,CAAU,CAAC,KAAA,KAAU,KAAA,CAAM,YAAY,eAAe,CAAA;AACpF,EAAA,OAAO,aAAA,KAAkB,EAAA,GAAK,OAAA,CAAQ,MAAA,GAAS,aAAA;AACjD,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,YAAA,GAAe,YAAA;AAAA,EACf;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUc,gBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,gBAAwB,IAAI,CAAA;AAChF,EAAA,MAAM,WAAA,GAAoBA,cAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,OAAA,EAAS,eAAe,CAAA;AAC3D,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACxC,EAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,CAAC,CAAA,EAAG,OAAA,IAAW,IAAA;AAEnD,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,IAAI,aAAA,qBAAkC,aAAa,CAAA;AAAA,EACrD,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyBC,eAAe,MAAM;AAClD,IAAA,gBAAA,EAAiB;AAAA,EACnB,CAAC,CAAA;AAED,EAAMD,iBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,sBAAA,EAAuB;AAAA,IACjD,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC5C,MAAA,IAAI,WAAA,CAAY,WAAW,CAAC,WAAA,CAAY,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AAC1E,QAAA,sBAAA,EAAuB;AAAA,MACzB;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AACjD,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AAEzD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,YAAY,CAAA;AACpD,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,kBAAkB,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACEX,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,UAAA,EAAY,SAAS,CAAA,EAAG,GAAA,EAAK,WAAA,EAC9C,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,gBAAA;AAAA,QACX,eAAA,EAAe,MAAA;AAAA,QACf,SAAS,MAAM,SAAA,CAAU,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,QACxC,SAAA,EAAU,kHAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,UAC/C,WAAA,GAAc,CAAA,oBACbA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qIAAA,EACb,QAAA,EAAA,WAAA,GAAc,CAAA,GAAI,IAAA,GAAO,WAAA,EAC5B;AAAA;AAAA;AAAA,KAEJ;AAAA,IAEC,MAAA,oBACCG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wNAAA,EACb,QAAA,EAAA;AAAA,sBAAAH,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,kBAAAA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,YAAA,EAAU,CAAA,EAC1D,CAAA;AAAA,sBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0BAAA,EACZ,QAAA,EAAA,aAAA,CAAc,WAAW,CAAA,mBACxBA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAsD,QAAA,EAAA,sBAAA,EAErE,CAAA,GAEA,cAAc,GAAA,CAAI,CAAC,0BACjBG,IAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UAEC,MAAM,KAAA,CAAM,GAAA;AAAA,UACZ,SAAA,EAAU,yEAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,SAAI,SAAA,EAAU,8CAAA,EACb,0BAAAG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EAA2C,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACvD,KAAA,CAAM;AAAA,eAAA,EACV,CAAA;AAAA,cACC,KAAA,CAAM,uBACLH,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,yCAAA;AAAA,oBACA,WAAA,CAAY,MAAM,GAAG;AAAA,mBACvB;AAAA,kBAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,aAAA,EAEJ,CAAA,EACF,CAAA;AAAA,4BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA4C,gBAAM,KAAA,EAAM,CAAA;AAAA,4BACrEA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iDAAA,EAAmD,gBAAM,OAAA,EAAQ,CAAA;AAAA,4BAC9EA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,gBAAM,IAAA,EAAK;AAAA;AAAA,SAAA;AAAA,QAvBvD,KAAA,CAAM;AAAA,OAyBd,CAAA,EAEL,CAAA;AAAA,sBAEAG,IAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,YAAA;AAAA,UACN,OAAA,EAAS,gBAAA;AAAA,UACT,SAAA,EAAU,oJAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,4BACtBA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAAA;AACpC,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACzGO,IAAM,oBAAA,GAAuB,YAAA;AAG7B,SAAS,WAAA,CACd,OACA,YAAA,EACgD;AAChD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACpC,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,IAAA,EAAM,oBAAA;AAAA,IACN,UAAU,EAAE,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,EAAE;AAAA,IAC3B,IAAA,EAAM,EAAE,IAAA,EAAM,CAAA;AAAE,GAClB,CAAE,CAAA;AACF,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACpC,EAAA,EAAI,aAAa,CAAC,CAAA;AAAA,IAClB,QAAQ,CAAA,CAAE,IAAA;AAAA,IACV,QAAQ,CAAA,CAAE,EAAA;AAAA,IACV,IAAA,EAAM,EAAE,IAAA,EAAM,CAAA;AAAE,GAClB,CAAE,CAAA;AACF,EAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AACxB;AAOO,SAAS,kBAAA,CACd,OACA,SAAA,EACG;AACH,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,QAAQ,CAAU,CAAC,CAAA;AACzE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM;AACnC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAC5B,IAAA,IAAI,CAAC,GAAA,IAAQ,GAAA,CAAI,CAAA,KAAM,CAAA,CAAE,KAAK,GAAA,CAAI,CAAA,KAAM,CAAA,CAAE,CAAA,EAAI,OAAO,CAAA;AACrD,IAAA,OAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,EAAE;AAAA,EACpC,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAM;AAC3B;AAQO,SAAS,UAAA,CACd,KAAA,EACA,UAAA,EACA,IAAA,EACkB;AAClB,EAAA,IAAI,CAAC,UAAA,CAAW,MAAA,IAAU,CAAC,WAAW,MAAA,EAAQ;AAC5C,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,mDAAA,EAAoD;AAAA,EAClF;AACA,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,UAAA,CAAW,MAAA,EAAQ;AAC3C,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,kCAAA,EAAmC;AAAA,EACjE;AACA,EAAA,MAAM,SAAA,GAAY,KAAK,QAAA,CAAS,UAAA,CAAW,QAAQ,UAAA,CAAW,MAAA,EAAQ,WAAW,YAAY,CAAA;AAC7F,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,qDAAA,EAAsD;AAAA,EACpF;AACA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAC/C,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,KAAK,YAAA,CAAa,CAAC,CAAA,KAAM,WAAW,CAAA,EAAG;AACjE,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,qDAAA,EAAsD;AAAA,EACpF;AACA,EAAA,IAAI,iBAAiB,KAAA,CAAM,KAAA,EAAO,UAAU,IAAA,EAAM,SAAA,CAAU,EAAE,CAAA,EAAG;AAC/D,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,CAAC,GAAG,KAAA,CAAM,KAAA,EAAO,SAAS,GAAE,EAAE;AAC7E;AAGO,SAAS,UAAA,CACd,OACA,MAAA,EACG;AACH,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,KAAA,EAAO,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAM,CAAA;AAAA,IAChD,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,EAAA,KAAO,MAAM;AAAA,GACvE;AACF;AAGO,SAAS,cAAA,CACd,KAAA,EACA,UAAA,EACA,YAAA,EACG;AACH,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,KAAA,EAAO,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAA,KAAM,UAAU;AAAA,GACjE;AACF;AChEA,IAAM,kBAAA,GAAoC;AAAA,EACxC,CAAC,+BAAyC,GAAG,kBAAA;AAAA,EAC7C,CAAC,kBAA4B,GAAG,kBAAA;AAAA,EAChC,CAAC,4BAAsC,GAAG,kBAAA;AAAA,EAC1C,CAAC,8BAAwC,GAAG,kBAAA;AAAA,EAC5C,CAAC,0BAAoC,GAAG,kBAAA;AAAA,EACxC,CAAC,uCAAiD,GAAG,kBAAA;AAAA,EACrD,CAAC,mCAA6C,GAAG,kBAAA;AAAA,EACjD,CAAC,4BAAsC,GAAG;AAC5C,CAAA;AAEA,IAAM,gBAAA,GAAmBgB,GAAAA;AAAA,EACvB,oHAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,EAAE,KAAA,EAAO,EAAE,MAAM,gBAAA,EAAkB,KAAA,EAAO,oBAAmB,EAAE;AAAA,IACzE,eAAA,EAAiB,EAAE,KAAA,EAAO,KAAA;AAAM;AAEpC,CAAA;AAUA,SAAS,aAAA,CAAc,EAAE,IAAA,EAAK,EAAqC;AACjE,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAElB,EAAA,uBACEb,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,KAAA,EAAO,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAH,IAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,SAAS,IAAA,EAAM,CAAA;AAAA,oBAC/CG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uFAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KAAA,EACR,CAAA;AAAA,IACC,IAAA,CAAK,2BAAWH,GAAAA,CAAC,SAAI,SAAA,EAAU,gCAAA,EAAkC,QAAA,EAAA,IAAA,CAAK,QAAA,EAAS,CAAA,GAAS,IAAA;AAAA,oBACzFA,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,QAAA,EAAS,QAAA,EAAU,SAAS,KAAA,EAAO;AAAA,GAAA,EAClD,CAAA;AAEJ;AAEA,IAAM,UAAA,GAAa;AAAA,EACjB,CAAC,oBAAoB,GAAG;AAC1B,CAAA;AAEA,IAAM,sBAAA,GAAyB,EAAE,eAAA,EAAiB,IAAA,EAAK;AAEhD,SAAS,eAAA,CAAiF;AAAA,EAC/F,KAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAkC;AAChC,EAAA,MAAM,WAAWiB,KAAAA,EAAM;AACvB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,SAAwB,IAAI,CAAA;AAE9D,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,OAAM,GAAI,WAAA,CAAY,OAAO,YAAY,CAAA;AACpE,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IACtC,GAAG,IAAA;AAAA,IACH,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA,CAAK,IAAA;AAAA,MACR,IAAA,EAAM,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,IAAI;AAAA;AACjC,GACF,CAAE,CAAA;AAEF,EAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,KAA0B;AAC/C,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,UAAU,OAAA,CAAQ,MAAA;AAAA,MACtB,CAAC,CAAA,KAAwD,CAAA,CAAE,IAAA,KAAS;AAAA,KACtE;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,IAAI,IAAA,GAAO,KAAA;AACX,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS,IAAA,GAAO,UAAA,CAAW,IAAA,EAAM,EAAE,EAAE,CAAA;AACrD,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,QAAA,KAAa,KAAK,CAAA;AACpF,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM;AAC7B,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,EAAA,KAAO,CAAA,CAAE,EAAE,CAAA;AACzE,QAAA,IAAI,MAAA,IAAU,MAAA,CAAO,IAAA,KAAS,UAAA,IAAc,OAAO,QAAA,EAAU;AAC3D,UAAA,OAAO,EAAE,GAAG,CAAA,EAAG,QAAA,EAAU,OAAO,QAAA,EAAS;AAAA,QAC3C;AACA,QAAA,OAAO,CAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,kBAAA,CAAmB,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,IAC3C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,KAA0B;AAC/C,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,UAAU,OAAA,CAAQ,MAAA;AAAA,MACtB,CAAC,CAAA,KAAwD,CAAA,CAAE,IAAA,KAAS;AAAA,KACtE;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,IAAI,IAAA,GAAO,KAAA;AACX,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS,IAAA,GAAO,eAAe,IAAA,EAAM,CAAA,CAAE,IAAI,YAAY,CAAA;AACvE,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,UAAA,KAA2B;AAC5C,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,SAAS,UAAA,CAAW,KAAA,EAAO,YAAY,EAAE,QAAA,EAAU,cAAc,CAAA;AACvE,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,OAAO,MAAM,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA;AAEA,EAAA,uBACElB,GAAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAO,UAChB,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,kBAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACT,2GAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,GAAAA,CAAC,iBAAA,EAAA,EACC,QAAA,kBAAAG,IAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA,EAAW,UAAA;AAAA,UACX,aAAA;AAAA,UACA,aAAA;AAAA,UACA,SAAA;AAAA,UACA,gBAAgB,CAAC,QAAA;AAAA,UACjB,kBAAkB,CAAC,QAAA;AAAA,UACnB,oBAAoB,CAAC,QAAA;AAAA,UACrB,OAAA,EAAO,IAAA;AAAA,UACP,UAAA,EAAY,sBAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,kBAAA,EAAmB,CAAA;AAAA,4BACrCA,GAAAA,CAAC,QAAA,EAAA,EAAS,eAAA,EAAiB,CAAC,QAAA,EAAU,CAAA;AAAA,YACrC,4BACCA,GAAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAS,cACd,QAAA,kBAAAG,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,QAAA;AAAA,gBACJ,IAAA,EAAK,OAAA;AAAA,gBACL,WAAA,EAAU,WAAA;AAAA,gBACV,SAAA,EAAU,mIAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAH,GAAAA,CAAC,UAAM,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,kCACjBA,GAAAA;AAAA,oBAACmB,QAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,OAAA;AAAA,sBACL,IAAA,EAAK,MAAA;AAAA,sBACL,IAAA,kBAAMnB,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAM,EAAA,EAAI,CAAA;AAAA,sBAC5B,YAAA,EAAW,0BAAA;AAAA,sBACX,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,sBACjC,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,eAEJ,CAAA,GACE;AAAA;AAAA;AAAA,OACN,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AC7MA,IAAM,iBAAA,GAAoC;AAAA,EACxC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,EAC5B,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,UAAA,EAAY;AAAA,MACV,QAAA,EAAU,GAAA;AAAA,MACV,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,gBAAA;AAAA,MACN,eAAA,EAAiB;AAAA;AACnB;AAEJ,CAAA;AAEA,IAAM,YAAA,GAA+B;AAAA,EACnC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC7B,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,UAAA,EAAY;AAAA,MACV,QAAA,EAAU,GAAA;AAAA,MACV,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,IAAM,wBAAA,GAA2C;AAAA,EAC/C,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA;AAAE;AAE9B,CAAA;AAEA,IAAM,mBAAA,GAAsC;AAAA,EAC1C,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA;AAAE;AAE9B,CAAA;AAiCO,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,MAAM,qBAAqBE,gBAAAA,EAAiB;AAC5C,EAAA,MAAM,uBAAA,GAA0B,qBAAqB,wBAAA,GAA2B,iBAAA;AAChF,EAAA,MAAM,kBAAA,GAAqB,qBAAqB,mBAAA,GAAsB,YAAA;AAEtE,EAAA,uBACEF,GAAAA;AAAA,IAACoB,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wHAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAjB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EAEb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACzDA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA8B,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,0BACvDA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sDAAA,EACX,gBAAM,GAAA,CAAI,CAAC,IAAA,qBACVG,KAACiB,MAAAA,CAAO,EAAA,EAAP,EAAwB,QAAA,EAAU,kBAAA,EAAoB,WAAU,eAAA,EAC/D,QAAA,EAAA;AAAA,4BAAAjB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,8BAAAH,GAAAA,CAACqB,WAAA,EAAA,EAAa,SAAA,EAAU,6CAAA,EAA8C,CAAA;AAAA,8BACtErB,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,eAAK,IAAA,EAAK;AAAA,aAAA,EACxD,CAAA;AAAA,YACC,IAAA,CAAK,cAAc,IAAA,CAAK,UAAA,oBACvBG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACZ,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,UAAA;AAAA,cAAY,GAAA;AAAA,8BAClBH,GAAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,KAAK,UAAA,CAAW,IAAA;AAAA,kBACtB,SAAA,EAAU,gLAAA;AAAA,kBAET,eAAK,UAAA,CAAW;AAAA;AAAA;AACnB,aAAA,EACF;AAAA,WAAA,EAAA,EAdY,IAAA,CAAK,EAgBrB,CACD,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAA,GAAAA;AAAA,UAACoB,MAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,QAAA,EAAU,kBAAA;AAAA,YACV,SAAA,EAAU,8FAAA;AAAA,YAEV,QAAA,kBAAAjB,KAAC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,GAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAO,IAAA,EACpB,QAAA,kBAAAG,IAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,8IAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAH,GAAAA;AAAA,sBAACsB,KAAAA;AAAA,sBAAA;AAAA,wBACC,GAAA,EAAK,iBAAA;AAAA,wBACL,GAAA,EAAI,uBAAA;AAAA,wBACJ,SAAA,EAAU,sJAAA;AAAA,wBACV,IAAA,EAAI;AAAA;AAAA,qBACN;AAAA,oCACAtB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACb,0BAAAA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,6OAAA,EAA8O,CAAA,EACtQ;AAAA;AAAA;AAAA,eACF,EACF,CAAA;AAAA,8BACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,wBAAA,EACvB,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,GAAA,EAAK,QAAA;AAAA,kBACL,KAAA,EAAM,wBAAA;AAAA,kBACN,WAAA,EAAY,GAAA;AAAA,kBACZ,KAAA,EAAM,0FAAA;AAAA,kBACN,eAAA,EAAe,IAAA;AAAA,kBACf,SAAA,EAAU;AAAA;AAAA,iBAEd,CAAA,EACF;AAAA,aAAA,EACF;AAAA;AAAA;AACF,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;;;AClMO,IAAM,WAAA,GAAc;AAAA,EACzB,KAAA,EAAO;AAAA,IACL,EAAA,EAAI;AAAA,MACF,QAAQ,eAAA,CAAgB,EAAA;AAAA,MACxB,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,MAC5B,QAAQ,eAAA,CAAgB,EAAA;AAAA,MACxB,UAAA,EAAY,iBAAiB,CAAC,CAAA;AAAA,MAC9B,YAAY,eAAA,CAAgB,EAAA;AAAA,MAC5B,cAAc,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAAA;AAAA,MAC1D,aAAa,eAAA,CAAgB,EAAA;AAAA,MAC7B,eAAA,EAAiB,eAAA,CAAgB,EAAA,GAAK,gBAAA,CAAiB,CAAC,CAAA;AAAA,MACxD,UAAU,iBAAA,CAAkB;AAAA,KAC9B;AAAA,IACA,EAAA,EAAI;AAAA,MACF,QAAQ,eAAA,CAAgB,EAAA;AAAA,MACxB,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,MAC5B,QAAQ,eAAA,CAAgB,EAAA;AAAA,MACxB,UAAA,EAAY,iBAAiB,CAAC,CAAA;AAAA,MAC9B,UAAA,EAAY,eAAA,CAAgB,EAAA,GAAK,gBAAA,CAAiB,CAAC,CAAA;AAAA,MACnD,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAAA,MAChC,aAAa,eAAA,CAAgB,IAAA;AAAA,MAC7B,eAAA,EAAiB,eAAA,CAAgB,IAAA,GAAO,gBAAA,CAAiB,CAAC,CAAA;AAAA,MAC1D,UAAU,iBAAA,CAAkB;AAAA,KAC9B;AAAA,IACA,EAAA,EAAI;AAAA,MACF,QAAQ,eAAA,CAAgB,EAAA;AAAA,MACxB,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,UAAU,iBAAA,CAAkB,IAAA;AAAA,MAC5B,QAAQ,eAAA,CAAgB,EAAA;AAAA,MACxB,UAAA,EAAY,iBAAiB,CAAC,CAAA;AAAA,MAC9B,YAAY,eAAA,CAAgB,EAAA;AAAA,MAC5B,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAAA,MAChC,aAAa,eAAA,CAAgB,IAAA;AAAA,MAC7B,eAAA,EAAiB,eAAA,CAAgB,IAAA,GAAO,gBAAA,CAAiB,CAAC,CAAA;AAAA,MAC1D,UAAU,iBAAA,CAAkB;AAAA;AAC9B,GACF;AAAA,EACA,cAAA,EAAgB,CAAA;AAAA,EAChB,UAAU,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAExD,CAAA;AClCA,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,OAAauB,MAAA,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,uBACEvB,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;ACxGlB,IAAM,aAAA,GAAgBgB,GAAAA;AAAA,EACpB;AAAA,IACE,qGAAA;AAAA,IACA,4FAAA;AAAA,IACA,qFAAA;AAAA,IACA,mCAAA;AAAA,IACA,0BAAA,CAA2B,KAAA;AAAA,IAC3B,iDAAA;AAAA,IACA,gDAAA;AAAA,IACA,iGAAA;AAAA,IACA,mJAAA;AAAA,IACA,4BAAA,CAA6B,KAAA;AAAA,IAC7B,gEAAA;AAAA,IACA,6DAAA;AAAA,IACA,iEAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EACV;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,EAAA;AAAA,QACJ,EAAA,EAAI,EAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,EAAA;AAAA,QACN,MAAA,EAAQ,gCAAA;AAAA,QACR,MAAA,EAAQ,iCAAA;AAAA,QACR,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT;AAEJ,CAAA;AAEA,IAAM,aAAA,GAAgBA,GAAAA;AAAA,EACpB;AAAA,IACE,+FAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EACV;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,iCAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV;AACF;AAEJ,CAAA;AAEA,IAAM,0BAAA,GAA6BA,GAAAA;AAAA,EACjC;AAAA,IACE,wIAAA;AAAA,IACA,4FAAA;AAAA,IACA,uCAAA;AAAA,IACA,qGAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG;AACZ,CAAA;AAEA,IAAM,oBAAA,GAAuBA,IAAI,SAAA,EAAW;AAAA,EAC1C,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,WAAA,EAAa,uBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACT;AAEJ,CAAC,CAAA;AAuDD,SAAS,SAAA,CAAa,KAA+B,KAAA,EAAiB;AACpE,EAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,IAAA,GAAA,CAAI,KAAK,CAAA;AACT,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,GAAA,CAAI,OAAA,GAAU,KAAA;AAAA,EAChB;AACF;AAEA,SAAS,aAAA,CAAc,MAAiB,KAAA,EAAsD;AAC5F,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA;AAEpC,EAAA,OAAO;AAAA,IACL,gBAAA,EAAkB,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,EAAA,CAAA;AAAA,IACjC,mBAAA,EAAqB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACtC,sBAAA,EAAwB,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,EAAA,CAAA;AAAA,IAC3C,uBAAA,EAAyB,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,EAAA,CAAA;AAAA,IAC5C,mBAAA,EAAqB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACtC,gBAAA,EAAkB,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,EAAA,CAAA;AAAA,IACjC,qBAAA,EAAuB,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,EAAA,CAAA;AAAA,IAC1C,uBAAA,EAAyB,CAAA,EAAG,KAAA,CAAM,YAAY,CAAA,EAAA,CAAA;AAAA,IAC9C,sBAAA,EAAwB,CAAA,EAAG,KAAA,CAAM,WAAW,CAAA,EAAA,CAAA;AAAA,IAC5C,2BAAA,EAA6B,CAAA,EAAG,KAAA,CAAM,eAAe,CAAA,EAAA,CAAA;AAAA,IACrD,mBAAA,EAAqB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACtC,0BAAA,EAA4B,CAAA,EAAG,WAAA,CAAY,cAAc,CAAA,EAAA,CAAA;AAAA,IACzD,YAAA,EAAc,qBAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,GAAG;AAAA,GACL;AACF;AAEA,SAAS,YAAA,CAAa,QAAyB,iBAAA,EAA4B;AACzE,EAAA,IAAI,MAAA,IAAU,IAAA,IAAQ,iBAAA,EAAmB,OAAO,MAAA;AAChD,EAAA,IAAI,MAAA,IAAU,MAAM,OAAO,QAAA;AAC3B,EAAA,IAAI,mBAAmB,OAAO,QAAA;AAC9B,EAAA,OAAO,MAAA;AACT;AAEA,SAASQ,UAAAA,CACP,OACA,WAAA,EACA;AACA,EAAA,OACE,UAAU,IAAA,IAAQ,OAAO,UAAU,QAAA,IAAY,WAAA,KAAgB,QAAQ,WAAA,KAAgB,MAAA;AAE3F;AAEA,SAAS,YAAY,KAAA,EAAyC;AAC5D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAC5D;AAEA,SAASC,uBAAsB,GAAA,EAAgC;AAC7D,EAAA,OAAO,IAAI,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAC1C;AAEA,IAAM,QAAQ,CAAC;AAAA,EACb,GAAA,EAAK,YAAA;AAAA,EACL,GAAG;AACL,CAAA,KAAsE;AACpE,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,IAAA,GAAO,MAAA;AAAA,IACP,IAAA,GAAO,IAAA;AAAA,IACP,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA,GAAc,eAAA;AAAA,IACd,SAAA,GAAY,eAAA;AAAA,IACZ,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,kBAAA,EAAoB,eAAA;AAAA,IACpB,cAAA,EAAgB,WAAA;AAAA,IAChB,EAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,SAAeC,MAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,QAAA,GAAiBA,cAAgC,IAAI,CAAA;AAC3D,EAAA,MAAM,aAAA,GAAgB,WAAA,IAAe,EAAA,GAAK,CAAA,EAAG,EAAE,CAAA,YAAA,CAAA,GAAiB,MAAA;AAChE,EAAA,MAAM,UAAU,OAAO,KAAA,KAAU,YAAY,EAAA,GAAK,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,GAAW,MAAA;AAClE,EAAA,MAAM,sBAAsB,WAAA,CAAY,MAAM,IAAI,CAAA,EAAG,EAAA,IAAM,MAAM,CAAA,OAAA,CAAA,GAAY,MAAA;AAC7E,EAAA,MAAM,sBAAsB,WAAA,CAAY,MAAM,IAAI,CAAA,EAAG,EAAA,IAAM,MAAM,CAAA,OAAA,CAAA,GAAY,MAAA;AAC7E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,MAAA,CAAA,QAAA;AAAA,IAC9C,OAAO,iBAAiB,QAAA,IAAY,OAAO,iBAAiB,QAAA,GACxD,MAAA,CAAO,YAAY,CAAA,GACnB;AAAA,GACN;AACA,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,gBAAS,KAAK,CAAA;AAElE,EAAA,MAAM,YAAA,GAAe,YAAA,GAAe,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,GAAI,aAAA;AAC1D,EAAA,MAAM,oBAAA,GAAuB,iBAAiB,IAAA,KAAS,QAAA;AACvD,EAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,UAAA,IAAc,IAAA,KAAS,UAAU,CAAA;AACnE,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,CAAC,YAAY,YAAA,CAAa,MAAA,GAAS,CAAA,IAAK,CAAC,OAAO,CAAA;AACvF,EAAA,MAAM,eAAe,OAAA,CAAQ,QAAA,IAAY,CAAC,OAAA,IAAW,CAAC,SAAS,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAc,QAAQ,OAAO,CAAA;AACnC,EAAA,MAAM,kBAAA,GAAqB,QAAQ,iBAAA,IAAqB,CAAC,WAAW,CAAC,SAAA,IAAa,CAAC,YAAY,CAAA;AAC/F,EAAA,MAAM,iBAAA,GACJ,SAAA,IAAa,YAAA,IAAgB,WAAA,IAAe,sBAAsB,MAAA,IAAU,IAAA;AAC9E,EAAA,MAAM,iBAAA,GAAoB,UAAU,IAAA,IAAQ,iBAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,EAAQ,iBAAiB,CAAA;AACpD,EAAA,MAAM,eAAA,GAAkBF,UAAAA,CAAU,KAAA,EAAO,WAAW,CAAA;AACpD,EAAA,MAAM,WAAA,GAAcC,mBAAAA;AAAA,IAClB,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAGF,YAAA,GACA,EAAE,KAAA,EAAM,GACR,SAAA,IAAa,QAAA,IAAY,oBAAA,GACvB,EAAE,KAAA,EAAO,YAAA,EAAa,GACtB,EAAE,YAAA,EAAa;AAErB,EAAA,MAAM,WAAA,GAAoBC,MAAA,CAAA,WAAA;AAAA,IACxB,CAAC,IAAA,KAA6B;AAC5B,MAAA,MAAM,KAAA,GAAQ,IAAA,YAAgB,gBAAA,GAAmB,IAAA,GAAO,IAAA;AACxD,MAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,MAAA,SAAA,CAAU,cAAc,KAAK,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,eAAA,GAAwBA,MAAA,CAAA,WAAA;AAAA,IAC5B,CAAC,SAAA,KAAsB;AACrB,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AAEvB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,IAAI,CAAC,YAAA,EAAc,gBAAA,CAAiB,SAAS,CAAA;AAC7C,QAAA,aAAA,GAAgB,SAAS,CAAA;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,cAAc,MAAA,CAAO,wBAAA;AAAA,QACzB,OAAO,gBAAA,CAAiB,SAAA;AAAA,QACxB;AAAA,OACF,EAAG,GAAA;AAEH,MAAA,WAAA,EAAa,IAAA,CAAK,OAAO,SAAS,CAAA;AAClC,MAAA,KAAA,CAAM,aAAA,CAAc,IAAI,KAAA,CAAM,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,CAAC,cAAc,aAAa;AAAA,GAC9B;AAEA,EAAA,MAAM,cAAA,GAAuBA,MAAA,CAAA,WAAA;AAAA,IAC3B,CAAC,KAAA,KAA+C;AAC9C,MAAA,IAAI,CAAC,YAAA,EAAc,gBAAA,CAAiB,KAAA,CAAM,cAAc,KAAK,CAAA;AAC7D,MAAA,aAAA,GAAgB,KAAA,CAAM,cAAc,KAAK,CAAA;AACzC,MAAA,QAAA,GAAW,KAAK,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,QAAA,EAAU,aAAa;AAAA,GACxC;AAEA,EAAA,MAAM,WAAA,GAAoBA,mBAAY,MAAM;AAC1C,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,OAAA,IAAU;AACV,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA,EAAG,CAAC,eAAA,EAAiB,OAAO,CAAC,CAAA;AAE7B,EAAA,MAAM,aAAA,GAAsBA,MAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,KAAA,KAAiD;AAChD,MAAA,SAAA,GAAY,KAAK,CAAA;AAEjB,MAAA,IACE,KAAA,CAAM,gBAAA,IACN,KAAA,CAAM,GAAA,KAAQ,QAAA,IACd,CAAC,oBAAA,IACD,YAAA,CAAa,MAAA,KAAW,CAAA,IACxB,QAAA,EACA;AACA,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAAA,IACA,CAAC,oBAAA,EAAsB,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,aAAa,SAAS;AAAA,GAC9E;AAEA,EAAA,MAAM,0BACJ1B,GAAAA;AAAA,IAAC2B,OAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,WAAA;AAAA,MACL,WAAA,EAAU,OAAA;AAAA,MACV,IAAA,EAAM,iBAAA,IAAqB,eAAA,GAAkB,MAAA,GAAS,IAAA;AAAA,MACtD,EAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAc,eAAA,IAAmB,MAAA;AAAA,MACjC,kBAAA,EAAkB,WAAA;AAAA,MAClB,aAAW,OAAA,IAAW,MAAA;AAAA,MACtB,SAAA,EAAW,EAAA;AAAA,QACT,aAAA,CAAc,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,QAC7B,SAAS,MAAA,IAAU,uDAAA;AAAA,QACnB;AAAA,OACF;AAAA,MACA,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA;AAAA,MAChC,QAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,aAAA;AAAA,MACV,GAAG,IAAA;AAAA,MACH,GAAG;AAAA;AAAA,GACN;AAGF,EAAA,MAAM,YAAA,GAAe,oCACnBxB,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,gBAAgB,CAAA;AAAA,MAC5D,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,MAAS,CAAA;AAAA,MAEnC,QAAA,EAAA;AAAA,QAAA,MAAA,IAAU,wBACTH,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,mBAAA;AAAA,YACJ,aAAA,EAAa,CAAC,WAAA,CAAY,MAAM,CAAA;AAAA,YAChC,SAAA,EAAW,aAAA,CAAc,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,YAE1C,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAGD,OAAA;AAAA,QAEA,+BACCA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU,kLAAA;AAAA,YACV,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,MAAS,CAAA;AAAA,YAEpC,QAAA,kBAAAA,GAAAA,CAAC4B,YAAA,EAAA,EAAQ,SAAA,EAAU,oDAAA,EAAqD;AAAA;AAAA,SAC1E;AAAA,QAGD,6BACC5B,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,aAAA;AAAA,YACX,QAAA;AAAA,YACA,WAAW,0BAAA,EAA2B;AAAA,YACtC,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,MAAS,CAAA;AAAA,YACpC,OAAA,EAAS,WAAA;AAAA,YAET,QAAA,kBAAAA,GAAAA,CAACC,KAAAA,EAAA,EAAE,eAAY,MAAA,EAAO;AAAA;AAAA,SACxB;AAAA,QAGD,gCACCD,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU,4GAAA;AAAA,YACV,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,MAAS,CAAA;AAAA,YAEpC,QAAA,kBAAAA,IAAC,GAAA,EAAA,EAAI,KAAA,EAAK,MAAE,QAAA,EAAA,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,QAAA,EAAS;AAAA;AAAA,SACzD;AAAA,QAGD,sCACCA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAY,kBAAkB,SAAA,GAAY,WAAA;AAAA,YAC1C,cAAA,EAAc,eAAA;AAAA,YACd,QAAA;AAAA,YACA,WAAW,0BAAA,EAA2B;AAAA,YACtC,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,MAAS,CAAA;AAAA,YACpC,SAAS,MAAM;AACb,cAAA,kBAAA,CAAmB,CAAC,OAAA,KAAY,CAAC,OAAO,CAAA;AACxC,cAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,YAC1B,CAAA;AAAA,YAEC,QAAA,EAAA,eAAA,mBAAkBA,GAAAA,CAAC,MAAA,EAAA,EAAO,aAAA,EAAY,MAAA,EAAO,CAAA,mBAAKA,GAAAA,CAAC,GAAA,EAAA,EAAI,aAAA,EAAY,MAAA,EAAO;AAAA;AAAA,SAC7E;AAAA,QAGD,MAAA,IAAU,IAAA,IAAQ,CAAC,SAAA,IAAa,CAAC,gBAAgB,CAAC,WAAA,IAAe,CAAC,kBAAA,oBACjEA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,mBAAA;AAAA,YACJ,aAAA,EAAa,CAAC,WAAA,CAAY,MAAM,CAAA;AAAA,YAChC,SAAA,EAAW,aAAA,CAAc,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,YAE1C,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ,GAEA,OAAA;AAGF,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,WAAA,IAAe,OAAO,UAAU,QAAA,EAAU;AACvD,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,cAAc,CAAA;AAAA,MACjE,KAAA,EACE;AAAA,QACE,mBAAA,EAAqB,CAAA,EAAG,WAAA,CAAY,QAAQ,CAAA,EAAA;AAAA,OAC9C;AAAA,MAGD,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCH,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAS,EAAA,EAAI,SAAA,EAAU,uCAC3B,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QAGD,YAAA;AAAA,QAEA,WAAA,IAAe,CAAC,KAAA,oBACfA,IAAC,GAAA,EAAA,EAAE,EAAA,EAAI,aAAA,EAAe,SAAA,EAAW,qBAAqB,EAAE,IAAA,EAAM,aAAA,EAAe,GAC1E,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,QAGD,OAAO,KAAA,KAAU,QAAA,oBAChBA,GAAAA,CAAC,OAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,OAAA,EAAQ,WAAW,oBAAA,CAAqB,EAAE,MAAM,OAAA,EAAS,GAC3E,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;AC3ZpB,SAAS,OAAO,EAAE,GAAA,EAAK,KAAK,QAAA,EAAU,IAAA,GAAO,MAAK,EAAgB;AAChE,EAAA,MAAM,WAAA,GAAc,IAAA,KAAS,IAAA,GAAO,WAAA,GAAc,WAAA;AAElD,EAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,GAAAA;AAAA,MAACsB,KAAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,GAAA;AAAA,QACP,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,IACC,QAAA,KAAa,0BACZtB,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,kFAAA;AAAA,UACA,WAAW,cAAA,GAAiB;AAAA;AAC9B;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AA+BO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,OAAA,GAAU,0CAAA;AAAA,EACV,QAAA;AAAA,EACA,gBAAA,GAAmB,uBAAA;AAAA,EACnB,aAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIkB,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,EAAE,CAAA;AAG/C,EAAA,MAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,IAC1B,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAACW,EAAAA,KAAM,CAACA,EAAAA,CAAE,MAAA,CAAO,MAAMA,EAAAA,CAAE,MAAM,CAAC,CAAC,EAAE,MAAA;AAAO,GACjE;AAGA,EAAA,MAAM,gBAAA,GAAmB,cAAA,GACrB,QAAA,CAAS,MAAA,CAAO,CAACA,OAAMA,EAAAA,CAAE,MAAA,CAAO,IAAA,KAAS,cAAc,CAAA,GACvD,QAAA;AAEJ,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,UAAA,CAAW,IAAA,EAAK,IAAK,aAAA,EAAe;AACtC,MAAA,aAAA,CAAc,UAAA,CAAW,MAAM,CAAA;AAC/B,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACpC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,EAAW;AAAA,IACb;AAAA,EACF,CAAA;AAEA,EAAA,uBACE1B,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wIAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,oEAAA,EAChB,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,4BACtCG,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,cAC3D,2BAAWA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wCAAwC,QAAA,EAAA,OAAA,EAAQ;AAAA,aAAA,EAC3E;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,cAAA;AAAA,cACX,OAAA,EAAS,aAAA;AAAA,cACT,SAAA,EAAU,0DAAA;AAAA,cAEV,QAAA,kBAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,+BAAA,EAAgC;AAAA;AAAA;AAC5D,SAAA,EACF,CAAA;AAAA,wBAGAG,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6EAAA,EAEd,QAAA,EAAA;AAAA,0BAAAH,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,4DACd,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,MAAA,KAAW;AAC7B,YAAA,MAAM,UAAA,GAAa,mBAAmB,MAAA,CAAO,IAAA;AAC7C,YAAA,uBACEG,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBAEL,SAAS,MAAM,iBAAA,CAAkB,UAAA,GAAa,IAAA,GAAO,OAAO,IAAI,CAAA;AAAA,gBAChE,SAAA,EAAW,EAAA;AAAA,kBACT,sFAAA;AAAA,kBACA,aACI,qCAAA,GACA;AAAA,iBACN;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAH,GAAAA,CAAC,MAAA,EAAA,EAAO,GAAA,EAAK,MAAA,CAAO,MAAA,EAAQ,KAAK,MAAA,CAAO,IAAA,EAAM,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,CAAA;AAAA,kCACzEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAA,EAAkC,iBAAO,IAAA,EAAK;AAAA;AAAA,eAAA;AAAA,cAVzD,MAAA,CAAO;AAAA,aAWd;AAAA,UAEJ,CAAC,CAAA,EACH,CAAA;AAAA,0BAGAA,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,qDAChB,QAAA,EAAA,gBAAA,CAAiB,MAAA,KAAW,CAAA,mBAC3BA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC,QAAA,EAAA,yBAAA,EAAuB,CAAA,GAExE,gBAAA,CAAiB,GAAA,CAAI,CAAC,4BACpBG,IAAAA,CAAC,KAAA,EAAA,EAAqB,SAAA,EAAU,kDAAA,EAC9B,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,8BAAAH,GAAAA,CAAC,UAAO,GAAA,EAAK,OAAA,CAAQ,OAAO,MAAA,EAAQ,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,8BAC9DG,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAH,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAA,OAAA,CAAQ,OAAO,IAAA,EAAK,CAAA;AAAA,gCAC7DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,kBAAQ,SAAA,EAAU;AAAA,eAAA,EACrE;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAAgC,kBAAQ,OAAA,EAAQ,CAAA;AAAA,4BAC7DG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,WAAW,MAAA,oBAAUH,GAAAA,CAAC8B,WAAA,EAAA,EAAW,WAAU,wBAAA,EAAyB,CAAA;AAAA,gBAC5E,QAAQ,MAAA,KAAW,WAAA,oBAAe9B,GAAAA,CAAC,KAAA,EAAA,EAAM,WAAU,SAAA,EAAU,CAAA;AAAA,gCAC9DA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,SAAA,EAAU;AAAA,eAAA,EAC3B,CAAA;AAAA,8BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,kBAAQ,SAAA,EAAW,GAAA,CAAI,CAAC,QAAA,qBACvBG,IAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBAEL,SAAS,MAAM,eAAA,GAAkB,OAAA,CAAQ,EAAA,EAAI,SAAS,KAAK,CAAA;AAAA,kBAC3D,SAAA,EAAW,EAAA;AAAA,oBACT,gEAAA;AAAA,oBACA,QAAA,CAAS,UACL,kCAAA,GACA,gCAAA;AAAA,oBACJ;AAAA,mBACF;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,QAAA,CAAS,KAAA;AAAA,oBAAM,GAAA;AAAA,oBAAE,QAAA,CAAS;AAAA;AAAA,iBAAA;AAAA,gBAVtB,QAAA,CAAS;AAAA,eAYjB,CAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EAAA,EAjCQ,OAAA,CAAQ,EAkClB,CACD,CAAA,EAEL;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAA,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,0DAAA,EAChB,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,WAAA;AAAA,cACX,SAAA,EAAU,qDAAA;AAAA,cAEV,QAAA,kBAAAA,GAAAA,CAAC+B,QAAA,EAAA,EAAU,SAAA,EAAU,+BAAA,EAAgC;AAAA;AAAA,WACvD;AAAA,0BACA/B,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,UAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAA2C,aAAA,CAAc,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAClF,SAAA,EAAW,aAAA;AAAA,cACX,WAAA,EAAa;AAAA;AAAA,WACf;AAAA,0BACAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,cAAA;AAAA,cACX,OAAA,EAAS,UAAA;AAAA,cACT,SAAA,EAAU,qFAAA;AAAA,cAEV,QAAA,kBAAAA,GAAAA,CAACgC,aAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC5B,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ","file":"index.js","sourcesContent":["import type { Transition } from \"framer-motion\";\n\nexport const animationDurations = {\n instant: 0,\n micro: 0.1,\n fast: 0.16,\n standard: 0.2,\n reveal: 0.3,\n page: 0.44,\n} as const;\n\nexport const animationEasings = {\n linear: \"linear\",\n enter: [0, 0, 0.2, 1] as [number, number, number, number],\n exit: [0.4, 0, 1, 1] as [number, number, number, number],\n standard: [0.4, 0, 0.2, 1] as [number, number, number, number],\n emphasized: [0.16, 1, 0.3, 1] as [number, number, number, number],\n} as const;\n\nexport const animationSprings = {\n interactive: { type: \"spring\", stiffness: 380, damping: 34, mass: 0.8 },\n layout: { type: \"spring\", stiffness: 480, damping: 42, mass: 1 },\n panel: { type: \"spring\", stiffness: 320, damping: 36, mass: 1 },\n} as const satisfies Record<string, Transition>;\n\nexport const animationDistances = {\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n panel: 32,\n} as const;\n\nexport const animationTransitions = {\n instant: { duration: animationDurations.instant },\n micro: { duration: animationDurations.micro, ease: animationEasings.enter },\n standard: { duration: animationDurations.standard, ease: animationEasings.enter },\n reveal: { duration: animationDurations.reveal, ease: animationEasings.emphasized },\n page: { duration: animationDurations.page, ease: animationEasings.emphasized },\n layout: animationSprings.layout,\n panel: animationSprings.panel,\n} as const satisfies Record<string, Transition>;\n\nexport type AnimationDuration = keyof typeof animationDurations;\nexport type AnimationTransition = keyof typeof animationTransitions;\n","import type { Variants } from \"framer-motion\";\nimport { animationDistances, animationTransitions } from \"./tokens\";\n\nexport const fadeIn: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1, transition: animationTransitions.standard },\n exit: { opacity: 0, transition: animationTransitions.micro },\n};\n\nexport const scaleIn: Variants = {\n initial: { opacity: 0, scale: 0.96 },\n animate: { opacity: 1, scale: 1, transition: animationTransitions.reveal },\n exit: { opacity: 0, scale: 0.98, transition: animationTransitions.micro },\n};\n\nexport const slideIn = {\n up: {\n initial: { opacity: 0, y: animationDistances.md },\n animate: { opacity: 1, y: 0, transition: animationTransitions.reveal },\n exit: { opacity: 0, y: animationDistances.sm, transition: animationTransitions.micro },\n },\n down: {\n initial: { opacity: 0, y: -animationDistances.md },\n animate: { opacity: 1, y: 0, transition: animationTransitions.reveal },\n exit: { opacity: 0, y: -animationDistances.sm, transition: animationTransitions.micro },\n },\n left: {\n initial: { opacity: 0, x: animationDistances.md },\n animate: { opacity: 1, x: 0, transition: animationTransitions.reveal },\n exit: { opacity: 0, x: animationDistances.sm, transition: animationTransitions.micro },\n },\n right: {\n initial: { opacity: 0, x: -animationDistances.md },\n animate: { opacity: 1, x: 0, transition: animationTransitions.reveal },\n exit: { opacity: 0, x: -animationDistances.sm, transition: animationTransitions.micro },\n },\n} as const satisfies Record<string, Variants>;\n\nexport const animatedList: Variants = {\n initial: {},\n animate: { transition: { staggerChildren: 0.06, delayChildren: 0.02 } },\n exit: { transition: { staggerChildren: 0.03, staggerDirection: -1 } },\n};\n\nexport const animatedListItem: Variants = {\n initial: { opacity: 0, y: animationDistances.sm },\n animate: { opacity: 1, y: 0, transition: animationTransitions.standard },\n exit: { opacity: 0, y: animationDistances.xs, transition: animationTransitions.micro },\n};\n\nexport const modalSurface: Variants = {\n initial: { opacity: 0, scale: 0.98, y: animationDistances.sm },\n animate: { opacity: 1, scale: 1, y: 0, transition: animationTransitions.panel },\n exit: {\n opacity: 0,\n scale: 0.98,\n y: animationDistances.xs,\n transition: animationTransitions.micro,\n },\n};\n\nexport const drawerSurface = {\n left: {\n initial: { opacity: 0, x: \"-100%\" },\n animate: { opacity: 1, x: 0, transition: animationTransitions.panel },\n exit: { opacity: 0, x: \"-100%\", transition: animationTransitions.micro },\n },\n right: {\n initial: { opacity: 0, x: \"100%\" },\n animate: { opacity: 1, x: 0, transition: animationTransitions.panel },\n exit: { opacity: 0, x: \"100%\", transition: animationTransitions.micro },\n },\n top: {\n initial: { opacity: 0, y: \"-100%\" },\n animate: { opacity: 1, y: 0, transition: animationTransitions.panel },\n exit: { opacity: 0, y: \"-100%\", transition: animationTransitions.micro },\n },\n bottom: {\n initial: { opacity: 0, y: \"100%\" },\n animate: { opacity: 1, y: 0, transition: animationTransitions.panel },\n exit: { opacity: 0, y: \"100%\", transition: animationTransitions.micro },\n },\n} as const satisfies Record<string, Variants>;\n\nexport const popoverSurface: Variants = {\n initial: { opacity: 0, scale: 0.98, y: animationDistances.xs },\n animate: { opacity: 1, scale: 1, y: 0, transition: animationTransitions.standard },\n exit: {\n opacity: 0,\n scale: 0.98,\n y: animationDistances.xs,\n transition: animationTransitions.micro,\n },\n};\n\nexport const pageTransition: Variants = {\n initial: { opacity: 0, y: animationDistances.sm },\n animate: { opacity: 1, y: 0, transition: animationTransitions.page },\n exit: { opacity: 0, y: -animationDistances.xs, transition: animationTransitions.standard },\n};\n\nexport const reducedMotionVariants: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1, transition: animationTransitions.instant },\n exit: { opacity: 0, transition: animationTransitions.instant },\n};\n","\"use client\";\n\nimport {\n AnimatePresence,\n type HTMLMotionProps,\n motion,\n useReducedMotion,\n type Variants,\n} from \"framer-motion\";\nimport type { ReactNode } from \"react\";\nimport {\n animatedList,\n animatedListItem,\n drawerSurface,\n fadeIn,\n modalSurface,\n pageTransition,\n popoverSurface,\n reducedMotionVariants,\n scaleIn,\n slideIn,\n} from \"../variants\";\n\ntype AnimatedDivProps = HTMLMotionProps<\"div\"> & {\n children: ReactNode;\n};\n\nfunction useAccessibleVariants(variants: Variants, allowTransform = false) {\n const shouldReduceMotion = useReducedMotion();\n return shouldReduceMotion && !allowTransform ? reducedMotionVariants : variants;\n}\n\nexport function FadeIn({ children, ...props }: AnimatedDivProps) {\n const variants = useAccessibleVariants(fadeIn);\n\n return (\n <motion.div initial=\"initial\" animate=\"animate\" exit=\"exit\" variants={variants} {...props}>\n {children}\n </motion.div>\n );\n}\n\nexport function SlideIn({\n children,\n direction = \"up\",\n ...props\n}: AnimatedDivProps & { direction?: keyof typeof slideIn }) {\n const variants = useAccessibleVariants(slideIn[direction]);\n\n return (\n <motion.div initial=\"initial\" animate=\"animate\" exit=\"exit\" variants={variants} {...props}>\n {children}\n </motion.div>\n );\n}\n\nexport function ScaleIn({ children, ...props }: AnimatedDivProps) {\n const variants = useAccessibleVariants(scaleIn);\n\n return (\n <motion.div initial=\"initial\" animate=\"animate\" exit=\"exit\" variants={variants} {...props}>\n {children}\n </motion.div>\n );\n}\n\nexport function AnimatedCard({ children, ...props }: AnimatedDivProps) {\n return (\n <ScaleIn whileHover={{ y: -2 }} whileTap={{ scale: 0.99 }} {...props}>\n {children}\n </ScaleIn>\n );\n}\n\nexport function AnimatedList({ children, ...props }: AnimatedDivProps) {\n const containerVariants = useAccessibleVariants(animatedList);\n const itemVariants = useAccessibleVariants(animatedListItem);\n\n return (\n <motion.div\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={containerVariants}\n {...props}\n >\n {Array.isArray(children)\n ? children.map((child, index) => (\n <motion.div key={index} variants={itemVariants}>\n {child}\n </motion.div>\n ))\n : children}\n </motion.div>\n );\n}\n\nexport function AnimatedModal({ children, open, ...props }: AnimatedDivProps & { open: boolean }) {\n const variants = useAccessibleVariants(modalSurface);\n\n return (\n <AnimatePresence>\n {open ? (\n <motion.div initial=\"initial\" animate=\"animate\" exit=\"exit\" variants={variants} {...props}>\n {children}\n </motion.div>\n ) : null}\n </AnimatePresence>\n );\n}\n\nexport function AnimatedDrawer({\n children,\n open,\n side = \"right\",\n ...props\n}: AnimatedDivProps & { open: boolean; side?: keyof typeof drawerSurface }) {\n const variants = useAccessibleVariants(drawerSurface[side]);\n\n return (\n <AnimatePresence>\n {open ? (\n <motion.div initial=\"initial\" animate=\"animate\" exit=\"exit\" variants={variants} {...props}>\n {children}\n </motion.div>\n ) : null}\n </AnimatePresence>\n );\n}\n\nexport function AnimatedPopover({\n children,\n open,\n ...props\n}: AnimatedDivProps & { open: boolean }) {\n const variants = useAccessibleVariants(popoverSurface);\n\n return (\n <AnimatePresence>\n {open ? (\n <motion.div initial=\"initial\" animate=\"animate\" exit=\"exit\" variants={variants} {...props}>\n {children}\n </motion.div>\n ) : null}\n </AnimatePresence>\n );\n}\n\nexport function PageTransition({ children, ...props }: AnimatedDivProps) {\n const variants = useAccessibleVariants(pageTransition);\n\n return (\n <motion.div initial=\"initial\" animate=\"animate\" exit=\"exit\" variants={variants} {...props}>\n {children}\n </motion.div>\n );\n}\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","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\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 { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Cross as X } 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\n// We keep these standard export names so the rest of the application using Nebutra UI doesn't break.\nconst Dialog = BaseDialog.Root;\nconst DialogPortal = BaseDialog.Portal;\n\nconst DialogTrigger = ({\n asChild,\n children,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseDialog.Trigger> & { asChild?: boolean } & {\n ref?: React.Ref<HTMLButtonElement> | undefined;\n}) => {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseDialog.Trigger\n ref={ref}\n {...props}\n render={children as React.ReactElement<Record<string, unknown>>}\n />\n );\n }\n return (\n <BaseDialog.Trigger ref={ref} {...props}>\n {children}\n </BaseDialog.Trigger>\n );\n};\nDialogTrigger.displayName = \"DialogTrigger\";\n\nconst DialogClose = ({\n asChild,\n children,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseDialog.Close> & { asChild?: boolean } & {\n ref?: React.Ref<HTMLButtonElement> | undefined;\n}) => {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseDialog.Close\n ref={ref}\n {...props}\n render={children as React.ReactElement<Record<string, unknown>>}\n />\n );\n }\n return (\n <BaseDialog.Close ref={ref} {...props}>\n {children}\n </BaseDialog.Close>\n );\n};\nDialogClose.displayName = \"DialogClose\";\n\nconst DialogOverlay = ({\n className,\n style,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseDialog.Backdrop> & {\n ref?: React.Ref<HTMLDivElement> | undefined;\n}) => (\n <BaseDialog.Backdrop\n ref={ref}\n className={cn(overlayClassNames.backdrop, className)}\n style={{ zIndex: overlayZIndex.backdrop, ...style }}\n {...props}\n />\n);\nDialogOverlay.displayName = \"DialogOverlay\";\n\nconst DialogContent = ({\n className,\n children,\n style,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseDialog.Popup> & {\n ref?: React.Ref<HTMLDivElement> | undefined;\n}) => (\n <DialogPortal>\n <DialogOverlay />\n <BaseDialog.Popup\n ref={ref}\n className={cn(\n overlayClassNames.modalSurface,\n overlayPrimitiveClassNames.modalSurface,\n className,\n )}\n style={{ zIndex: overlayZIndex.modal, ...style }}\n {...props}\n >\n {children}\n <DialogClose className={overlayClassNames.closeButton}>\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n </BaseDialog.Popup>\n </DialogPortal>\n);\nDialogContent.displayName = \"DialogContent\";\n\nconst DialogHeader = ({\n className,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> | undefined }) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className)}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> | undefined }) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseDialog.Title> & {\n ref?: React.Ref<HTMLHeadingElement> | undefined;\n}) => (\n <BaseDialog.Title\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseDialog.Description> & {\n ref?: React.Ref<HTMLParagraphElement> | undefined;\n}) => (\n <BaseDialog.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n);\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","\"use client\";\n\nimport { Cross as X } from \"@nebutra/icons\";\nimport Image from \"next/image\";\nimport type React from \"react\";\nimport { Dialog, DialogContent, DialogTitle } from \"../../primitives/dialog\";\nimport { m, useReducedMotion } from \"../../shared/animation/motion\";\n\nexport const isImageFile = (file: File) => file.type.startsWith(\"image/\");\n\nexport const getFilePreviewKey = (file: File) => `${file.name}-${file.size}-${file.lastModified}`;\n\nexport const preventDragDefaults = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n};\n\n// ImageViewDialog Component\nexport interface ImageViewDialogProps {\n imageUrl: string | null;\n onClose: () => void;\n}\n\nexport const ImageViewDialog: React.FC<ImageViewDialogProps> = ({ imageUrl, onClose }) => {\n const shouldReduceMotion = useReducedMotion();\n\n if (!imageUrl) return null;\n return (\n <Dialog open={!!imageUrl} onOpenChange={onClose}>\n <DialogContent className=\"p-0 border-none bg-transparent shadow-none max-w-[90vw] md:max-w-[800px]\">\n <DialogTitle className=\"sr-only\">Image Preview</DialogTitle>\n <m.div\n initial={shouldReduceMotion ? { opacity: 1 } : { opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, ...(shouldReduceMotion ? {} : { scale: 1 }) }}\n exit={shouldReduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.95 }}\n transition={shouldReduceMotion ? { duration: 0 } : { duration: 0.2, ease: \"easeOut\" }}\n className=\"relative bg-background rounded-[var(--radius-2xl)] overflow-hidden shadow-2xl\"\n >\n <Image\n src={imageUrl}\n alt=\"Full preview\"\n className=\"w-full max-h-[80vh] object-contain rounded-[var(--radius-2xl)]\"\n fill\n sizes=\"(max-width: 768px) 90vw, 800px\"\n />\n </m.div>\n </DialogContent>\n </Dialog>\n );\n};\nImageViewDialog.displayName = \"ImageViewDialog\";\n\n// PromptAttachmentPreviews Component\nexport type PromptAttachmentPreviewsProps = {\n files: File[];\n filePreviews: Record<string, string>;\n isRecording: boolean;\n onPreview: (imageUrl: string) => void;\n onRemove: (file: File) => void;\n};\n\nexport function PromptAttachmentPreviews({\n files,\n filePreviews,\n isRecording,\n onPreview,\n onRemove,\n}: PromptAttachmentPreviewsProps) {\n if (files.length === 0 || isRecording) return null;\n\n return (\n <div className=\"flex flex-wrap gap-2 p-0 pb-1 transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 motion-reduce:transition-none\">\n {files.map((file) => {\n const previewKey = getFilePreviewKey(file);\n const preview = filePreviews[previewKey];\n return (\n <div key={previewKey} className=\"relative group h-16 w-16\">\n {isImageFile(file) && preview && (\n <>\n <button\n type=\"button\"\n aria-label={`Preview ${file.name}`}\n className=\"relative h-16 w-16 rounded-[var(--radius-xl)] overflow-hidden cursor-pointer transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 motion-reduce:transition-none\"\n onClick={() => onPreview(preview)}\n >\n <Image\n src={preview}\n alt={file.name}\n className=\"h-full w-full object-cover\"\n fill\n sizes=\"64px\"\n />\n </button>\n <button\n type=\"button\"\n aria-label={`Remove ${file.name}`}\n onClick={(event) => {\n event.stopPropagation();\n onRemove(file);\n }}\n className=\"absolute top-1 right-1 rounded-full bg-black/70 p-0.5 opacity-100 transition-opacity motion-reduce:transition-none\"\n >\n <X className=\"h-3 w-3 text-white\" />\n </button>\n </>\n )}\n </div>\n );\n })}\n </div>\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 * 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 { 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 type React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport const MAX_VISUALIZER_BARS = 64;\nexport const VISUALIZER_BAR_STYLES = Array.from({ length: MAX_VISUALIZER_BARS }, (_, index) => ({\n id: `voice-bar-${index}`,\n height: `${15 + ((index * 37) % 86)}%`,\n animationDelay: `${index * 0.05}s`,\n animationDuration: `${0.5 + ((index * 17) % 6) / 10}s`,\n}));\n\nexport const formatRecordingTime = (seconds: number) => {\n const mins = Math.floor(seconds / 60);\n const secs = seconds % 60;\n return `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\n};\n\nexport interface VoiceRecorderProps {\n isRecording: boolean;\n time: number;\n visualizerBars?: number;\n}\n\nexport const VoiceRecorder: React.FC<VoiceRecorderProps> = ({\n isRecording,\n time,\n visualizerBars = 32,\n}) => {\n const barStyles = VISUALIZER_BAR_STYLES.slice(\n 0,\n Math.min(visualizerBars, VISUALIZER_BAR_STYLES.length),\n );\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center w-full transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 py-3\",\n isRecording ? \"opacity-100\" : \"opacity-0 h-0\",\n )}\n >\n <div className=\"flex items-center gap-2 mb-3\">\n <div className=\"h-2 w-2 rounded-full bg-red-500 animate-pulse\" />\n <span className=\"font-mono text-sm text-white/80\">{formatRecordingTime(time)}</span>\n </div>\n <div className=\"w-full h-10 flex items-center justify-center gap-0.5 px-4\">\n {barStyles.map((bar) => (\n <div\n key={bar.id}\n className=\"w-0.5 rounded-full bg-white/50 animate-pulse\"\n style={{\n height: bar.height,\n animationDelay: bar.animationDelay,\n animationDuration: bar.animationDuration,\n }}\n />\n ))}\n </div>\n </div>\n );\n};\nVoiceRecorder.displayName = \"VoiceRecorder\";\n","\"use client\";\n\nimport {\n ArrowUp,\n Brain as BrainCog,\n FolderClosed as FolderCode,\n Globe,\n Microphone as Mic,\n Paperclip,\n StopCircle,\n StopFill,\n} from \"@nebutra/icons\";\nimport React, { useEffectEvent } from \"react\";\nimport { Button } from \"../../primitives/button\";\nimport { Textarea } from \"../../primitives/textarea\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../../primitives/tooltip\";\nimport {\n AnimatePresence,\n domAnimation,\n LazyMotion,\n m,\n useReducedMotion,\n} from \"../../shared/animation/motion\";\nimport { cn } from \"../../utils/cn\";\nimport {\n getFilePreviewKey,\n ImageViewDialog,\n isImageFile,\n PromptAttachmentPreviews,\n preventDragDefaults,\n} from \"./file-attachment-zone\";\nimport { VoiceRecorder } from \"./voice-visualizer\";\n\ntype PromptTextareaStyle = React.CSSProperties & {\n \"--textarea-min-height\"?: string;\n};\n\n// PromptInput Context\ninterface PromptInputContextType {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: (() => void) | undefined;\n disabled?: boolean | undefined;\n}\nconst noopSetPromptValue = (_value: string) => {};\nconst PromptInputIsLoadingContext = React.createContext(false);\nconst PromptInputValueContext = React.createContext(\"\");\nconst PromptInputSetValueContext = React.createContext<(value: string) => void>(noopSetPromptValue);\nconst PromptInputMaxHeightContext = React.createContext<number | string>(240);\nconst PromptInputSubmitContext = React.createContext<(() => void) | undefined>(undefined);\nconst PromptInputDisabledContext = React.createContext(false);\n\nfunction usePromptInput() {\n return {\n isLoading: React.use(PromptInputIsLoadingContext),\n value: React.use(PromptInputValueContext),\n setValue: React.use(PromptInputSetValueContext),\n maxHeight: React.use(PromptInputMaxHeightContext),\n onSubmit: React.use(PromptInputSubmitContext),\n disabled: React.use(PromptInputDisabledContext),\n } satisfies PromptInputContextType;\n}\n\n// PromptInput Component\ninterface PromptInputProps {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n onDragOver?: (e: React.DragEvent) => void;\n onDragLeave?: (e: React.DragEvent) => void;\n onDrop?: (e: React.DragEvent) => void;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nconst PromptInput: React.FC<PromptInputProps> = ({\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n onDragOver,\n onDragLeave,\n onDrop,\n ref,\n}) => {\n const [internalValue, setInternalValue] = React.useState(value || \"\");\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n const promptValue = value ?? internalValue;\n const setPromptValue = onValueChange ?? handleChange;\n\n return (\n <TooltipProvider>\n <PromptInputIsLoadingContext.Provider value={isLoading}>\n <PromptInputValueContext.Provider value={promptValue}>\n <PromptInputSetValueContext.Provider value={setPromptValue}>\n <PromptInputMaxHeightContext.Provider value={maxHeight}>\n <PromptInputSubmitContext.Provider value={onSubmit}>\n <PromptInputDisabledContext.Provider value={disabled}>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: drag-drop zone uses div intentionally */}\n <div\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-3xl)] border border-input bg-background p-2 shadow-lg transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300\",\n isLoading && \"border-destructive/70\",\n className,\n )}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n {children}\n </div>\n </PromptInputDisabledContext.Provider>\n </PromptInputSubmitContext.Provider>\n </PromptInputMaxHeightContext.Provider>\n </PromptInputSetValueContext.Provider>\n </PromptInputValueContext.Provider>\n </PromptInputIsLoadingContext.Provider>\n </TooltipProvider>\n );\n};\nPromptInput.displayName = \"PromptInput\";\n\n// PromptInputTextarea Component\ninterface PromptInputTextareaProps {\n disableAutosize?: boolean;\n placeholder?: string;\n className?: string;\n onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n}\n\nconst PromptInputTextarea: React.FC<\n PromptInputTextareaProps & React.ComponentProps<typeof Textarea>\n> = ({ className, onKeyDown, disableAutosize = false, placeholder, style, ...props }) => {\n const { value, setValue, maxHeight, onSubmit, disabled } = usePromptInput();\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n React.useEffect(() => {\n if (disableAutosize || !textareaRef.current) return;\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height =\n typeof maxHeight === \"number\"\n ? `${Math.min(textareaRef.current.scrollHeight, maxHeight)}px`\n : `min(${textareaRef.current.scrollHeight}px, ${maxHeight})`;\n }, [maxHeight, disableAutosize]);\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n return (\n <Textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n rows={1}\n style={{ \"--textarea-min-height\": \"2rem\", ...style } as PromptTextareaStyle}\n className={cn(\"resize-none border-0 shadow-none focus-visible:ring-0\", className)}\n disabled={disabled}\n placeholder={placeholder}\n {...props}\n />\n );\n};\n\n// PromptInputActions Component\ntype PromptInputActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst PromptInputActions: React.FC<PromptInputActionsProps> = ({\n children,\n className,\n ...props\n}) => (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n);\n\n// PromptInputAction Component\ninterface PromptInputActionProps extends Omit<React.ComponentProps<typeof Tooltip>, \"children\"> {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n className?: string;\n}\n\nconst PromptInputAction: React.FC<PromptInputActionProps> = ({\n tooltip,\n children,\n className,\n side = \"top\",\n ...props\n}) => {\n const { disabled } = usePromptInput();\n return (\n <Tooltip {...props}>\n <TooltipTrigger asChild disabled={disabled}>\n {children}\n </TooltipTrigger>\n <TooltipContent side={side} className={className || \"\"}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n};\n\n// CustomDivider Component\nconst CustomDivider: React.FC = () => (\n <div className=\"relative h-6 w-[1.5px] mx-1\">\n <div\n className=\"absolute inset-0 bg-gradient-to-t from-transparent via-cyan/40 to-transparent rounded-full\"\n style={{\n clipPath:\n \"polygon(0% 0%, 100% 0%, 100% 40%, 140% 50%, 100% 60%, 100% 100%, 0% 100%, 0% 60%, -40% 50%, 0% 40%)\",\n }}\n />\n </div>\n);\n\n// PromptModeButton + PromptModeActions\ntype PromptMode = \"search\" | \"think\" | \"canvas\";\ntype PromptModeTone = \"search\" | \"think\" | \"canvas\";\n\nconst promptModeToneClassName: Record<\n PromptModeTone,\n { active: string; icon: string; label: string }\n> = {\n search: {\n active: \"bg-info/15 border-info text-info\",\n icon: \"text-info\",\n label: \"text-info\",\n },\n think: {\n active: \"bg-indigo-500/15 border-indigo-500 text-indigo-500\",\n icon: \"text-indigo-500\",\n label: \"text-indigo-500\",\n },\n canvas: {\n active: \"bg-warning/15 border-warning text-warning\",\n icon: \"text-warning\",\n label: \"text-warning\",\n },\n};\n\nfunction PromptModeIcon({ tone, active }: { tone: PromptModeTone; active: boolean }) {\n const className = cn(\"w-4 h-4\", active ? promptModeToneClassName[tone].icon : \"text-inherit\");\n if (tone === \"search\") return <Globe className={className} />;\n if (tone === \"think\") return <BrainCog className={className} />;\n return <FolderCode className={className} />;\n}\n\nfunction PromptModeButton({\n active,\n label,\n tone,\n onClick,\n}: {\n active: boolean;\n label: string;\n tone: PromptModeTone;\n onClick: () => void;\n}) {\n const toneClassName = promptModeToneClassName[tone];\n const shouldReduceMotion = useReducedMotion();\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"rounded-full transition-[background-color,border-color,box-shadow,color,opacity,transform] flex items-center gap-1 px-2 py-1 border h-8\",\n active\n ? toneClassName.active\n : \"bg-transparent border-transparent text-muted-foreground hover:text-foreground\",\n )}\n >\n <div className=\"w-5 h-5 flex items-center justify-center flex-shrink-0\">\n <m.div\n animate={\n shouldReduceMotion\n ? { opacity: active ? 1 : 0.82 }\n : { rotate: active ? 360 : 0, scale: active ? 1.1 : 1 }\n }\n whileHover={\n shouldReduceMotion\n ? { opacity: 1 }\n : {\n rotate: active ? 360 : 15,\n scale: 1.1,\n transition: { type: \"spring\", stiffness: 300, damping: 10 },\n }\n }\n transition={\n shouldReduceMotion ? { duration: 0 } : { type: \"spring\", stiffness: 260, damping: 25 }\n }\n >\n <PromptModeIcon tone={tone} active={active} />\n </m.div>\n </div>\n <AnimatePresence>\n {active && (\n <m.span\n initial={shouldReduceMotion ? { opacity: 1 } : { width: 0, opacity: 0 }}\n animate={{ width: \"auto\", opacity: 1 }}\n exit={shouldReduceMotion ? { opacity: 0 } : { width: 0, opacity: 0 }}\n transition={shouldReduceMotion ? { duration: 0 } : { duration: 0.2 }}\n className={cn(\n \"text-xs overflow-hidden whitespace-nowrap flex-shrink-0\",\n toneClassName.label,\n )}\n >\n {label}\n </m.span>\n )}\n </AnimatePresence>\n </button>\n );\n}\n\ntype PromptModeActionsProps = {\n uploadInputRef: React.RefObject<HTMLInputElement | null>;\n isRecording: boolean;\n modes: Record<PromptMode, boolean>;\n onToggleMode: (mode: Exclude<PromptMode, \"canvas\">) => void;\n onToggleCanvas: () => void;\n onProcessFile: (file: File) => void;\n};\n\nfunction PromptModeActions({\n uploadInputRef,\n isRecording,\n modes,\n onToggleMode,\n onToggleCanvas,\n onProcessFile,\n}: PromptModeActionsProps) {\n return (\n <div\n className={cn(\n \"flex items-center gap-1 transition-opacity duration-300\",\n isRecording ? \"opacity-0 invisible h-0\" : \"opacity-100 visible\",\n )}\n >\n <PromptInputAction tooltip=\"Upload image\">\n <button\n type=\"button\"\n aria-label=\"Upload image\"\n onClick={() => uploadInputRef.current?.click()}\n className=\"flex h-8 w-8 text-muted-foreground cursor-pointer items-center justify-center rounded-full transition-colors hover:bg-accent hover:text-foreground\"\n disabled={isRecording}\n >\n <Paperclip className=\"h-5 w-5 transition-colors\" />\n </button>\n </PromptInputAction>\n <input\n ref={uploadInputRef}\n type=\"file\"\n className=\"hidden\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n if (file) onProcessFile(file);\n if (event.target) event.target.value = \"\";\n }}\n accept=\"image/*\"\n aria-label=\"Upload image\"\n />\n <div className=\"flex items-center\">\n <PromptModeButton\n active={modes.search}\n label=\"Search\"\n tone=\"search\"\n onClick={() => onToggleMode(\"search\")}\n />\n <CustomDivider />\n <PromptModeButton\n active={modes.think}\n label=\"Think\"\n tone=\"think\"\n onClick={() => onToggleMode(\"think\")}\n />\n <CustomDivider />\n <PromptModeButton\n active={modes.canvas}\n label=\"Canvas\"\n tone=\"canvas\"\n onClick={onToggleCanvas}\n />\n </div>\n </div>\n );\n}\n\n// PromptSubmitAction Component\ntype PromptSubmitActionProps = {\n isLoading: boolean;\n isRecording: boolean;\n hasContent: boolean;\n onActivate: () => void;\n};\n\nfunction PromptSubmitAction({\n isLoading,\n isRecording,\n hasContent,\n onActivate,\n}: PromptSubmitActionProps) {\n const shouldReduceMotion = useReducedMotion();\n\n return (\n <PromptInputAction\n tooltip={\n isLoading\n ? \"Stop generation\"\n : isRecording\n ? \"Stop recording\"\n : hasContent\n ? \"Send message\"\n : \"Voice message\"\n }\n >\n <Button\n variant=\"default\"\n size=\"icon\"\n className={cn(\n \"h-8 w-8 rounded-full transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-200\",\n isRecording\n ? \"bg-transparent hover:bg-accent text-destructive hover:text-destructive/80\"\n : hasContent\n ? \"bg-primary hover:bg-primary/90 text-primary-foreground\"\n : \"bg-transparent hover:bg-accent text-muted-foreground hover:text-foreground\",\n )}\n onClick={onActivate}\n disabled={isLoading && !hasContent}\n >\n {isLoading ? (\n <StopFill\n className={cn(\n \"h-4 w-4 fill-primary-foreground\",\n shouldReduceMotion ? \"opacity-100\" : \"animate-pulse\",\n )}\n />\n ) : isRecording ? (\n <StopCircle className=\"h-5 w-5 text-destructive\" />\n ) : hasContent ? (\n <ArrowUp className=\"h-4 w-4 text-primary-foreground\" />\n ) : (\n <Mic className=\"h-5 w-5 text-primary-foreground transition-colors\" />\n )}\n </Button>\n </PromptInputAction>\n );\n}\n\n// PromptInputBox — State & Reducer\nexport interface PromptInputBoxProps {\n onSend?: (message: string, files?: File[]) => void;\n isLoading?: boolean;\n placeholder?: string;\n className?: string;\n ref?: React.Ref<HTMLDivElement>;\n}\n\ntype PromptInputBoxState = {\n input: string;\n files: File[];\n filePreviews: Record<string, string>;\n selectedImage: string | null;\n isRecording: boolean;\n recordingTime: number;\n showSearch: boolean;\n showThink: boolean;\n showCanvas: boolean;\n};\n\nconst promptInputBoxInitialState: PromptInputBoxState = {\n input: \"\",\n files: [],\n filePreviews: {},\n selectedImage: null,\n isRecording: false,\n recordingTime: 0,\n showSearch: false,\n showThink: false,\n showCanvas: false,\n};\n\ntype PromptInputBoxAction =\n | { type: \"set-input\"; value: string }\n | { type: \"set-active-file\"; file: File }\n | { type: \"set-file-preview\"; previewKey: string; preview: string }\n | { type: \"remove-file\"; previewKey: string }\n | { type: \"set-selected-image\"; imageUrl: string | null }\n | { type: \"toggle-mode\"; mode: PromptMode }\n | { type: \"start-recording\" }\n | { type: \"tick-recording\" }\n | { type: \"stop-recording\" }\n | { type: \"reset-composer\" };\n\nfunction promptInputBoxReducer(\n state: PromptInputBoxState,\n action: PromptInputBoxAction,\n): PromptInputBoxState {\n switch (action.type) {\n case \"set-input\":\n return { ...state, input: action.value };\n case \"set-active-file\":\n return { ...state, files: [action.file], filePreviews: {} };\n case \"set-file-preview\":\n return { ...state, filePreviews: { [action.previewKey]: action.preview } };\n case \"remove-file\": {\n const nextPreviews = { ...state.filePreviews };\n delete nextPreviews[action.previewKey];\n return {\n ...state,\n filePreviews: nextPreviews,\n files: state.files.filter((file) => getFilePreviewKey(file) !== action.previewKey),\n };\n }\n case \"set-selected-image\":\n return { ...state, selectedImage: action.imageUrl };\n case \"toggle-mode\":\n if (action.mode === \"search\") {\n return { ...state, showSearch: !state.showSearch, showThink: false };\n }\n if (action.mode === \"think\") {\n return { ...state, showSearch: false, showThink: !state.showThink };\n }\n return { ...state, showCanvas: !state.showCanvas };\n case \"start-recording\":\n return { ...state, recordingTime: 0, isRecording: true };\n case \"tick-recording\":\n return { ...state, recordingTime: state.recordingTime + 1 };\n case \"stop-recording\":\n return { ...state, isRecording: false, recordingTime: 0 };\n case \"reset-composer\":\n return { ...state, input: \"\", files: [], filePreviews: {} };\n }\n}\n\n// PromptInputBox — Main Component\nexport const PromptInputBox: React.FC<PromptInputBoxProps> = (props) => {\n const {\n onSend = () => {},\n isLoading = false,\n placeholder = \"Type your message here...\",\n className,\n ref,\n } = props;\n const [state, dispatch] = React.useReducer(promptInputBoxReducer, promptInputBoxInitialState);\n const {\n input,\n files,\n filePreviews,\n selectedImage,\n isRecording,\n recordingTime,\n showSearch,\n showThink,\n showCanvas,\n } = state;\n const uploadInputRef = React.useRef<HTMLInputElement>(null);\n const promptBoxRef = React.useRef<HTMLDivElement>(null);\n const handleToggleChange = (mode: Exclude<PromptMode, \"canvas\">) =>\n dispatch({ type: \"toggle-mode\", mode });\n const handleCanvasToggle = () => dispatch({ type: \"toggle-mode\", mode: \"canvas\" });\n\n const processFile = (file: File) => {\n if (!isImageFile(file)) {\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n return;\n }\n const previewKey = getFilePreviewKey(file);\n dispatch({ type: \"set-active-file\", file });\n const reader = new FileReader();\n reader.onload = (e) => {\n const preview = e.target?.result;\n if (typeof preview === \"string\") {\n dispatch({ type: \"set-file-preview\", previewKey, preview });\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n preventDragDefaults(e);\n const droppedFiles = Array.from(e.dataTransfer.files);\n const firstFile = droppedFiles.find((file) => isImageFile(file));\n if (firstFile) processFile(firstFile);\n };\n\n const handleRemoveFile = (fileToRemove: File) => {\n const previewKey = getFilePreviewKey(fileToRemove);\n dispatch({ type: \"remove-file\", previewKey });\n };\n const openImageModal = (imageUrl: string) => dispatch({ type: \"set-selected-image\", imageUrl });\n\n const handlePasteEvent = useEffectEvent((e: ClipboardEvent) => {\n const items = e.clipboardData?.items;\n if (!items) return;\n for (const item of Array.from(items)) {\n if (item.type.includes(\"image\")) {\n const file = item.getAsFile();\n if (file) {\n e.preventDefault();\n processFile(file);\n break;\n }\n }\n }\n });\n\n React.useEffect(() => {\n const handlePaste = (e: ClipboardEvent) => handlePasteEvent(e);\n document.addEventListener(\"paste\", handlePaste);\n return () => document.removeEventListener(\"paste\", handlePaste);\n }, []);\n\n React.useEffect(() => {\n if (!isRecording) return;\n const timer = window.setInterval(() => dispatch({ type: \"tick-recording\" }), 1000);\n return () => window.clearInterval(timer);\n }, [isRecording]);\n\n const handleSubmit = () => {\n if (input.trim() || files.length > 0) {\n let messagePrefix = \"\";\n if (showSearch) messagePrefix = \"[Search: \";\n else if (showThink) messagePrefix = \"[Think: \";\n else if (showCanvas) messagePrefix = \"[Canvas: \";\n const formattedInput = messagePrefix ? `${messagePrefix}${input}]` : input;\n onSend(formattedInput, files);\n dispatch({ type: \"reset-composer\" });\n }\n };\n const startRecording = () => dispatch({ type: \"start-recording\" });\n const stopRecording = () => {\n onSend(`[Voice message - ${recordingTime} seconds]`, []);\n dispatch({ type: \"stop-recording\" });\n };\n const hasContent = input.trim() !== \"\" || files.length > 0;\n return (\n <LazyMotion features={domAnimation}>\n <PromptInput\n value={input}\n onValueChange={(value) => dispatch({ type: \"set-input\", value })}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className={cn(\n \"w-full bg-background border-input shadow-lg transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 ease-in-out\",\n isRecording && \"border-destructive/70\",\n className,\n )}\n disabled={isLoading || isRecording}\n ref={ref || promptBoxRef}\n onDragOver={preventDragDefaults}\n onDragLeave={preventDragDefaults}\n onDrop={handleDrop}\n >\n <PromptAttachmentPreviews\n files={files}\n filePreviews={filePreviews}\n isRecording={isRecording}\n onPreview={openImageModal}\n onRemove={handleRemoveFile}\n />\n <div\n className={cn(\n \"transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300\",\n isRecording ? \"h-0 overflow-hidden opacity-0\" : \"opacity-100\",\n )}\n >\n <PromptInputTextarea\n placeholder={\n showSearch\n ? \"Search the web...\"\n : showThink\n ? \"Think deeply...\"\n : showCanvas\n ? \"Create on canvas...\"\n : placeholder\n }\n className=\"text-base\"\n />\n </div>\n {isRecording && <VoiceRecorder isRecording={isRecording} time={recordingTime} />}\n <PromptInputActions className=\"flex items-center justify-between gap-2 p-0 pt-2\">\n <PromptModeActions\n uploadInputRef={uploadInputRef}\n isRecording={isRecording}\n modes={{ search: showSearch, think: showThink, canvas: showCanvas }}\n onToggleMode={handleToggleChange}\n onToggleCanvas={handleCanvasToggle}\n onProcessFile={processFile}\n />\n <PromptSubmitAction\n isLoading={isLoading}\n isRecording={isRecording}\n hasContent={hasContent}\n onActivate={() => {\n if (isRecording) stopRecording();\n else if (hasContent) handleSubmit();\n else startRecording();\n }}\n />\n </PromptInputActions>\n </PromptInput>\n <ImageViewDialog\n imageUrl={selectedImage}\n onClose={() => dispatch({ type: \"set-selected-image\", imageUrl: null })}\n />\n </LazyMotion>\n );\n};\nPromptInputBox.displayName = \"PromptInputBox\";\n","\"use client\";\n\nimport { brandSpring, emerge, flow } from \"@nebutra/brand\";\nimport type * as React from \"react\";\nimport {\n domAnimation,\n LazyMotion,\n m,\n type Transition,\n useReducedMotion,\n} from \"../shared/animation/motion\";\n\nconst emergeTransition = {\n duration: emerge.transition.duration,\n ease: [0.16, 1, 0.3, 1],\n} satisfies Transition;\n\nconst flowTransition = {\n duration: flow.transition.duration,\n ease: [0, 0, 0.2, 1],\n} satisfies Transition;\n\nconst defaultSpringTransition = {\n type: \"spring\",\n stiffness: brandSpring.default.stiffness,\n damping: brandSpring.default.damping,\n mass: brandSpring.default.mass,\n} satisfies Transition;\n\nconst PRESETS = {\n emerge: {\n initial: emerge.initial,\n animate: emerge.animate,\n exit: emerge.exit,\n transition: emergeTransition,\n },\n flow: {\n initial: flow.initial,\n animate: flow.animate,\n exit: flow.exit,\n transition: flowTransition,\n },\n fade: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n transition: { duration: 0.3 },\n },\n fadeUp: {\n initial: { opacity: 0, y: 16 },\n animate: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: 16 },\n transition: defaultSpringTransition,\n },\n scale: {\n initial: { opacity: 0, scale: 0.95 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n transition: defaultSpringTransition,\n },\n} as const;\n\ntype Preset = keyof typeof PRESETS;\n\nconst STAGGER = { fast: 0.05, normal: 0.1, slow: 0.2 } as const;\n\nfunction MotionDiv(props: React.ComponentProps<typeof m.div>) {\n return (\n <LazyMotion features={domAnimation}>\n <m.div {...props} />\n </LazyMotion>\n );\n}\n\nexport interface AnimateInProps {\n children: React.ReactNode;\n preset?: Preset;\n delay?: number;\n duration?: number;\n inView?: boolean;\n className?: string;\n}\n\n// NOTE: do not destructure at the parameter signature. Next.js build-time\n// type inference can mis-resolve destructured params without defaults as\n// required `any`, masking the typed AnimateInProps interface. Keep the signature\n// as `(props: AnimateInProps)` and destructure inside.\nexport function AnimateIn(props: AnimateInProps) {\n const { children, preset = \"emerge\", delay = 0, duration, inView = false, className } = props;\n const shouldReduce = useReducedMotion();\n const { initial, animate, exit, transition } = PRESETS[preset];\n const t: Transition = {\n ...transition,\n ...(delay ? { delay } : {}),\n ...(duration ? { duration } : {}),\n };\n\n if (shouldReduce) return <div className={className}>{children}</div>;\n\n if (inView) {\n return (\n <MotionDiv\n className={className}\n initial={initial}\n whileInView={animate}\n exit={exit}\n viewport={{ once: true, margin: \"-10%\" }}\n transition={t}\n >\n {children}\n </MotionDiv>\n );\n }\n\n return (\n <MotionDiv className={className} initial={initial} animate={animate} exit={exit} transition={t}>\n {children}\n </MotionDiv>\n );\n}\n\nexport interface AnimateInGroupProps {\n children: React.ReactNode;\n stagger?: keyof typeof STAGGER;\n inView?: boolean;\n className?: string;\n}\n\nexport function AnimateInGroup(props: AnimateInGroupProps) {\n const { children, stagger = \"normal\", inView = false, className } = props;\n const shouldReduce = useReducedMotion();\n const variants = {\n initial: {},\n animate: { transition: { staggerChildren: STAGGER[stagger] } },\n };\n\n if (shouldReduce) return <div className={className}>{children}</div>;\n\n if (inView) {\n return (\n <MotionDiv\n className={className}\n initial=\"initial\"\n whileInView=\"animate\"\n viewport={{ once: true, margin: \"-10%\" }}\n variants={variants}\n >\n {children}\n </MotionDiv>\n );\n }\n\n return (\n <MotionDiv className={className} initial=\"initial\" animate=\"animate\" variants={variants}>\n {children}\n </MotionDiv>\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { slant, useAsciiText } from \"react-ascii-text\";\n\ninterface AsciiTextProps {\n text: string;\n className?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n font?: any;\n}\n\nexport function AsciiText({ text, className = \"\", font = slant }: AsciiTextProps) {\n const asciiTextRef = useAsciiText({\n font: font,\n text: text,\n });\n\n return (\n <pre\n ref={asciiTextRef as React.RefObject<HTMLPreElement | null>}\n className={`font-mono leading-none m-0 p-0 ${className}`}\n />\n );\n}\n","\"use client\";\n\nimport { Bell, ChevronRight } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { useEffectEvent } from \"react\";\nimport { cn } from \"../utils\";\n\nexport interface ChangelogEntry {\n version: string;\n title: string;\n date: string;\n tag?: string;\n tagColor?: string;\n excerpt: string;\n url: string;\n}\n\nexport interface ChangelogWidgetProps {\n entries: ChangelogEntry[];\n changelogUrl?: string;\n className?: string;\n}\n\nconst TAG_COLOR_MAP: Record<string, string> = {\n feature: \"bg-[hsl(var(--primary))] text-white\",\n fix: \"bg-[var(--status-success)] text-white\",\n breaking: \"bg-[var(--status-danger)] text-white\",\n improvement: \"bg-[var(--status-warning)] text-white\",\n security: \"bg-[var(--status-danger)] text-white\",\n experimental: \"bg-[var(--neutral-8)] text-foreground\",\n};\n\nconst getTagColor = (tag?: string) => {\n if (!tag) return \"bg-[var(--neutral-7)] text-foreground\";\n return TAG_COLOR_MAP[tag.toLowerCase()] || TAG_COLOR_MAP.feature;\n};\n\nconst getUnreadCount = (entries: ChangelogEntry[], lastSeenVersion: string | null) => {\n if (!lastSeenVersion) return entries.length;\n const lastSeenIndex = entries.findIndex((entry) => entry.version === lastSeenVersion);\n return lastSeenIndex === -1 ? entries.length : lastSeenIndex;\n};\n\nexport function ChangelogWidget({\n entries,\n changelogUrl = \"/changelog\",\n className,\n}: ChangelogWidgetProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [lastSeenVersion, setLastSeenVersion] = React.useState<string | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n const unreadCount = getUnreadCount(entries, lastSeenVersion);\n const recentEntries = entries.slice(0, 5);\n const latestVersion = recentEntries[0]?.version ?? null;\n\n const closeAndMarkSeen = () => {\n setIsOpen(false);\n if (latestVersion) setLastSeenVersion(latestVersion);\n };\n\n const closeFromDocumentEvent = useEffectEvent(() => {\n closeAndMarkSeen();\n });\n\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") closeFromDocumentEvent();\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n closeFromDocumentEvent();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n return (\n <div className={cn(\"relative\", className)} ref={dropdownRef}>\n <button\n type=\"button\"\n aria-label=\"View changelog\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((open) => !open)}\n className=\"relative inline-flex items-center justify-center rounded-[var(--radius-lg)] p-2 transition-colors hover:bg-muted\"\n >\n <Bell className=\"h-5 w-5 text-muted-foreground\" />\n {unreadCount > 0 && (\n <span className=\"absolute right-0 top-0 flex h-5 w-5 items-center justify-center rounded-full bg-[var(--status-danger)] text-xs font-bold text-white\">\n {unreadCount > 9 ? \"9+\" : unreadCount}\n </span>\n )}\n </button>\n\n {isOpen && (\n <div className=\"absolute right-0 top-full z-50 mt-2 w-80 overflow-hidden rounded-[var(--radius-lg)] border border-border bg-white shadow-lg transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-200\">\n <div className=\"bg-gradient-to-r from-[var(--blue-3)] to-[var(--cyan-3)] px-4 py-3\">\n <h3 className=\"font-semibold text-foreground\">What's New</h3>\n </div>\n\n <div className=\"max-h-96 overflow-y-auto\">\n {recentEntries.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-sm text-muted-foreground\">\n No updates available\n </div>\n ) : (\n recentEntries.map((entry) => (\n <a\n key={entry.version}\n href={entry.url}\n className=\"block border-b border-border px-4 py-3 transition-colors hover:bg-muted\"\n >\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs font-bold text-primary\">\n v{entry.version}\n </span>\n {entry.tag && (\n <span\n className={cn(\n \"rounded px-2 py-0.5 text-xs font-medium\",\n getTagColor(entry.tag),\n )}\n >\n {entry.tag}\n </span>\n )}\n </div>\n </div>\n <p className=\"mb-1 text-sm font-medium text-foreground\">{entry.title}</p>\n <p className=\"mb-2 line-clamp-2 text-xs text-muted-foreground\">{entry.excerpt}</p>\n <span className=\"text-xs text-muted-foreground\">{entry.date}</span>\n </a>\n ))\n )}\n </div>\n\n <a\n href={changelogUrl}\n onClick={closeAndMarkSeen}\n className=\"flex items-center justify-between border-t border-border bg-background px-4 py-3 text-sm font-medium text-primary transition-colors hover:bg-muted\"\n >\n <span>View all updates</span>\n <ChevronRight className=\"h-4 w-4\" />\n </a>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Pure mapping layer between a neutral `@nebutra/graph-model` graph and the\n * `@xyflow/react` view model. Framework-free on purpose: no React, no DOM,\n * no domain types — every function is a referentially-transparent transform,\n * generic over the caller's node/edge specialization.\n *\n * Domain knowledge (how to build an edge from a connection, an edge's stable\n * identity) is INJECTED, so this library never depends on `@nebutra/reel` or\n * any feature package. The graph is the source of truth; xyflow shapes are\n * derived; gestures are translated back into a *new* immutable graph with all\n * non-structural fields preserved.\n */\n\nimport type { Graph, GraphEdge, GraphNode } from \"@nebutra/graph-model\";\nimport { wouldCreateCycle } from \"@nebutra/graph-model\";\n\n/** Stable, collision-free identity for an edge (injected per domain). */\nexport type EdgeIdentity<E extends GraphEdge> = (edge: E) => string;\n\n/** Build a domain edge from an xyflow connection, or reject it (null). */\nexport type MakeEdge<E extends GraphEdge> = (\n from: string,\n to: string,\n targetHandle: string | null,\n) => E | null;\n\n/** xyflow node shape we consume/produce (structurally compatible). */\nexport interface FlowNode<N extends GraphNode> {\n id: string;\n type: string;\n position: { x: number; y: number };\n data: { node: N };\n}\n\n/** xyflow edge shape we consume/produce (structurally compatible). */\nexport interface FlowEdge<E extends GraphEdge> {\n id: string;\n source: string;\n target: string;\n targetHandle?: string | null;\n data: { edge: E };\n}\n\n/** xyflow's connection payload (source/target may be null mid-drag). */\nexport interface FlowConnection {\n source: string | null;\n target: string | null;\n sourceHandle: string | null;\n targetHandle: string | null;\n}\n\nexport type AddEdgeResult<G> = { ok: true; graph: G } | { ok: false; reason: string };\n\n/** Single custom xyflow node `type` key — one renderer for every node. */\nexport const GRAPH_NODE_FLOW_TYPE = \"graph-node\" as const;\n\n/** Graph → xyflow view model. Pure; allocates fresh arrays. */\nexport function graphToFlow<N extends GraphNode, E extends GraphEdge>(\n graph: Graph<N, E>,\n edgeIdentity: EdgeIdentity<E>,\n): { nodes: FlowNode<N>[]; edges: FlowEdge<E>[] } {\n const nodes = graph.nodes.map((n) => ({\n id: n.id,\n type: GRAPH_NODE_FLOW_TYPE,\n position: { x: n.x, y: n.y },\n data: { node: n },\n }));\n const edges = graph.edges.map((e) => ({\n id: edgeIdentity(e),\n source: e.from,\n target: e.to,\n data: { edge: e },\n }));\n return { nodes, edges };\n}\n\n/**\n * Apply xyflow node positions back onto the graph. Returns a *new* graph;\n * the input and its `nodes` array are never mutated. Non-structural fields\n * (anything besides `nodes`/`edges`) are preserved by spread.\n */\nexport function applyNodePositions<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n flowNodes: readonly FlowNode<N>[],\n): G {\n const posById = new Map(flowNodes.map((n) => [n.id, n.position] as const));\n const nodes = graph.nodes.map((n) => {\n const pos = posById.get(n.id);\n if (!pos || (pos.x === n.x && pos.y === n.y)) return n;\n return { ...n, x: pos.x, y: pos.y };\n });\n return { ...graph, nodes };\n}\n\n/**\n * Attempt to add a connection as a domain edge. Rejected (with a\n * human-readable hint) on missing endpoints, self-loop, duplicate, a domain\n * `makeEdge` veto, or when it would make the graph cyclic — enforced via the\n * neutral `@nebutra/graph-model` guard so the UI can never persist a non-DAG.\n */\nexport function tryAddEdge<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n connection: FlowConnection,\n opts: { makeEdge: MakeEdge<E>; edgeIdentity: EdgeIdentity<E> },\n): AddEdgeResult<G> {\n if (!connection.source || !connection.target) {\n return { ok: false, reason: \"Connection needs both a source and a target node.\" };\n }\n if (connection.source === connection.target) {\n return { ok: false, reason: \"A node cannot connect to itself.\" };\n }\n const candidate = opts.makeEdge(connection.source, connection.target, connection.targetHandle);\n if (!candidate) {\n return { ok: false, reason: \"That connection is not allowed between these nodes.\" };\n }\n const candidateId = opts.edgeIdentity(candidate);\n if (graph.edges.some((e) => opts.edgeIdentity(e) === candidateId)) {\n return { ok: false, reason: \"That connection already exists between these nodes.\" };\n }\n if (wouldCreateCycle(graph.edges, candidate.from, candidate.to)) {\n return {\n ok: false,\n reason: \"That connection would create a cycle. The graph must stay acyclic (DAG).\",\n };\n }\n return { ok: true, graph: { ...graph, edges: [...graph.edges, candidate] } };\n}\n\n/** Remove a node and every edge incident to it. Returns a new graph. */\nexport function removeNode<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n nodeId: string,\n): G {\n return {\n ...graph,\n nodes: graph.nodes.filter((n) => n.id !== nodeId),\n edges: graph.edges.filter((e) => e.from !== nodeId && e.to !== nodeId),\n };\n}\n\n/** Remove one edge identified by its injected stable identity. */\nexport function removeFlowEdge<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(\n graph: G,\n flowEdgeId: string,\n edgeIdentity: EdgeIdentity<E>,\n): G {\n return {\n ...graph,\n edges: graph.edges.filter((e) => edgeIdentity(e) !== flowEdgeId),\n };\n}\n","\"use client\";\n\n/**\n * <NodeGraphCanvas> — generic interactive editor for any acyclic graph that\n * conforms to `@nebutra/graph-model` (`GraphNode` / `GraphEdge`).\n *\n * Domain-free: it imports NO feature package. The caller injects how to make\n * an edge from a connection (`makeEdge`), an edge's stable identity\n * (`edgeIdentity`), and how to present a node (`renderNode`). The reel\n * binding lives in `@nebutra/reel/canvas`. The graph is the single source of\n * truth; every gesture yields a *new* immutable graph (non-structural fields\n * preserved) through `onChange`. Cyclic connections are rejected via the\n * neutral `@nebutra/graph-model` guard.\n *\n * Chrome uses the shared `@lobehub/ui` `Button`; xyflow surfaces are themed\n * through xyflow CSS custom properties bound to Nebutra semantic tokens. The\n * custom node is intentionally not `Card`-wrapped (it owns its sizing + the\n * two connection `Handle`s) — see docs/capabilities/canvas/ANTI_PATTERNS.md.\n */\n\nimport type { Graph, GraphEdge, GraphNode } from \"@nebutra/graph-model\";\nimport { CrossSmall } from \"@nebutra/icons\";\nimport {\n Background,\n type Connection,\n Controls,\n type Edge,\n type EdgeChange,\n Handle,\n type Node,\n type NodeChange,\n type NodeProps,\n type NodeTypes,\n Panel,\n Position,\n ReactFlow,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { Button } from \"@lobehub/ui\";\nimport { cva } from \"class-variance-authority\";\nimport { type CSSProperties, type ReactNode, useId, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { AnimateIn } from \"./animate-in\";\nimport {\n applyNodePositions,\n type EdgeIdentity,\n type FlowNode,\n GRAPH_NODE_FLOW_TYPE,\n graphToFlow,\n type MakeEdge,\n removeFlowEdge,\n removeNode,\n tryAddEdge,\n} from \"./node-graph-canvas-adapter\";\n\n/** Domain-supplied presentation for one node. */\nexport interface NodeView {\n readonly label: string;\n readonly subtitle?: string;\n readonly icon?: ReactNode;\n /** Drives the accent border (e.g. \"has produced output\"). */\n readonly ready?: boolean;\n}\n\nexport interface NodeGraphCanvasProps<\n N extends GraphNode,\n E extends GraphEdge,\n G extends Graph<N, E>,\n> {\n /** The graph to render. Treated as the single source of truth. */\n readonly graph: G;\n /** Called with a new immutable graph after every accepted mutation. */\n readonly onChange: (next: G) => void;\n /** Stable identity for an edge (also used for dedupe + removal). */\n readonly edgeIdentity: EdgeIdentity<E>;\n /** Build a domain edge from a connection, or veto it (return null). */\n readonly makeEdge: MakeEdge<E>;\n /** Map a node to its visual presentation. */\n readonly renderNode: (node: N) => NodeView;\n /** When true, the canvas is view/pan/zoom only — no edits. */\n readonly readOnly?: boolean;\n /** Optional extra class on the outer container. */\n readonly className?: string;\n}\n\nconst XYFLOW_TOKEN_THEME: CSSProperties = {\n [\"--xy-background-pattern-color\" as string]: \"var(--neutral-6)\",\n [\"--xy-edge-stroke\" as string]: \"var(--neutral-8)\",\n [\"--xy-connectionline-stroke\" as string]: \"var(--neutral-8)\",\n [\"--xy-handle-background-color\" as string]: \"var(--neutral-9)\",\n [\"--xy-handle-border-color\" as string]: \"var(--neutral-7)\",\n [\"--xy-controls-button-background-color\" as string]: \"var(--neutral-2)\",\n [\"--xy-controls-button-border-color\" as string]: \"var(--neutral-7)\",\n [\"--xy-controls-button-color\" as string]: \"var(--neutral-11)\",\n};\n\nconst nodeCardVariants = cva(\n \"min-w-[160px] rounded-[var(--radius-lg)] border bg-neutral-2 px-3 py-2 text-neutral-12 shadow-sm transition-colors\",\n {\n variants: { ready: { true: \"border-success\", false: \"border-neutral-7\" } },\n defaultVariants: { ready: false },\n },\n);\n\ntype RenderedGraphFlowNode = Node<\n {\n node: GraphNode;\n view: NodeView;\n },\n typeof GRAPH_NODE_FLOW_TYPE\n>;\n\nfunction GraphNodeCard({ data }: NodeProps<RenderedGraphFlowNode>) {\n const view = data.view;\n\n return (\n <div className={nodeCardVariants({ ready: view.ready ?? false })}>\n <Handle type=\"target\" position={Position.Left} />\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-neutral-11 uppercase tracking-wide\">\n {view.icon}\n {view.label}\n </div>\n {view.subtitle ? <div className=\"mt-0.5 text-sm text-neutral-12\">{view.subtitle}</div> : null}\n <Handle type=\"source\" position={Position.Right} />\n </div>\n );\n}\n\nconst NODE_TYPES = {\n [GRAPH_NODE_FLOW_TYPE]: GraphNodeCard,\n} satisfies NodeTypes;\n\nconst REACT_FLOW_PRO_OPTIONS = { hideAttribution: true };\n\nexport function NodeGraphCanvas<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>({\n graph,\n onChange,\n edgeIdentity,\n makeEdge,\n renderNode,\n readOnly = false,\n className,\n}: NodeGraphCanvasProps<N, E, G>) {\n const statusId = useId();\n const [rejection, setRejection] = useState<string | null>(null);\n\n const { nodes: graphNodes, edges } = graphToFlow(graph, edgeIdentity);\n const nodes = graphNodes.map((node) => ({\n ...node,\n data: {\n ...node.data,\n view: renderNode(node.data.node),\n },\n }));\n\n const onNodesChange = (changes: NodeChange[]) => {\n if (readOnly) return;\n const removed = changes.filter(\n (c): c is NodeChange & { type: \"remove\"; id: string } => c.type === \"remove\",\n );\n if (removed.length > 0) {\n let next = graph;\n for (const r of removed) next = removeNode(next, r.id);\n onChange(next);\n return;\n }\n const positional = changes.some((c) => c.type === \"position\" && c.dragging === false);\n if (positional) {\n const moved = nodes.map((n) => {\n const change = changes.find((c) => c.type === \"position\" && c.id === n.id);\n if (change && change.type === \"position\" && change.position) {\n return { ...n, position: change.position } as FlowNode<N>;\n }\n return n as FlowNode<N>;\n });\n onChange(applyNodePositions(graph, moved));\n }\n };\n\n const onEdgesChange = (changes: EdgeChange[]) => {\n if (readOnly) return;\n const removed = changes.filter(\n (c): c is EdgeChange & { type: \"remove\"; id: string } => c.type === \"remove\",\n );\n if (removed.length === 0) return;\n let next = graph;\n for (const r of removed) next = removeFlowEdge(next, r.id, edgeIdentity);\n onChange(next);\n };\n\n const onConnect = (connection: Connection) => {\n if (readOnly) return;\n const result = tryAddEdge(graph, connection, { makeEdge, edgeIdentity });\n if (result.ok) {\n setRejection(null);\n onChange(result.graph);\n } else {\n setRejection(result.reason);\n }\n };\n\n return (\n <AnimateIn preset=\"emerge\">\n <div\n style={XYFLOW_TOKEN_THEME}\n className={cn(\n \"relative h-[480px] w-full overflow-hidden rounded-[var(--radius-xl)] border border-neutral-7 bg-neutral-1\",\n className,\n )}\n >\n <ReactFlowProvider>\n <ReactFlow\n nodes={nodes as Node[]}\n edges={edges as Edge[]}\n nodeTypes={NODE_TYPES}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onConnect={onConnect}\n nodesDraggable={!readOnly}\n nodesConnectable={!readOnly}\n elementsSelectable={!readOnly}\n fitView\n proOptions={REACT_FLOW_PRO_OPTIONS}\n >\n <Background color=\"var(--neutral-6)\" />\n <Controls showInteractive={!readOnly} />\n {rejection ? (\n <Panel position=\"top-center\">\n <div\n id={statusId}\n role=\"alert\"\n aria-live=\"assertive\"\n className=\"flex items-center gap-2 rounded-[var(--radius-md)] border border-destructive bg-destructive/10 px-3 py-2 text-sm text-destructive\"\n >\n <span>{rejection}</span>\n <Button\n size=\"small\"\n type=\"text\"\n icon={<CrossSmall size={14} />}\n aria-label=\"Dismiss connection error\"\n onClick={() => setRejection(null)}\n >\n Dismiss\n </Button>\n </div>\n </Panel>\n ) : null}\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n </AnimateIn>\n );\n}\n","\"use client\";\n\nimport { CheckCircle as CheckCircle2, PlayCircle } from \"@nebutra/icons\";\nimport Image from \"next/image\";\nimport type * as React from \"react\";\nimport { Dialog, DialogContent, DialogTrigger } from \"../primitives/dialog\";\nimport { motion, useReducedMotion } from \"../shared/animation/motion\";\nimport { cn } from \"../utils/cn\";\n\ntype MotionVariants = NonNullable<React.ComponentProps<typeof motion.div>[\"variants\"]>;\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ChecklistItem {\n /** Unique identifier for the item */\n id: number | string;\n /** Main text content */\n text: string;\n /** Optional helper text displayed below */\n helperText?: string;\n /** Optional link displayed after helper text */\n helperLink?: {\n href: string;\n text: string;\n };\n}\n\nexport interface OnboardingChecklistProps {\n /** Main heading for the checklist */\n title: string;\n /** Description displayed below the title */\n description: string;\n /** Array of checklist items to display */\n items: ChecklistItem[];\n /** URL for the video thumbnail image */\n videoThumbnailUrl: string;\n /** Embed URL for the video (YouTube, Vimeo, etc.) */\n videoUrl: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// Animation Variants\n// =============================================================================\n\nconst containerVariants: MotionVariants = {\n hidden: { opacity: 0, y: 20 },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n duration: 0.5,\n ease: \"easeOut\",\n when: \"beforeChildren\",\n staggerChildren: 0.1,\n },\n },\n};\n\nconst itemVariants: MotionVariants = {\n hidden: { opacity: 0, x: -20 },\n visible: {\n opacity: 1,\n x: 0,\n transition: {\n duration: 0.4,\n ease: \"easeOut\",\n },\n },\n};\n\nconst reducedContainerVariants: MotionVariants = {\n hidden: { opacity: 1 },\n visible: {\n opacity: 1,\n transition: { duration: 0 },\n },\n};\n\nconst reducedItemVariants: MotionVariants = {\n hidden: { opacity: 1 },\n visible: {\n opacity: 1,\n transition: { duration: 0 },\n },\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * OnboardingChecklist - Animated checklist with video guide\n *\n * @description\n * A responsive onboarding component that displays a checklist of items\n * alongside a video thumbnail that opens in a modal dialog.\n *\n * @example Basic usage\n * ```tsx\n * <OnboardingChecklist\n * title=\"Get Started\"\n * description=\"Complete these steps to set up your account\"\n * items={[\n * { id: 1, text: \"Create your profile\" },\n * { id: 2, text: \"Add your first project\" },\n * {\n * id: 3,\n * text: \"Invite team members\",\n * helperText: \"Need help?\",\n * helperLink: { href: \"/docs\", text: \"Read the guide\" }\n * },\n * ]}\n * videoThumbnailUrl=\"https://example.com/thumbnail.jpg\"\n * videoUrl=\"https://youtube.com/embed/xxx\"\n * />\n * ```\n */\nexport function OnboardingChecklist({\n title,\n description,\n items,\n videoThumbnailUrl,\n videoUrl,\n className,\n}: OnboardingChecklistProps) {\n const shouldReduceMotion = useReducedMotion();\n const activeContainerVariants = shouldReduceMotion ? reducedContainerVariants : containerVariants;\n const activeItemVariants = shouldReduceMotion ? reducedItemVariants : itemVariants;\n\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n variants={activeContainerVariants}\n className={cn(\n \"w-full max-w-4xl mx-auto bg-card text-card-foreground border rounded-[var(--radius-2xl)] shadow-sm p-8 overflow-hidden\",\n className,\n )}\n >\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8 items-center\">\n {/* Left Side: Title and Checklist */}\n <div className=\"flex flex-col\">\n <h2 className=\"text-2xl font-bold tracking-tight\">{title}</h2>\n <p className=\"mt-2 text-muted-foreground\">{description}</p>\n <ul className=\"mt-6 grid grid-cols-1 sm:grid-cols-2 gap-x-8 gap-y-4\">\n {items.map((item) => (\n <motion.li key={item.id} variants={activeItemVariants} className=\"flex flex-col\">\n <div className=\"flex items-start\">\n <CheckCircle2 className=\"h-5 w-5 text-green-500 mt-0.5 flex-shrink-0\" />\n <span className=\"ml-3 text-sm font-medium\">{item.text}</span>\n </div>\n {item.helperText && item.helperLink && (\n <div className=\"ml-8 mt-1 text-xs text-muted-foreground\">\n {item.helperText}{\" \"}\n <a\n href={item.helperLink.href}\n className=\"text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-[var(--radius-sm)]\"\n >\n {item.helperLink.text}\n </a>\n </div>\n )}\n </motion.li>\n ))}\n </ul>\n </div>\n\n {/* Right Side: Video Thumbnail */}\n <motion.div\n variants={activeItemVariants}\n className=\"relative group rounded-[var(--radius-lg)] overflow-hidden cursor-pointer w-full aspect-video\"\n >\n <Dialog>\n <DialogTrigger asChild>\n <button\n type=\"button\"\n className=\"w-full h-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-[var(--radius-lg)]\"\n >\n <Image\n src={videoThumbnailUrl}\n alt=\"Video guide thumbnail\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105 motion-reduce:transition-none motion-reduce:group-hover:scale-100\"\n fill\n />\n <div className=\"absolute inset-0 bg-black/30 flex items-center justify-center\">\n <PlayCircle className=\"h-16 w-16 text-white/80 transform transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 group-hover:scale-110 group-hover:text-white motion-reduce:transition-none motion-reduce:group-hover:scale-100\" />\n </div>\n </button>\n </DialogTrigger>\n <DialogContent className=\"max-w-3xl p-0 border-0\">\n <div className=\"aspect-video\">\n <iframe\n src={videoUrl}\n title=\"Onboarding Video Guide\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n className=\"w-full h-full rounded-[var(--radius-lg)]\"\n />\n </div>\n </DialogContent>\n </Dialog>\n </motion.div>\n </div>\n </motion.div>\n );\n}\n","/**\n * Input Component Tokens — Layer 3\n *\n * Component-level sizing and interaction constants. Input consumes semantic\n * colors at runtime and only derives dimensions from primitive tokens here.\n */\n\nimport {\n primitiveFontSize,\n primitiveRadius,\n primitiveSizing,\n primitiveSpacing,\n} from \"../primitive\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport const inputTokens = {\n sizes: {\n sm: {\n height: primitiveSizing.sm,\n paddingX: primitiveSpacing[2],\n fontSize: primitiveFontSize.xs,\n radius: primitiveRadius.md,\n affixInset: primitiveSpacing[2],\n affixWidth: primitiveSizing.sm,\n controlInset: primitiveSpacing[2] - primitiveSpacing[1] / 2,\n controlSize: primitiveSizing.xs,\n controlIconSize: primitiveSizing.xs - primitiveSpacing[2],\n iconSize: primitiveFontSize.sm,\n },\n md: {\n height: primitiveSizing.md,\n paddingX: primitiveSpacing[3],\n fontSize: primitiveFontSize.sm,\n radius: primitiveRadius.md,\n affixInset: primitiveSpacing[3],\n affixWidth: primitiveSizing.sm + primitiveSpacing[1],\n controlInset: primitiveSpacing[2],\n controlSize: primitiveSizing.tiny,\n controlIconSize: primitiveSizing.tiny - primitiveSpacing[2],\n iconSize: primitiveFontSize.base,\n },\n lg: {\n height: primitiveSizing.lg,\n paddingX: primitiveSpacing[4],\n fontSize: primitiveFontSize.base,\n radius: primitiveRadius.lg,\n affixInset: primitiveSpacing[4],\n affixWidth: primitiveSizing.md,\n controlInset: primitiveSpacing[3],\n controlSize: primitiveSizing.tiny,\n controlIconSize: primitiveSizing.tiny - primitiveSpacing[2],\n iconSize: primitiveFontSize.base,\n },\n },\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 { 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 { Input as BaseInput } from \"@base-ui/react/input\";\nimport { Eye, EyeOff, LoaderCircle as Loader2, Cross as X } from \"@nebutra/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { type InputSize, inputTokens } from \"../tokens/components/input\";\nimport { cn } from \"../utils/cn\";\nimport { formControlFocusClassNames, formControlInvalidClassNames } from \"./form-control\";\nimport { Kbd } from \"./kbd\";\n\ntype InputCssVars = React.CSSProperties & {\n \"--input-height\"?: string;\n \"--input-padding-x\"?: string;\n \"--input-padding-left\"?: string;\n \"--input-padding-right\"?: string;\n \"--input-font-size\"?: string;\n \"--input-radius\"?: string;\n \"--input-affix-inset\"?: string;\n \"--input-control-inset\"?: string;\n \"--input-control-size\"?: string;\n \"--input-control-icon-size\"?: string;\n \"--input-icon-size\"?: string;\n \"--input-focus-ring-width\"?: string;\n};\n\nconst inputVariants = cva(\n [\n \"flex h-[var(--input-height)] w-full rounded-[var(--input-radius)] border border-input bg-background\",\n \"px-[var(--input-padding-x)] text-[length:var(--input-font-size)] text-foreground shadow-xs\",\n \"transition-[background-color,border-color,box-shadow,color] duration-micro ease-out\",\n \"placeholder:text-muted-foreground\",\n formControlFocusClassNames.input,\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"read-only:bg-muted/70 read-only:cursor-default\",\n \"file:h-full file:border-0 file:border-e file:border-solid file:border-input file:bg-transparent\",\n \"file:me-[var(--input-padding-x)] file:pe-[var(--input-padding-x)] file:text-[length:var(--input-font-size)] file:font-medium file:text-foreground\",\n formControlInvalidClassNames.input,\n \"[&[type=search]::-webkit-search-cancel-button]:appearance-none\",\n \"[&[type=search]::-webkit-search-decoration]:appearance-none\",\n \"[&[type=search]::-webkit-search-results-button]:appearance-none\",\n \"[&[type=search]::-webkit-search-results-decoration]:appearance-none\",\n ].join(\" \"),\n {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n affix: {\n none: \"\",\n prefix: \"pl-[var(--input-padding-left)]\",\n suffix: \"pr-[var(--input-padding-right)]\",\n both: \"pl-[var(--input-padding-left)] pr-[var(--input-padding-right)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n affix: \"none\",\n },\n },\n);\n\nconst affixVariants = cva(\n [\n \"pointer-events-none absolute top-1/2 flex -translate-y-1/2 items-center text-muted-foreground\",\n \"[&_svg:not([class*=size-])]:size-[var(--input-icon-size)]\",\n ].join(\" \"),\n {\n variants: {\n side: {\n prefix: \"left-[var(--input-affix-inset)]\",\n suffix: \"right-[var(--input-affix-inset)]\",\n },\n },\n },\n);\n\nconst inputControlButtonVariants = cva(\n [\n \"absolute right-[var(--input-control-inset)] top-1/2 flex size-[var(--input-control-size)] -translate-y-1/2 items-center justify-center\",\n \"rounded-[var(--radius-sm)] text-muted-foreground transition-colors duration-micro ease-out\",\n \"hover:bg-accent hover:text-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:size-[var(--input-control-icon-size)]\",\n ].join(\" \"),\n);\n\nconst fieldMessageVariants = cva(\"text-xs\", {\n variants: {\n tone: {\n description: \"text-muted-foreground\",\n error: \"font-medium text-destructive\",\n },\n },\n});\n\ntype NativeInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"prefix\" | \"size\">;\n\ntype LabelledInputProps = {\n /** Visible label. Requires `id` so the label and input remain associated. */\n label: string;\n id: string;\n};\n\ntype UnlabelledInputProps = {\n label?: undefined;\n id?: string;\n};\n\ntype InputOwnProps = {\n /** Visual size variant. Uses Nebutra's compact form row scale. */\n size?: InputSize;\n /** Non-interactive adornment rendered inside the left edge. */\n prefix?: React.ReactNode;\n /** Non-interactive adornment rendered inside the right edge. Hidden by clear/shortcut controls. */\n suffix?: React.ReactNode;\n /** Show a clear button when the field has a value. */\n clearable?: boolean;\n /** Called after the clear button or Escape clears the field. */\n onClear?: () => void;\n /** Value-first change callback for consumers that do not need the native event. */\n onValueChange?: (value: string) => void;\n /** Visual shortcut hint, e.g. \"⌘K\". Dirty search fields show Esc instead. */\n shortcut?: string;\n /** Show an async spinner on the right side without disabling the field. */\n loading?: boolean;\n /** Adds a tokenized password visibility control when `type=\"password\"`. */\n revealable?: boolean;\n /** Accessible label for the password visibility control when the value is hidden. */\n revealLabel?: string;\n /** Accessible label for the password visibility control when the value is visible. */\n hideLabel?: string;\n /** Clear the current value when Escape is pressed. Defaults to true for search inputs. */\n clearOnEscape?: boolean;\n /** Helper text associated with the input through aria-describedby. */\n description?: string;\n /** Boolean marks invalid state; string also renders an inline error message. */\n error?: string | boolean;\n /** Applied to the control wrapper when affixes or control buttons are rendered. */\n wrapperClassName?: string;\n /** Applied to the label/helper/error field wrapper. */\n fieldClassName?: string;\n};\n\nexport type InputProps = NativeInputProps &\n InputOwnProps &\n (LabelledInputProps | UnlabelledInputProps) &\n VariantProps<typeof inputVariants>;\n\nfunction assignRef<T>(ref: React.Ref<T> | undefined, value: T | null) {\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n\n if (ref) {\n ref.current = value;\n }\n}\n\nfunction getInputStyle(size: InputSize, style: React.CSSProperties | undefined): InputCssVars {\n const token = inputTokens.sizes[size];\n\n return {\n \"--input-height\": `${token.height}px`,\n \"--input-padding-x\": `${token.paddingX}px`,\n \"--input-padding-left\": `${token.affixWidth}px`,\n \"--input-padding-right\": `${token.affixWidth}px`,\n \"--input-font-size\": `${token.fontSize}px`,\n \"--input-radius\": `${token.radius}px`,\n \"--input-affix-inset\": `${token.affixInset}px`,\n \"--input-control-inset\": `${token.controlInset}px`,\n \"--input-control-size\": `${token.controlSize}px`,\n \"--input-control-icon-size\": `${token.controlIconSize}px`,\n \"--input-icon-size\": `${token.iconSize}px`,\n \"--input-focus-ring-width\": `${inputTokens.focusRingWidth}px`,\n borderRadius: \"var(--input-radius)\",\n outline: \"none\",\n ...style,\n };\n}\n\nfunction getAffixMode(prefix: React.ReactNode, hasRightAdornment: boolean) {\n if (prefix != null && hasRightAdornment) return \"both\";\n if (prefix != null) return \"prefix\";\n if (hasRightAdornment) return \"suffix\";\n return \"none\";\n}\n\nfunction isInvalid(\n error: string | boolean | undefined,\n ariaInvalid: NativeInputProps[\"aria-invalid\"],\n) {\n return (\n error === true || typeof error === \"string\" || ariaInvalid === true || ariaInvalid === \"true\"\n );\n}\n\nfunction isTextAffix(value: React.ReactNode): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction joinDescriptionIds(...ids: Array<string | undefined>) {\n return ids.filter(Boolean).join(\" \") || undefined;\n}\n\nconst Input = ({\n ref: forwardedRef,\n ...props\n}: InputProps & { ref?: React.Ref<HTMLInputElement> | undefined }) => {\n const {\n className,\n type = \"text\",\n size = \"md\",\n prefix,\n suffix,\n clearable,\n onClear,\n onValueChange,\n shortcut,\n loading,\n revealable,\n revealLabel = \"Show password\",\n hideLabel = \"Hide password\",\n clearOnEscape,\n wrapperClassName,\n fieldClassName,\n label,\n description,\n error,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n disabled,\n style,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n id,\n ...rest\n } = props;\n\n const isControlled = value !== undefined;\n const baseId = React.useId();\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const descriptionId = description && id ? `${id}-description` : undefined;\n const errorId = typeof error === \"string\" && id ? `${id}-error` : undefined;\n const prefixDescriptionId = isTextAffix(prefix) ? `${id ?? baseId}-prefix` : undefined;\n const suffixDescriptionId = isTextAffix(suffix) ? `${id ?? baseId}-suffix` : undefined;\n const [internalValue, setInternalValue] = React.useState(\n typeof defaultValue === \"string\" || typeof defaultValue === \"number\"\n ? String(defaultValue)\n : \"\",\n );\n const [passwordVisible, setPasswordVisible] = React.useState(false);\n\n const currentValue = isControlled ? String(value ?? \"\") : internalValue;\n const clearOnEscapeEnabled = clearOnEscape ?? type === \"search\";\n const canRevealPassword = Boolean(revealable && type === \"password\");\n const showClear = Boolean(clearable && !disabled && currentValue.length > 0 && !loading);\n const showShortcut = Boolean(shortcut && !loading && !showClear);\n const showSpinner = Boolean(loading);\n const showPasswordToggle = Boolean(canRevealPassword && !loading && !showClear && !showShortcut);\n const hasRightAdornment =\n showClear || showShortcut || showSpinner || showPasswordToggle || suffix != null;\n const hasControlWrapper = prefix != null || hasRightAdornment;\n const affix = getAffixMode(prefix, hasRightAdornment);\n const resolvedInvalid = isInvalid(error, ariaInvalid);\n const describedBy = joinDescriptionIds(\n ariaDescribedBy,\n prefixDescriptionId,\n suffixDescriptionId,\n descriptionId,\n errorId,\n );\n const valueProps: Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"defaultValue\" | \"value\"\n > = isControlled\n ? { value }\n : clearable || shortcut || clearOnEscapeEnabled\n ? { value: currentValue }\n : { defaultValue };\n\n const setInputRef = React.useCallback(\n (node: HTMLElement | null) => {\n const input = node instanceof HTMLInputElement ? node : null;\n inputRef.current = input;\n assignRef(forwardedRef, input);\n },\n [forwardedRef],\n );\n\n const emitNativeInput = React.useCallback(\n (nextValue: string) => {\n const input = inputRef.current;\n\n if (!input) {\n if (!isControlled) setInternalValue(nextValue);\n onValueChange?.(nextValue);\n return;\n }\n\n const valueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\",\n )?.set;\n\n valueSetter?.call(input, nextValue);\n input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n },\n [isControlled, onValueChange],\n );\n\n const syncInputValue = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(event.currentTarget.value);\n onValueChange?.(event.currentTarget.value);\n onChange?.(event);\n },\n [isControlled, onChange, onValueChange],\n );\n\n const handleClear = React.useCallback(() => {\n emitNativeInput(\"\");\n onClear?.();\n inputRef.current?.focus();\n }, [emitNativeInput, onClear]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n !clearOnEscapeEnabled ||\n currentValue.length === 0 ||\n disabled\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n handleClear();\n },\n [clearOnEscapeEnabled, currentValue.length, disabled, handleClear, onKeyDown],\n );\n\n const control = (\n <BaseInput\n ref={setInputRef}\n data-slot=\"input\"\n type={canRevealPassword && passwordVisible ? \"text\" : type}\n id={id}\n disabled={disabled}\n aria-invalid={resolvedInvalid || undefined}\n aria-describedby={describedBy}\n aria-busy={loading || undefined}\n className={cn(\n inputVariants({ size, affix }),\n type === \"file\" && \"p-0 pr-[var(--input-padding-x)] text-muted-foreground\",\n className,\n )}\n style={getInputStyle(size, style)}\n onChange={syncInputValue}\n onKeyDown={handleKeyDown}\n {...rest}\n {...valueProps}\n />\n );\n\n const inputControl = hasControlWrapper ? (\n <div\n data-slot=\"input-wrapper\"\n className={cn(\"relative flex items-center\", wrapperClassName)}\n style={getInputStyle(size, undefined)}\n >\n {prefix != null && (\n <span\n id={prefixDescriptionId}\n aria-hidden={!isTextAffix(prefix)}\n className={affixVariants({ side: \"prefix\" })}\n >\n {prefix}\n </span>\n )}\n\n {control}\n\n {showSpinner && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-[var(--input-control-inset)] top-1/2 flex size-[var(--input-control-size)] -translate-y-1/2 items-center justify-center text-muted-foreground\"\n style={getInputStyle(size, undefined)}\n >\n <Loader2 className=\"size-[var(--input-control-icon-size)] animate-spin\" />\n </span>\n )}\n\n {showClear && (\n <button\n type=\"button\"\n aria-label=\"Clear input\"\n disabled={disabled}\n className={inputControlButtonVariants()}\n style={getInputStyle(size, undefined)}\n onClick={handleClear}\n >\n <X aria-hidden=\"true\" />\n </button>\n )}\n\n {showShortcut && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-[var(--input-control-inset)] top-1/2 flex -translate-y-1/2 items-center\"\n style={getInputStyle(size, undefined)}\n >\n <Kbd small>{currentValue.length > 0 ? \"Esc\" : shortcut}</Kbd>\n </span>\n )}\n\n {showPasswordToggle && (\n <button\n type=\"button\"\n aria-label={passwordVisible ? hideLabel : revealLabel}\n aria-pressed={passwordVisible}\n disabled={disabled}\n className={inputControlButtonVariants()}\n style={getInputStyle(size, undefined)}\n onClick={() => {\n setPasswordVisible((visible) => !visible);\n inputRef.current?.focus();\n }}\n >\n {passwordVisible ? <EyeOff aria-hidden=\"true\" /> : <Eye aria-hidden=\"true\" />}\n </button>\n )}\n\n {suffix != null && !showClear && !showShortcut && !showSpinner && !showPasswordToggle && (\n <span\n id={suffixDescriptionId}\n aria-hidden={!isTextAffix(suffix)}\n className={affixVariants({ side: \"suffix\" })}\n >\n {suffix}\n </span>\n )}\n </div>\n ) : (\n control\n );\n\n if (!label && !description && typeof error !== \"string\") {\n return inputControl;\n }\n\n return (\n <div\n data-slot=\"input-field\"\n className={cn(\"grid gap-[var(--input-field-gap)]\", fieldClassName)}\n style={\n {\n \"--input-field-gap\": `${inputTokens.fieldGap}px`,\n } as React.CSSProperties\n }\n >\n {label && (\n <label htmlFor={id} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n\n {inputControl}\n\n {description && !error && (\n <p id={descriptionId} className={fieldMessageVariants({ tone: \"description\" })}>\n {description}\n </p>\n )}\n\n {typeof error === \"string\" && (\n <p id={errorId} role=\"alert\" className={fieldMessageVariants({ tone: \"error\" })}>\n {error}\n </p>\n )}\n </div>\n );\n};\nInput.displayName = \"Input\";\n\nexport { Input, inputControlButtonVariants, inputVariants };\n","\"use client\";\n\nimport {\n Check,\n DoubleCheck as CheckCheck,\n MoreHorizontal,\n PaperAirplane as Send,\n FacePlus as SmilePlus,\n Users,\n} from \"@nebutra/icons\";\nimport Image from \"next/image\";\nimport type React from \"react\";\nimport { useState } from \"react\";\nimport { Input } from \"../primitives/input\";\nimport { cn } from \"../utils/cn\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ChatSender {\n /** Display name */\n name: string;\n /** Avatar URL */\n avatar: string;\n /** Online status */\n isOnline: boolean;\n}\n\nexport interface ChatReaction {\n /** Emoji character */\n emoji: string;\n /** Number of reactions */\n count: number;\n /** Whether current user has reacted */\n reacted: boolean;\n}\n\nexport interface ChatMessage {\n /** Unique message identifier */\n id: string;\n /** Message text content */\n content: string;\n /** Sender information */\n sender: ChatSender;\n /** Display timestamp */\n timestamp: string;\n /** Delivery status */\n status: \"sent\" | \"delivered\" | \"read\";\n /** Optional reactions */\n reactions?: ChatReaction[];\n}\n\nexport interface TeamChatProps {\n /** Chat/channel name */\n chatName: string;\n /** Optional tagline under the name */\n tagline?: string;\n /** Array of messages to display */\n messages: ChatMessage[];\n /** Placeholder text for input */\n inputPlaceholder?: string;\n /** Callback when send button clicked */\n onSendMessage?: (message: string) => void;\n /** Callback when reaction clicked */\n onReactionClick?: (messageId: string, emoji: string) => void;\n /** Callback when more options clicked */\n onMoreOptions?: () => void;\n /** Additional CSS classes */\n className?: string;\n}\n\n// =============================================================================\n// Sub-components\n// =============================================================================\n\ninterface AvatarProps {\n src: string;\n alt: string;\n isOnline?: boolean;\n size?: \"sm\" | \"md\";\n}\n\nfunction Avatar({ src, alt, isOnline, size = \"md\" }: AvatarProps) {\n const sizeClasses = size === \"sm\" ? \"w-10 h-10\" : \"w-10 h-10\";\n\n return (\n <div className=\"relative\">\n <Image\n src={src}\n alt={alt}\n className={cn(\n sizeClasses,\n \"rounded-full ring-1 ring-gray-400 dark:ring-gray-600 object-cover\",\n )}\n width={400}\n height={400}\n />\n {isOnline !== undefined && (\n <span\n className={cn(\n \"absolute bottom-0 right-0 w-3 h-3 rounded-full ring-2 ring-white dark:ring-black\",\n isOnline ? \"bg-green-500\" : \"bg-[var(--neutral-8)]\",\n )}\n />\n )}\n </div>\n );\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * TeamChat - Team messaging interface with participant sidebar\n *\n * @description\n * A full-featured team chat UI component with participant list,\n * message display with reactions, and message input.\n *\n * @example\n * ```tsx\n * <TeamChat\n * chatName=\"Engineering Team\"\n * tagline=\"Ship fast, ship often\"\n * messages={[\n * {\n * id: \"1\",\n * content: \"Hey team! Ready for standup?\",\n * sender: { name: \"Alice\", avatar: \"/alice.jpg\", isOnline: true },\n * timestamp: \"10:00 AM\",\n * status: \"read\",\n * },\n * ]}\n * onSendMessage={(msg) => console.log(msg)}\n * />\n * ```\n */\nexport function TeamChat({\n chatName,\n tagline = \"Collaborate creatively, deliver clearly.\",\n messages,\n inputPlaceholder = \"Write your message...\",\n onSendMessage,\n onReactionClick,\n onMoreOptions,\n className,\n}: TeamChatProps) {\n const [selectedSender, setSelectedSender] = useState<string | null>(null);\n const [inputValue, setInputValue] = useState(\"\");\n\n // Get unique senders from messages\n const uniqueSenders = Array.from(\n new Map(messages.map((m) => [m.sender.name, m.sender])).values(),\n );\n\n // Filter messages by selected sender or show all\n const filteredMessages = selectedSender\n ? messages.filter((m) => m.sender.name === selectedSender)\n : messages;\n\n const handleSend = () => {\n if (inputValue.trim() && onSendMessage) {\n onSendMessage(inputValue.trim());\n setInputValue(\"\");\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n\n return (\n <div\n className={cn(\n \"w-full max-w-5xl mx-auto p-6 bg-white dark:bg-black rounded-[var(--radius-3xl)] shadow-lg flex flex-col h-[550px] border border-border\",\n className,\n )}\n >\n {/* Header */}\n <header className=\"flex justify-between items-center border-b border-border pb-3 mb-6\">\n <div className=\"flex items-center gap-3\">\n <Users className=\"w-8 h-8 text-black\" />\n <div>\n <h2 className=\"text-2xl font-semibold text-black\">{chatName}</h2>\n {tagline && <p className=\"italic text-sm text-muted-foreground\">{tagline}</p>}\n </div>\n </div>\n <button\n type=\"button\"\n aria-label=\"More options\"\n onClick={onMoreOptions}\n className=\"p-2 rounded-[var(--radius-lg)] hover:bg-muted transition\"\n >\n <MoreHorizontal className=\"w-6 h-6 text-muted-foreground\" />\n </button>\n </header>\n\n {/* Body */}\n <main className=\"flex flex-1 overflow-hidden rounded-[var(--radius-xl)] border border-border\">\n {/* Participants List */}\n <aside className=\"w-56 bg-muted border-r border-border p-4 overflow-y-auto\">\n {uniqueSenders.map((sender) => {\n const isSelected = selectedSender === sender.name;\n return (\n <button\n type=\"button\"\n key={sender.name}\n onClick={() => setSelectedSender(isSelected ? null : sender.name)}\n className={cn(\n \"flex items-center gap-3 w-full p-3 mb-3 rounded-[var(--radius-lg)] transition-colors\",\n isSelected\n ? \"bg-black text-white dark:text-black\"\n : \"hover:bg-muted text-foreground\",\n )}\n >\n <Avatar src={sender.avatar} alt={sender.name} isOnline={sender.isOnline} />\n <span className=\"text-left font-medium truncate\">{sender.name}</span>\n </button>\n );\n })}\n </aside>\n\n {/* Messages */}\n <section className=\"flex-1 p-6 overflow-y-auto bg-white dark:bg-black\">\n {filteredMessages.length === 0 ? (\n <p className=\"text-center text-muted-foreground\">No messages to display.</p>\n ) : (\n filteredMessages.map((message) => (\n <div key={message.id} className=\"mb-6 last:mb-0 group border-b border-border pb-4\">\n <div className=\"flex items-center gap-4 mb-2\">\n <Avatar src={message.sender.avatar} alt={message.sender.name} />\n <div>\n <p className=\"font-semibold text-black\">{message.sender.name}</p>\n <span className=\"text-xs text-muted-foreground\">{message.timestamp}</span>\n </div>\n </div>\n <p className=\"text-foreground text-lg mb-1\">{message.content}</p>\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-1\">\n {message.status === \"read\" && <CheckCheck className=\"w-5 h-5 text-green-500\" />}\n {message.status === \"delivered\" && <Check className=\"w-5 h-5\" />}\n <span>{message.timestamp}</span>\n </div>\n <div className=\"flex gap-2\">\n {message.reactions?.map((reaction) => (\n <button\n type=\"button\"\n key={reaction.emoji}\n onClick={() => onReactionClick?.(message.id, reaction.emoji)}\n className={cn(\n \"px-2 py-1 rounded-[var(--radius-md)] text-sm transition-colors\",\n reaction.reacted\n ? \"bg-[var(--neutral-5)] text-black\"\n : \"bg-muted text-muted-foreground\",\n \"hover:bg-muted\",\n )}\n >\n {reaction.emoji} {reaction.count}\n </button>\n ))}\n </div>\n </div>\n </div>\n ))\n )}\n </section>\n </main>\n\n {/* Footer */}\n <footer className=\"mt-6 flex items-center gap-4 border-t border-border pt-4\">\n <button\n type=\"button\"\n aria-label=\"Add emoji\"\n className=\"p-3 rounded-full bg-muted hover:bg-muted transition\"\n >\n <SmilePlus className=\"w-6 h-6 text-muted-foreground\" />\n </button>\n <Input\n type=\"text\"\n value={inputValue}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={inputPlaceholder}\n />\n <button\n type=\"button\"\n aria-label=\"Send message\"\n onClick={handleSend}\n className=\"p-3 rounded-full bg-black text-white dark:text-black hover:brightness-90 transition\"\n >\n <Send className=\"w-6 h-6\" />\n </button>\n </footer>\n </div>\n );\n}\n"]}