@dynamicnorway/react 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/dist/index.d.ts +432 -0
- package/dist/index.js +1705 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/button.tsx","../src/components/form-field.tsx","../src/components/input-styles.ts","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/select.tsx","../src/components/checkbox.tsx","../src/components/dialog.tsx","../src/components/card.tsx","../src/components/loading-spinner.tsx","../src/components/badge.tsx","../src/components/empty-state.tsx","../src/components/slide-over.tsx","../src/components/entity-form.tsx","../src/components/search-input.tsx","../src/components/search-bar.tsx","../src/components/breadcrumbs.tsx","../src/components/table.tsx","../src/components/tabs.tsx","../src/components/avatar.tsx","../src/components/dropdown-menu.tsx","../src/components/collapsible.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport React from \"react\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"danger\"\n | \"destructive\"\n | \"ghost\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n fullWidth?: boolean;\n ref?: React.Ref<HTMLButtonElement>;\n}\n\nconst buttonVariantClasses: Record<ButtonVariant, string> = {\n primary:\n \"bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500 border-transparent\",\n secondary:\n \"bg-background-secondary text-text-primary hover:bg-background-tertiary focus:ring-primary-500 border-border-primary\",\n outline:\n \"bg-transparent text-text-primary hover:bg-background-tertiary focus:ring-primary-500 border-border-primary\",\n danger:\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 border-transparent\",\n destructive:\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 border-transparent\",\n ghost:\n \"bg-transparent text-text-primary hover:bg-background-tertiary focus:ring-primary-500 border-transparent\",\n};\n\nconst buttonSizeClasses: Record<ButtonSize, string> = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-sm\",\n lg: \"px-6 py-3 text-base\",\n};\n\nexport const Button: React.FC<ButtonProps> = ({\n className = \"\",\n variant = \"primary\",\n size = \"md\",\n loading = false,\n fullWidth = false,\n disabled,\n children,\n ref,\n ...props\n}) => {\n return (\n <button\n ref={ref}\n disabled={disabled || loading}\n className={`\n inline-flex items-center justify-center\n font-medium rounded-md border\n focus:outline-none focus:ring-2 focus:ring-offset-2\n cursor-pointer\n disabled:opacity-50 disabled:cursor-not-allowed\n transition-colors\n ${buttonVariantClasses[variant]}\n ${buttonSizeClasses[size]}\n ${fullWidth ? \"w-full\" : \"\"}\n ${className}\n `.trim().replace(/\\s+/g, \" \")}\n {...props}\n >\n {loading && (\n <svg\n className=\"animate-spin -ml-1 mr-2 h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {children}\n </button>\n );\n};\nButton.displayName = \"Button\";\n","\"use client\";\n\nimport React, { useId } from \"react\";\n\ninterface FormFieldProps {\n label?: string;\n required?: boolean;\n error?: string;\n helperText?: string;\n className?: string;\n children: React.ReactNode;\n htmlFor?: string;\n}\n\nexport function FormField({\n label,\n required = false,\n error,\n helperText,\n className = \"\",\n children,\n htmlFor,\n}: FormFieldProps) {\n const generatedId = useId();\n const inputId = htmlFor || generatedId;\n\n return (\n <div className={`space-y-1 ${className}`}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium text-text-primary\"\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n {React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n id: inputId,\n \"aria-invalid\": !!error,\n \"aria-describedby\": error\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-helper`\n : undefined,\n })\n : children}\n {error && (\n <p\n id={`${inputId}-error`}\n className=\"text-sm text-red-600 dark:text-red-400\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {!error && helperText && (\n <p\n id={`${inputId}-helper`}\n className=\"text-sm text-text-secondary\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n","export const baseInputClasses = `\n w-full px-3 py-2 \n border rounded-md \n text-text-primary\n bg-background-secondary\n border-border-primary\n placeholder-text-tertiary\n focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500\n disabled:bg-background-tertiary disabled:cursor-not-allowed disabled:opacity-60\n transition-colors\n`.trim().replace(/\\s+/g, \" \");\n\nexport const errorInputClasses = `\n border-red-500 dark:border-red-500\n focus:ring-red-500 focus:border-red-500\n`.trim().replace(/\\s+/g, \" \");\n","\"use client\";\n\nimport React from \"react\";\nimport { baseInputClasses, errorInputClasses } from \"./input-styles\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n hasError?: boolean;\n ref?: React.Ref<HTMLInputElement>;\n}\n\nexport const Input: React.FC<InputProps> = ({\n className = \"\",\n hasError = false,\n onKeyDown,\n ref,\n ...props\n}) => {\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n e.preventDefault();\n e.currentTarget.select();\n }\n onKeyDown?.(e);\n };\n\n return (\n <input\n ref={ref}\n className={`${baseInputClasses} ${hasError ? errorInputClasses : \"\"} ${className}`}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n};\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport React from \"react\";\nimport { baseInputClasses, errorInputClasses } from \"./input-styles\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n hasError?: boolean;\n autoResize?: boolean;\n ref?: React.Ref<HTMLTextAreaElement>;\n}\n\nexport const Textarea: React.FC<TextareaProps> = ({\n className = \"\",\n hasError = false,\n autoResize = false,\n onChange,\n onKeyDown,\n ref,\n ...props\n}) => {\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (autoResize) {\n e.target.style.height = \"auto\";\n e.target.style.height = `${e.target.scrollHeight}px`;\n }\n onChange?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n e.preventDefault();\n e.currentTarget.select();\n }\n onKeyDown?.(e);\n };\n\n return (\n <textarea\n ref={ref}\n className={`${baseInputClasses} ${hasError ? errorInputClasses : \"\"} ${\n autoResize ? \"resize-none overflow-hidden\" : \"\"\n } ${className}`}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n};\nTextarea.displayName = \"Textarea\";\n","\"use client\";\n\nimport React from \"react\";\nimport { baseInputClasses, errorInputClasses } from \"./input-styles\";\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n hasError?: boolean;\n placeholder?: string;\n options?: Array<{ value: string; label: string; disabled?: boolean }>;\n ref?: React.Ref<HTMLSelectElement>;\n}\n\nexport const Select: React.FC<SelectProps> = ({\n className = \"\",\n hasError = false,\n placeholder,\n options,\n children,\n ref,\n ...props\n}) => {\n return (\n <select\n ref={ref}\n className={`${baseInputClasses} ${hasError ? errorInputClasses : \"\"} ${className}`}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options\n ? options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))\n : children}\n </select>\n );\n};\nSelect.displayName = \"Select\";\n","\"use client\";\n\nimport React, { useId } from \"react\";\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: string;\n ref?: React.Ref<HTMLInputElement>;\n}\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n className = \"\",\n label,\n id,\n ref,\n ...props\n}) => {\n const generatedId = useId();\n const checkboxId = id || generatedId;\n\n return (\n <div className={`flex items-center ${className}`}>\n <input\n ref={ref}\n type=\"checkbox\"\n id={checkboxId}\n className=\"h-4 w-4 rounded border-border-primary text-primary-600 focus:ring-primary-500 bg-background-secondary\"\n {...props}\n />\n {label && (\n <label htmlFor={checkboxId} className=\"ml-2 text-sm text-text-primary\">\n {label}\n </label>\n )}\n </div>\n );\n};\nCheckbox.displayName = \"Checkbox\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\ninterface DialogOverlayProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> {\n ref?: React.Ref<React.ElementRef<typeof DialogPrimitive.Overlay>>;\n}\n\nconst DialogOverlay: React.FC<DialogOverlayProps> = ({ className, ref, ...props }) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n);\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\ninterface DialogContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n ref?: React.Ref<React.ElementRef<typeof DialogPrimitive.Content>>;\n closeLabel?: string;\n}\n\nconst DialogContent: React.FC<DialogContentProps> = ({\n className,\n children,\n closeLabel = \"Close\",\n ref,\n ...props\n}) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\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 bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-full data-[state=open]:slide-in-from-left-full sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-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-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">{closeLabel}</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n);\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\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\ninterface DialogTitleProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> {\n ref?: React.Ref<React.ElementRef<typeof DialogPrimitive.Title>>;\n}\n\nconst DialogTitle: React.FC<DialogTitleProps> = ({ className, ref, ...props }) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n);\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\ninterface DialogDescriptionProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> {\n ref?: React.Ref<React.ElementRef<typeof DialogPrimitive.Description>>;\n}\n\nconst DialogDescription: React.FC<DialogDescriptionProps> = ({ className, ref, ...props }) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n);\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n variant?: \"danger\" | \"default\";\n loading?: boolean;\n loadingText?: string;\n}\n\nconst ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n open,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n variant = \"default\",\n loading = false,\n loadingText = \"Loading...\",\n}) => (\n <Dialog open={open} onOpenChange={(isOpen) => !isOpen && onClose()}>\n <DialogContent className=\"sm:max-w-[500px]\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{message}</DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <button\n onClick={onClose}\n disabled={loading}\n className=\"px-4 py-2 text-sm font-medium text-text-primary bg-background-secondary border border-border-primary rounded-md hover:bg-background-tertiary focus:outline-none focus:ring-2 focus:ring-primary-500 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {cancelText}\n </button>\n <button\n onClick={onConfirm}\n disabled={loading}\n className={`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed ${\n variant === \"danger\"\n ? \"bg-red-600 hover:bg-red-700 focus:ring-red-500\"\n : \"bg-primary-600 hover:bg-primary-700 focus:ring-primary-500\"\n }`}\n >\n {loading ? loadingText : confirmText}\n </button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n);\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n ConfirmDialog,\n};\n","\"use client\";\n\nimport React from \"react\";\n\nexport interface CardProps {\n children: React.ReactNode;\n variant?: \"default\" | \"interactive\";\n className?: string;\n onClick?: () => void;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement | HTMLButtonElement, CardProps>(\n ({ children, variant = \"default\", className = \"\", onClick }, ref) => {\n const baseStyles =\n \"bg-background-secondary rounded-lg shadow-sm border border-border-primary transition-all duration-150\";\n\n const variantStyles = {\n default: \"\",\n interactive:\n \"cursor-pointer hover:shadow-md hover:border-primary-300 dark:hover:border-primary-600\",\n };\n\n const buttonResetStyles = onClick\n ? \"w-full text-left p-0 m-0 font-inherit block appearance-none flex flex-col cursor-pointer\"\n : \"\";\n\n const Component = onClick ? \"button\" : \"div\";\n\n return (\n <Component\n ref={ref as React.Ref<HTMLDivElement & HTMLButtonElement>}\n className={`${baseStyles} ${variantStyles[variant]} ${buttonResetStyles} ${className}`}\n onClick={onClick}\n >\n {children}\n </Component>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ children, className = \"\" }) => (\n <div className={`px-6 py-4 border-b border-border-primary ${className}`}>{children}</div>\n);\n\nexport interface CardBodyProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const CardBody: React.FC<CardBodyProps> = ({ children, className = \"\" }) => (\n <div className={`px-6 py-4 flex flex-col ${className}`}>{children}</div>\n);\n\nexport interface CardFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const CardFooter: React.FC<CardFooterProps> = ({ children, className = \"\" }) => (\n <div className={`px-6 py-4 border-t border-border-primary ${className}`}>{children}</div>\n);\n","import React from \"react\";\n\nexport interface LoadingSpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport const LoadingSpinner: React.FC<LoadingSpinnerProps> = ({\n size = \"md\",\n className = \"\",\n}) => {\n const sizeStyles = {\n sm: \"w-4 h-4\",\n md: \"w-8 h-8\",\n lg: \"w-12 h-12\",\n };\n\n return (\n <svg\n className={`animate-spin ${sizeStyles[size]} text-primary-600 dark:text-primary-400 ${className}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n};\n\nexport const LoadingScreen: React.FC<{ message?: string }> = ({\n message = \"Loading...\",\n}) => (\n <div className=\"flex flex-col items-center justify-center min-h-[400px] space-y-4\">\n <LoadingSpinner size=\"lg\" />\n <p className=\"text-text-secondary\">{message}</p>\n </div>\n);\n","import React from \"react\";\n\nexport interface BadgeProps {\n children: React.ReactNode;\n variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = \"default\",\n size = \"md\",\n className = \"\",\n}) => {\n const baseStyles =\n \"inline-flex items-center justify-center font-medium rounded-full whitespace-nowrap\";\n\n const variantStyles = {\n default: \"bg-background-tertiary text-text-primary\",\n success: \"bg-primary-100 dark:bg-primary-900 text-primary-700 dark:text-primary-300\",\n warning: \"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300\",\n error: \"bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300\",\n info: \"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300\",\n };\n\n const sizeStyles = {\n sm: \"text-xs px-2 py-0.5\",\n md: \"text-sm px-2.5 py-1\",\n };\n\n return (\n <span\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${className}`}\n >\n {children}\n </span>\n );\n};\n","import React from \"react\";\n\nexport interface EmptyStateProps {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: {\n label: string;\n onClick: () => void;\n };\n className?: string;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n className = \"\",\n}) => (\n <div\n className={`flex flex-col items-center justify-center py-12 px-4 text-center ${className}`}\n >\n {icon && <div className=\"mb-4 text-text-tertiary\">{icon}</div>}\n <h3 className=\"text-lg font-semibold text-text-primary mb-2\">{title}</h3>\n {description && (\n <p className=\"text-sm text-text-secondary mb-6 max-w-md\">{description}</p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className=\"px-4 py-2 bg-primary-600 text-white rounded-md hover:bg-primary-700 transition-colors cursor-pointer\"\n >\n {action.label}\n </button>\n )}\n </div>\n);\n","\"use client\";\n\nimport React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"./dialog\";\nimport { cn } from \"../lib/utils\";\n\nexport interface SlideOverProps {\n open: boolean;\n onClose: () => void;\n title: string;\n description?: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n closeLabel?: string;\n}\n\nconst sizeClasses = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-4xl\",\n full: \"max-w-full\",\n};\n\nexport function SlideOver({\n open,\n onClose,\n title,\n description,\n children,\n footer,\n size = \"md\",\n closeLabel = \"Close\",\n}: SlideOverProps) {\n return (\n <Dialog open={open} onOpenChange={(isOpen) => !isOpen && onClose()}>\n <DialogContent className={cn(sizeClasses[size], \"max-h-[90vh] flex flex-col\")} closeLabel={closeLabel}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n <div className=\"flex-1 overflow-y-auto min-h-0 px-1\">{children}</div>\n {footer && <DialogFooter className=\"mt-4\">{footer}</DialogFooter>}\n </DialogContent>\n </Dialog>\n );\n}\n\nexport interface FormSlideOverProps extends Omit<SlideOverProps, \"footer\" | \"children\"> {\n children: React.ReactNode;\n submitText?: string;\n cancelText?: string;\n deleteText?: string;\n savingText?: string;\n deletingText?: string;\n unsavedChangesConfirm?: string;\n onSubmit: () => void;\n onDelete?: () => void;\n isSubmitting?: boolean;\n isDeleting?: boolean;\n hasChanges?: boolean;\n}\n\nexport function FormSlideOver({\n open,\n onClose,\n title,\n description,\n children,\n submitText = \"Save changes\",\n cancelText = \"Cancel\",\n deleteText = \"Delete\",\n savingText = \"Saving...\",\n deletingText = \"Deleting...\",\n unsavedChangesConfirm = \"You have unsaved changes. Are you sure you want to close?\",\n onSubmit,\n onDelete,\n isSubmitting = false,\n isDeleting = false,\n hasChanges = false,\n size = \"md\",\n closeLabel,\n}: FormSlideOverProps) {\n const handleClose = () => {\n if (hasChanges) {\n if (confirm(unsavedChangesConfirm)) {\n onClose();\n }\n } else {\n onClose();\n }\n };\n\n return (\n <SlideOver\n open={open}\n onClose={handleClose}\n title={title}\n description={description}\n size={size}\n closeLabel={closeLabel}\n footer={\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-between w-full gap-2\">\n {onDelete && (\n <button\n type=\"button\"\n onClick={onDelete}\n disabled={isDeleting || isSubmitting}\n className=\"w-full sm:w-auto px-4 py-2 text-sm font-medium text-white bg-red-600 rounded-md hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 disabled:opacity-50\"\n >\n {isDeleting ? deletingText : deleteText}\n </button>\n )}\n <div className=\"flex flex-col-reverse sm:flex-row gap-2 sm:ml-auto\">\n <button\n type=\"button\"\n onClick={handleClose}\n disabled={isSubmitting || isDeleting}\n className=\"w-full sm:w-auto px-4 py-2 text-sm font-medium text-text-primary bg-background-secondary border border-border-primary rounded-md hover:bg-background-tertiary focus:outline-none focus:ring-2 focus:ring-primary-500 disabled:opacity-50\"\n >\n {cancelText}\n </button>\n <button\n type=\"button\"\n onClick={onSubmit}\n disabled={isSubmitting || isDeleting}\n className=\"w-full sm:w-auto px-4 py-2 text-sm font-medium text-white bg-primary-600 rounded-md hover:bg-primary-700 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 disabled:opacity-50\"\n >\n {isSubmitting ? savingText : submitText}\n </button>\n </div>\n </div>\n }\n >\n {children}\n </SlideOver>\n );\n}\n","\"use client\";\n\nimport React, { useRef, useEffect, useCallback } from \"react\";\nimport { Button } from \"./button\";\n\nexport interface EntityFormProps {\n isEdit?: boolean;\n isSaving?: boolean;\n error?: string;\n onSave: () => void;\n onCancel: () => void;\n onDelete?: () => void;\n saveLabel?: string;\n cancelLabel?: string;\n deleteLabel?: string;\n savingLabel?: string;\n deleteConfirmMessage?: string;\n showDelete?: boolean;\n autoFocus?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const EntityForm: React.FC<EntityFormProps> = ({\n isEdit = false,\n isSaving = false,\n error,\n onSave,\n onCancel,\n onDelete,\n saveLabel = \"Save\",\n cancelLabel = \"Cancel\",\n deleteLabel = \"Delete\",\n savingLabel = \"Saving...\",\n deleteConfirmMessage = \"Are you sure you want to delete this?\",\n showDelete = true,\n autoFocus = true,\n className = \"\",\n children,\n}) => {\n const formRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (autoFocus && formRef.current) {\n const firstInput = formRef.current.querySelector<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >(\n 'input:not([type=\"hidden\"]):not([disabled]), textarea:not([disabled]), select:not([disabled])'\n );\n\n if (firstInput) {\n setTimeout(() => {\n firstInput.focus();\n }, 50);\n }\n }\n }, [autoFocus]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (isSaving) return;\n\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n return;\n }\n\n if (e.key === \"Enter\" && !(e.target instanceof HTMLTextAreaElement)) {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n onSave();\n }\n }\n },\n [isSaving, onSave, onCancel]\n );\n\n const handleDelete = () => {\n if (onDelete && window.confirm(deleteConfirmMessage)) {\n onDelete();\n }\n };\n\n return (\n <div\n ref={formRef}\n className={`bg-background-secondary border border-border-primary rounded-lg p-4 ${className}`}\n onKeyDown={handleKeyDown}\n >\n <div className=\"space-y-4\">{children}</div>\n\n {error && (\n <div className=\"mt-4 p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-md\">\n <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p>\n </div>\n )}\n\n <div className=\"mt-6 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button type=\"button\" variant=\"primary\" onClick={onSave} loading={isSaving} disabled={isSaving}>\n {isSaving ? savingLabel : saveLabel}\n </Button>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} disabled={isSaving}>\n {cancelLabel}\n </Button>\n </div>\n\n {isEdit && showDelete && onDelete && (\n <Button type=\"button\" variant=\"danger\" onClick={handleDelete} disabled={isSaving}>\n {deleteLabel}\n </Button>\n )}\n </div>\n\n <div className=\"mt-3 text-xs text-text-tertiary\">\n <kbd className=\"px-1.5 py-0.5 bg-background-primary rounded\">Esc</kbd> to cancel\n <span className=\"mx-2\">·</span>\n <kbd className=\"px-1.5 py-0.5 bg-background-primary rounded\">⌘</kbd>+\n <kbd className=\"px-1.5 py-0.5 bg-background-primary rounded\">Enter</kbd> to save\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\n\nexport interface SearchInputLabels {\n placeholder?: string;\n searchHotkeyHint?: string;\n openSearch?: string;\n search?: string;\n clearSearch?: string;\n}\n\nexport interface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n debounceMs?: number;\n expandable?: boolean;\n className?: string;\n autoFocus?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n labels?: SearchInputLabels;\n}\n\nconst sizeClasses = {\n sm: {\n input: \"h-8 text-sm\",\n icon: \"w-4 h-4\",\n padding: \"pl-8 pr-8\",\n collapsedWidth: \"w-8\",\n expandedWidth: \"w-48 sm:w-64\",\n },\n md: {\n input: \"h-10 text-sm\",\n icon: \"w-5 h-5\",\n padding: \"pl-10 pr-10\",\n collapsedWidth: \"w-10\",\n expandedWidth: \"w-56 sm:w-72\",\n },\n lg: {\n input: \"h-12 text-base\",\n icon: \"w-6 h-6\",\n padding: \"pl-12 pr-12\",\n collapsedWidth: \"w-12\",\n expandedWidth: \"w-64 sm:w-80\",\n },\n};\n\nexport function SearchInput({\n value,\n onChange,\n placeholder,\n debounceMs = 300,\n expandable = false,\n className = \"\",\n autoFocus = false,\n size = \"md\",\n labels = {},\n}: SearchInputProps) {\n const resolvedPlaceholder = placeholder ?? labels.placeholder ?? \"Search\";\n const searchHotkeyHint = labels.searchHotkeyHint ?? \"Press / to search\";\n const openSearchLabel = labels.openSearch ?? \"Open search\";\n const searchAriaLabel = labels.search ?? \"Search\";\n const clearSearchLabel = labels.clearSearch ?? \"Clear search\";\n\n const [internalValue, setInternalValue] = useState(value);\n const [isExpanded, setIsExpanded] = useState(!expandable || !!value);\n const [isFocused, setIsFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const sizes = sizeClasses[size];\n\n useEffect(() => {\n setInternalValue(value);\n if (value && expandable) {\n setIsExpanded(true);\n }\n }, [value, expandable]);\n\n const debouncedOnChange = useCallback(\n (newValue: string) => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (debounceMs > 0) {\n debounceTimerRef.current = setTimeout(() => {\n onChange(newValue);\n }, debounceMs);\n } else {\n onChange(newValue);\n }\n },\n [onChange, debounceMs]\n );\n\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n debouncedOnChange(newValue);\n };\n\n const handleClear = () => {\n setInternalValue(\"\");\n onChange(\"\");\n inputRef.current?.focus();\n };\n\n const handleExpandClick = () => {\n setIsExpanded(true);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n if (expandable && !internalValue) {\n setTimeout(() => {\n if (document.activeElement !== inputRef.current) {\n setIsExpanded(false);\n }\n }, 150);\n }\n };\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (\n e.key === \"/\" &&\n ![\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes((e.target as HTMLElement).tagName)\n ) {\n e.preventDefault();\n if (expandable && !isExpanded) {\n setIsExpanded(true);\n }\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }\n if (e.key === \"Escape\" && document.activeElement === inputRef.current) {\n if (internalValue) {\n handleClear();\n } else {\n inputRef.current?.blur();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [expandable, isExpanded, internalValue]);\n\n useEffect(() => {\n if (autoFocus && inputRef.current) {\n inputRef.current.focus();\n }\n }, [autoFocus]);\n\n if (expandable && !isExpanded) {\n return (\n <button\n type=\"button\"\n onClick={handleExpandClick}\n className={`\n ${sizes.collapsedWidth} ${sizes.input}\n flex items-center justify-center\n rounded-md border border-border-primary\n bg-background-secondary\n text-text-tertiary hover:text-text-secondary\n hover:bg-background-tertiary\n focus:outline-none focus:ring-2 focus:ring-primary-500\n transition-all duration-200\n ${className}\n `}\n title={searchHotkeyHint}\n aria-label={openSearchLabel}\n >\n <svg className={sizes.icon} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </button>\n );\n }\n\n return (\n <div\n className={`\n relative\n ${expandable ? `transition-all duration-200 ${isExpanded ? sizes.expandedWidth : sizes.collapsedWidth}` : \"w-full\"}\n ${className}\n `}\n >\n <div className=\"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none\">\n <svg\n className={`${sizes.icon} text-text-tertiary`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n\n <input\n ref={inputRef}\n type=\"text\"\n value={internalValue}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={handleBlur}\n placeholder={resolvedPlaceholder}\n className={`\n w-full ${sizes.input} ${sizes.padding}\n rounded-md border\n bg-background-secondary\n text-text-primary\n placeholder-text-tertiary\n ${isFocused ? \"border-primary-500 ring-2 ring-primary-500\" : \"border-border-primary\"}\n focus:outline-none\n transition-colors\n `}\n aria-label={searchAriaLabel}\n />\n\n {internalValue && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 text-text-tertiary hover:text-text-secondary\"\n aria-label={clearSearchLabel}\n >\n <svg className={sizes.icon} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n\n {!internalValue && !isFocused && (\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none\">\n <kbd className=\"hidden sm:inline-flex items-center px-1.5 py-0.5 text-xs font-medium text-text-tertiary bg-background-tertiary rounded border border-border-primary\">\n /\n </kbd>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport interface SearchBarProps {\n value: string;\n onChange: (value: string) => void;\n onClear?: () => void;\n placeholder?: string;\n autoFocus?: boolean;\n className?: string;\n showShortcutHint?: boolean;\n clearSearchLabel?: string;\n}\n\nexport const SearchBar: React.FC<SearchBarProps> = ({\n value,\n onChange,\n onClear,\n placeholder = \"Search\",\n autoFocus = false,\n className = \"\",\n showShortcutHint = true,\n clearSearchLabel = \"Clear search\",\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n inputRef.current?.focus();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"a\") {\n e.preventDefault();\n inputRef.current?.select();\n }\n };\n\n const handleClear = () => {\n onChange(\"\");\n onClear?.();\n inputRef.current?.focus();\n };\n\n const hasWhiteBackground = isFocused || value.length > 0;\n\n return (\n <div className={`relative ${className}`}>\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-5 w-5 text-text-tertiary\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n placeholder={placeholder}\n autoFocus={autoFocus}\n className={`\n w-full \n pl-10 \n pr-24 \n py-2 \n ${hasWhiteBackground ? \"bg-background-tertiary\" : \"bg-background-secondary\"}\n text-text-primary\n border \n border-border-primary\n rounded-md \n transition-all \n duration-150 \n focus:outline-none \n focus:ring-2 \n focus:ring-primary-500 \n focus:border-primary-500\n placeholder:text-text-tertiary\n `}\n />\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 gap-2\">\n {showShortcutHint && !value && (\n <kbd className=\"hidden sm:inline-block px-2 py-1 text-xs text-text-tertiary bg-background-secondary border border-border-primary rounded\">\n ⌘K\n </kbd>\n )}\n {value && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"text-text-tertiary hover:text-text-secondary transition-colors\"\n aria-label={clearSearchLabel}\n >\n <svg className=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbsProps {\n items: BreadcrumbItem[];\n className?: string;\n ariaLabel?: string;\n renderLink?: (props: {\n href: string;\n children: React.ReactNode;\n className: string;\n }) => React.ReactNode;\n}\n\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({\n items,\n className = \"\",\n ariaLabel = \"Breadcrumb\",\n renderLink,\n}) => {\n const linkClassName = \"hover:text-primary-600 cursor-pointer inline-block\";\n\n const renderItemLink = (href: string, label: string) => {\n if (renderLink) {\n return renderLink({ href, children: label, className: linkClassName });\n }\n return (\n <a href={href} className={linkClassName}>\n {label}\n </a>\n );\n };\n\n return (\n <nav className={`mb-4 text-sm text-text-secondary ${className}`} aria-label={ariaLabel}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n {item.href && !isLast\n ? renderItemLink(item.href, item.label)\n : (\n <span className={isLast ? \"text-text-primary\" : \"\"}>{item.label}</span>\n )}\n {!isLast && <span className=\"mx-2\">/</span>}\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\n\nexport interface TableProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const Table: React.FC<TableProps> = ({ children, className = \"\" }) => {\n return (\n <div className=\"overflow-x-auto\">\n <table\n className={`w-full divide-y divide-border-primary ${className}`}\n >\n {children}\n </table>\n </div>\n );\n};\n\nexport interface TableHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TableHeader: React.FC<TableHeaderProps> = ({\n children,\n className = \"\",\n}) => {\n return (\n <thead className={`bg-background-tertiary ${className}`}>\n {children}\n </thead>\n );\n};\n\nexport interface TableBodyProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TableBody: React.FC<TableBodyProps> = ({\n children,\n className = \"\",\n}) => {\n return (\n <tbody\n className={`bg-background-secondary divide-y divide-border-primary ${className}`}\n >\n {children}\n </tbody>\n );\n};\n\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport const TableRow: React.FC<TableRowProps> = ({\n children,\n className = \"\",\n onClick,\n ...props\n}) => {\n return (\n <tr\n className={`${onClick ? \"cursor-pointer hover:bg-background-tertiary\" : \"\"} ${className}`}\n onClick={onClick}\n {...props}\n >\n {children}\n </tr>\n );\n};\n\nexport interface TableHeadProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TableHead: React.FC<TableHeadProps> = ({\n children,\n className = \"\",\n}) => {\n return (\n <th\n className={`px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider align-top ${className}`}\n >\n {children}\n </th>\n );\n};\n\nexport interface TableCellProps {\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n colSpan?: number;\n}\n\nexport const TableCell: React.FC<TableCellProps> = ({\n children,\n className = \"\",\n onClick,\n colSpan,\n}) => {\n return (\n <td\n className={`px-4 py-4 text-sm text-text-primary align-top ${onClick ? \"cursor-pointer\" : \"\"} ${className}`}\n onClick={onClick}\n colSpan={colSpan}\n >\n {children}\n </td>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef } from \"react\";\n\nexport interface TabsProps {\n children: React.ReactNode;\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n className?: string;\n}\n\nexport interface TabsListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface TabsTriggerProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface TabsContentProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nconst TabsContext = React.createContext<{\n value: string;\n onValueChange: (value: string) => void;\n}>({\n value: \"\",\n onValueChange: () => {},\n});\n\nexport const Tabs: React.FC<TabsProps> = ({\n children,\n defaultValue = \"\",\n value: controlledValue,\n onValueChange,\n className = \"\",\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const handleValueChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n };\n\n return (\n <TabsContext.Provider value={{ value, onValueChange: handleValueChange }}>\n <div className={className}>{children}</div>\n </TabsContext.Provider>\n );\n};\n\nexport const TabsList: React.FC<TabsListProps> = ({\n children,\n className = \"\",\n}) => {\n return (\n <div\n className={`flex ${className}`}\n role=\"tablist\"\n >\n {children}\n </div>\n );\n};\n\nexport const TabsTrigger: React.FC<TabsTriggerProps> = ({\n value,\n children,\n className = \"\",\n}) => {\n const context = React.useContext(TabsContext);\n const isActive = context.value === value;\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleClick = () => {\n context.onValueChange(value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n context.onValueChange(value);\n }\n };\n\n return (\n <button\n ref={buttonRef}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tab-content-${value}`}\n id={`tab-trigger-${value}`}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`\n px-4 py-2 text-sm font-medium transition-colors duration-150\n border-b-2 -mb-px\n focus:outline-none\n cursor-pointer\n ${\n isActive\n ? \"border-primary-600 text-primary-600\"\n : \"border-transparent text-text-secondary hover:text-text-primary hover:border-border-secondary\"\n }\n ${className}\n `}\n >\n {children}\n </button>\n );\n};\n\nexport const TabsContent: React.FC<TabsContentProps> = ({\n value,\n children,\n className = \"\",\n}) => {\n const context = React.useContext(TabsContext);\n const isActive = context.value === value;\n\n if (!isActive) {\n return null;\n }\n\n return (\n <div\n role=\"tabpanel\"\n id={`tab-content-${value}`}\n aria-labelledby={`tab-trigger-${value}`}\n className={`mt-6 ${className}`}\n >\n {children}\n </div>\n );\n};\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cn } from \"../lib/utils\";\n\ninterface AvatarProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> {\n ref?: React.Ref<React.ElementRef<typeof AvatarPrimitive.Root>>;\n}\n\nconst Avatar: React.FC<AvatarProps> = ({ className, ref, ...props }) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\", className)}\n {...props}\n />\n);\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\ninterface AvatarImageProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image> {\n ref?: React.Ref<React.ElementRef<typeof AvatarPrimitive.Image>>;\n}\n\nconst AvatarImage: React.FC<AvatarImageProps> = ({ className, ref, ...props }) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n);\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\ninterface AvatarFallbackProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback> {\n ref?: React.Ref<React.ElementRef<typeof AvatarPrimitive.Fallback>>;\n}\n\nconst AvatarFallback: React.FC<AvatarFallbackProps> = ({ className, ref, ...props }) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\"flex h-full w-full items-center justify-center rounded-full bg-muted\", className)}\n {...props}\n />\n);\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\ninterface DropdownMenuSubTriggerProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> {\n inset?: boolean\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>>\n}\n\nconst DropdownMenuSubTrigger: React.FC<DropdownMenuSubTriggerProps> = ({ className, inset, children, ref, ...props }) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n)\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\ninterface DropdownMenuSubContentProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> {\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.SubContent>>\n}\n\nconst DropdownMenuSubContent: React.FC<DropdownMenuSubContentProps> = ({ className, ref, ...props }) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n)\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\ninterface DropdownMenuContentProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> {\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Content>>\n}\n\nconst DropdownMenuContent: React.FC<DropdownMenuContentProps> = ({ className, sideOffset = 4, ref, ...props }) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n)\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\ninterface DropdownMenuItemProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {\n inset?: boolean\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Item>>\n}\n\nconst DropdownMenuItem: React.FC<DropdownMenuItemProps> = ({ className, inset, ref, ...props }) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n)\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\ninterface DropdownMenuCheckboxItemProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> {\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>>\n}\n\nconst DropdownMenuCheckboxItem: React.FC<DropdownMenuCheckboxItemProps> = ({ className, children, checked, ref, ...props }) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n)\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\ninterface DropdownMenuRadioItemProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> {\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>>\n}\n\nconst DropdownMenuRadioItem: React.FC<DropdownMenuRadioItemProps> = ({ className, children, ref, ...props }) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n)\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\ninterface DropdownMenuLabelProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> {\n inset?: boolean\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Label>>\n}\n\nconst DropdownMenuLabel: React.FC<DropdownMenuLabelProps> = ({ className, inset, ref, ...props }) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n)\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\ninterface DropdownMenuSeparatorProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> {\n ref?: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Separator>>\n}\n\nconst DropdownMenuSeparator: React.FC<DropdownMenuSeparatorProps> = ({ className, ref, ...props }) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n)\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\";\n\nimport React, { useState, useEffect, useRef, useCallback } from \"react\";\n\n/* =================================================================\n Collapsible Component\n ================================================================= */\n\ninterface CollapsibleProps {\n /** Whether the section is initially open */\n defaultOpen?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Trigger element (clickable header) */\n trigger: React.ReactNode;\n /** Content to show when expanded */\n children: React.ReactNode;\n /** Additional class names */\n className?: string;\n /** Whether to persist state to localStorage */\n storageKey?: string;\n /** Disable the collapsible functionality */\n disabled?: boolean;\n}\n\nexport function Collapsible({\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n trigger,\n children,\n className = \"\",\n storageKey,\n disabled = false,\n}: CollapsibleProps) {\n // Use controlled state if provided, otherwise use internal state\n const isControlled = controlledOpen !== undefined;\n const [internalOpen, setInternalOpen] = useState(() => {\n // Check localStorage first if storageKey is provided\n if (storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(`collapsible-${storageKey}`);\n if (stored !== null) {\n return stored === \"true\";\n }\n }\n return defaultOpen;\n });\n\n const isOpen = isControlled ? controlledOpen : internalOpen;\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number | undefined>(undefined);\n\n // Update content height for smooth animation\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children, isOpen]);\n\n // Persist to localStorage\n useEffect(() => {\n if (storageKey && !isControlled) {\n localStorage.setItem(`collapsible-${storageKey}`, String(internalOpen));\n }\n }, [storageKey, internalOpen, isControlled]);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n\n const newState = !isOpen;\n \n if (!isControlled) {\n setInternalOpen(newState);\n }\n \n onOpenChange?.(newState);\n }, [disabled, isOpen, isControlled, onOpenChange]);\n\n return (\n <div className={className}>\n {/* Trigger */}\n <div\n onClick={handleToggle}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleToggle();\n }\n }}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-expanded={isOpen}\n aria-disabled={disabled}\n className={disabled ? \"cursor-not-allowed opacity-60\" : \"cursor-pointer\"}\n >\n {trigger}\n </div>\n\n {/* Content with animation */}\n <div\n ref={contentRef}\n className=\"overflow-hidden transition-all duration-300 ease-in-out\"\n style={{\n maxHeight: isOpen ? contentHeight : 0,\n opacity: isOpen ? 1 : 0,\n }}\n aria-hidden={!isOpen}\n >\n {children}\n </div>\n </div>\n );\n}\n\n/* =================================================================\n CollapsibleTrigger - Pre-styled trigger component\n ================================================================= */\n\ninterface CollapsibleTriggerProps {\n /** Title text */\n title: string;\n /** Subtitle/description text */\n subtitle?: string;\n /** Whether the section is open */\n isOpen: boolean;\n /** Additional class names */\n className?: string;\n /** Icon to show (optional, defaults to chevron) */\n icon?: React.ReactNode;\n}\n\nexport function CollapsibleTrigger({\n title,\n subtitle,\n isOpen,\n className = \"\",\n icon,\n}: CollapsibleTriggerProps) {\n return (\n <div\n className={`flex items-center justify-between p-4 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors ${className}`}\n >\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-medium text-gray-900 dark:text-gray-100\">\n {title}\n </h3>\n {subtitle && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400 truncate\">\n {subtitle}\n </p>\n )}\n </div>\n <div className=\"ml-4 flex-shrink-0\">\n {icon || (\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform duration-300 ${\n isOpen ? \"rotate-180\" : \"\"\n }`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n )}\n </div>\n </div>\n );\n}\n\n/* =================================================================\n DismissibleBanner - For hero banners and announcements\n ================================================================= */\n\ninterface DismissibleBannerProps {\n /** Unique key for localStorage persistence */\n storageKey: string;\n /** Banner content */\n children: React.ReactNode;\n /** Dismiss button text */\n dismissText?: string;\n /** Callback when dismissed */\n onDismiss?: () => void;\n /** Additional class names */\n className?: string;\n /** Variant for styling */\n variant?: \"info\" | \"success\" | \"warning\" | \"neutral\" | \"hero\";\n}\n\nconst bannerVariantClasses = {\n info: \"bg-gradient-to-r from-primary-50 to-blue-50 dark:from-primary-900/20 dark:to-blue-900/20 border-primary-200 dark:border-primary-700\",\n success: \"bg-gradient-to-r from-primary-50 to-primary-100 dark:from-primary-900/20 dark:to-primary-800/20 border-primary-200 dark:border-primary-700\",\n warning: \"bg-gradient-to-r from-yellow-50 to-amber-50 dark:from-yellow-900/20 dark:to-amber-900/20 border-yellow-200 dark:border-yellow-700\",\n neutral: \"bg-gradient-to-r from-gray-50 to-slate-50 dark:from-gray-800 dark:to-slate-800 border-gray-200 dark:border-gray-700\",\n hero: \"bg-gradient-to-r from-accent-50 to-accent-100 dark:from-accent-800 dark:to-accent-900 border-accent-200 dark:border-accent-600\",\n};\n\nexport function DismissibleBanner({\n storageKey,\n children,\n dismissText = \"Got it\",\n onDismiss,\n className = \"\",\n variant = \"info\",\n}: DismissibleBannerProps) {\n const [isDismissed, setIsDismissed] = useState(() => {\n if (typeof window !== \"undefined\") {\n return localStorage.getItem(`banner-${storageKey}-dismissed`) === \"true\";\n }\n return false;\n });\n const [isAnimatingOut, setIsAnimatingOut] = useState(false);\n\n const handleDismiss = useCallback(() => {\n setIsAnimatingOut(true);\n \n // Wait for animation to complete\n setTimeout(() => {\n setIsDismissed(true);\n localStorage.setItem(`banner-${storageKey}-dismissed`, \"true\");\n onDismiss?.();\n }, 300);\n }, [storageKey, onDismiss]);\n\n if (isDismissed) {\n return null;\n }\n\n return (\n <div\n className={`\n border rounded-lg p-6 shadow-sm\n transition-all duration-300 ease-out\n ${isAnimatingOut ? \"opacity-0 -translate-y-4 h-0 p-0 overflow-hidden\" : \"opacity-100 translate-y-0\"}\n ${bannerVariantClasses[variant]}\n ${className}\n `}\n >\n <div className=\"flex flex-col\">\n <div className=\"flex-1\">{children}</div>\n <div className=\"flex justify-end mt-4\">\n <button\n onClick={handleDismiss}\n className={`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors cursor-pointer ${\n variant === \"hero\"\n ? \"bg-accent-600 hover:bg-accent-700 focus:ring-accent-500\"\n : \"bg-primary-600 hover:bg-primary-700 focus:ring-primary-500\"\n }`}\n >\n {dismissText}\n </button>\n </div>\n </div>\n </div>\n );\n}\n\n/* =================================================================\n useCollapsible - Hook for external control\n ================================================================= */\n\ninterface UseCollapsibleOptions {\n /** Initial open state */\n defaultOpen?: boolean;\n /** Storage key for persistence */\n storageKey?: string;\n}\n\nexport function useCollapsible(options: UseCollapsibleOptions = {}) {\n const { defaultOpen = false, storageKey } = options;\n\n const [isOpen, setIsOpen] = useState(() => {\n if (storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(`collapsible-${storageKey}`);\n if (stored !== null) {\n return stored === \"true\";\n }\n }\n return defaultOpen;\n });\n\n useEffect(() => {\n if (storageKey) {\n localStorage.setItem(`collapsible-${storageKey}`, String(isOpen));\n }\n }, [storageKey, isOpen]);\n\n const toggle = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n return {\n isOpen,\n toggle,\n open,\n close,\n setIsOpen,\n };\n}\n"],"mappings":";AAAA,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ACmEQ,SAKE,KALF;AAnDR,IAAM,uBAAsD;AAAA,EAC1D,SACE;AAAA,EACF,WACE;AAAA,EACF,SACE;AAAA,EACF,QACE;AAAA,EACF,aACE;AAAA,EACF,OACE;AACJ;AAEA,IAAM,oBAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,SAAgC,CAAC;AAAA,EAC5C,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU,YAAY;AAAA,MACtB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOL,qBAAqB,OAAO,CAAC;AAAA,YAC7B,kBAAkB,IAAI,CAAC;AAAA,YACvB,YAAY,WAAW,EAAE;AAAA,YACzB,SAAS;AAAA,UACX,KAAK,EAAE,QAAQ,QAAQ,GAAG;AAAA,MAC7B,GAAG;AAAA,MAEH;AAAA,mBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAQ;AAAA,YAER;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,IAAG;AAAA,kBACH,IAAG;AAAA,kBACH,GAAE;AAAA,kBACF,QAAO;AAAA,kBACP,aAAY;AAAA;AAAA,cACd;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,GAAE;AAAA;AAAA,cACJ;AAAA;AAAA;AAAA,QACF;AAAA,QAED;AAAA;AAAA;AAAA,EACH;AAEJ;AACA,OAAO,cAAc;;;AC9FrB,OAAO,SAAS,aAAa;AA2BrB,SAKe,OAAAA,MALf,QAAAC,aAAA;AAfD,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,cAAc,MAAM;AAC1B,QAAM,UAAU,WAAW;AAE3B,SACE,gBAAAA,MAAC,SAAI,WAAW,aAAa,SAAS,IACnC;AAAA,aACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAU;AAAA,QAET;AAAA;AAAA,UACA,YAAY,gBAAAD,KAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA;AAAA;AAAA,IACpD;AAAA,IAED,MAAM,eAAe,QAAQ,IAC1B,MAAM,aAAa,UAAyD;AAAA,MAC1E,IAAI;AAAA,MACJ,gBAAgB,CAAC,CAAC;AAAA,MAClB,oBAAoB,QAChB,GAAG,OAAO,WACV,aACA,GAAG,OAAO,YACV;AAAA,IACN,CAAC,IACD;AAAA,IACH,SACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,GAAG,OAAO;AAAA,QACd,WAAU;AAAA,QACV,MAAK;AAAA,QAEJ;AAAA;AAAA,IACH;AAAA,IAED,CAAC,SAAS,cACT,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,GAAG,OAAO;AAAA,QACd,WAAU;AAAA,QAET;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ;;;ACnEO,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU9B,KAAK,EAAE,QAAQ,QAAQ,GAAG;AAErB,IAAM,oBAAoB;AAAA;AAAA;AAAA,EAG/B,KAAK,EAAE,QAAQ,QAAQ,GAAG;;;ACWxB,gBAAAE,YAAA;AAhBG,IAAM,QAA8B,CAAC;AAAA,EAC1C,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,gBAAgB,CAAC,MAA6C;AAClE,SAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC7C,QAAE,eAAe;AACjB,QAAE,cAAc,OAAO;AAAA,IACzB;AACA,gBAAY,CAAC;AAAA,EACf;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,gBAAgB,IAAI,WAAW,oBAAoB,EAAE,IAAI,SAAS;AAAA,MAChF,WAAW;AAAA,MACV,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,MAAM,cAAc;;;ACGhB,gBAAAC,YAAA;AA1BG,IAAM,WAAoC,CAAC;AAAA,EAChD,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,eAAe,CAAC,MAA8C;AAClE,QAAI,YAAY;AACd,QAAE,OAAO,MAAM,SAAS;AACxB,QAAE,OAAO,MAAM,SAAS,GAAG,EAAE,OAAO,YAAY;AAAA,IAClD;AACA,eAAW,CAAC;AAAA,EACd;AAEA,QAAM,gBAAgB,CAAC,MAAgD;AACrE,SAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC7C,QAAE,eAAe;AACjB,QAAE,cAAc,OAAO;AAAA,IACzB;AACA,gBAAY,CAAC;AAAA,EACf;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,gBAAgB,IAAI,WAAW,oBAAoB,EAAE,IACjE,aAAa,gCAAgC,EAC/C,IAAI,SAAS;AAAA,MACb,UAAU;AAAA,MACV,WAAW;AAAA,MACV,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,SAAS,cAAc;;;AC1BnB,SAMI,OAAAC,MANJ,QAAAC,aAAA;AAVG,IAAM,SAAgC,CAAC;AAAA,EAC5C,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,gBAAgB,IAAI,WAAW,oBAAoB,EAAE,IAAI,SAAS;AAAA,MAC/E,GAAG;AAAA,MAEH;AAAA,uBACC,gBAAAD,KAAC,YAAO,OAAM,IAAG,UAAQ,MACtB,uBACH;AAAA,QAED,UACG,QAAQ,IAAI,CAAC,WACX,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,OAAO,OAAO;AAAA,YACd,UAAU,OAAO;AAAA,YAEhB,iBAAO;AAAA;AAAA,UAJH,OAAO;AAAA,QAKd,CACD,IACD;AAAA;AAAA;AAAA,EACN;AAEJ;AACA,OAAO,cAAc;;;AC5CrB,SAAgB,SAAAE,cAAa;AAkBzB,SACE,OAAAC,MADF,QAAAC,aAAA;AAXG,IAAM,WAAoC,CAAC;AAAA,EAChD,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,cAAcF,OAAM;AAC1B,QAAM,aAAa,MAAM;AAEzB,SACE,gBAAAE,MAAC,SAAI,WAAW,qBAAqB,SAAS,IAC5C;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,IAAI;AAAA,QACJ,WAAU;AAAA,QACT,GAAG;AAAA;AAAA,IACN;AAAA,IACC,SACC,gBAAAA,KAAC,WAAM,SAAS,YAAY,WAAU,kCACnC,iBACH;AAAA,KAEJ;AAEJ;AACA,SAAS,cAAc;;;ACjCvB,YAAY,qBAAqB;AACjC,SAAS,SAAS;AAahB,gBAAAE,MAkCI,QAAAC,aAlCJ;AAVF,IAAM,SAAyB;AAC/B,IAAM,gBAAgC;AACtC,IAAM,eAA+B;AACrC,IAAM,cAA8B;AAMpC,IAAM,gBAA8C,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAC9E,gBAAAD;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,cAAc,cAA8B,wBAAQ;AAOpD,IAAM,gBAA8C,CAAC;AAAA,EACnD;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,GAAG;AACL,MACE,gBAAAC,MAAC,gBACC;AAAA,kBAAAD,KAAC,iBAAc;AAAA,EACf,gBAAAC;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,gBAAAA,MAAiB,uBAAhB,EAAsB,WAAU,iRAC/B;AAAA,0BAAAD,KAAC,KAAE,WAAU,WAAU;AAAA,UACvB,gBAAAA,KAAC,UAAK,WAAU,WAAW,sBAAW;AAAA,WACxC;AAAA;AAAA;AAAA,EACF;AAAA,GACF;AAEF,cAAc,cAA8B,wBAAQ;AAEpD,IAAM,eAAe,CAAC,EAAE,WAAW,GAAG,MAAM,MAC1C,gBAAAA,KAAC,SAAI,WAAW,GAAG,sDAAsD,SAAS,GAAI,GAAG,OAAO;AAElG,aAAa,cAAc;AAE3B,IAAM,eAAe,CAAC,EAAE,WAAW,GAAG,MAAM,MAC1C,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,GAAG,iEAAiE,SAAS;AAAA,IACvF,GAAG;AAAA;AACN;AAEF,aAAa,cAAc;AAM3B,IAAM,cAA0C,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAC1E,gBAAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,qDAAqD,SAAS;AAAA,IAC3E,GAAG;AAAA;AACN;AAEF,YAAY,cAA8B,sBAAM;AAMhD,IAAM,oBAAsD,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MACtF,gBAAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN;AAEF,kBAAkB,cAA8B,4BAAY;AAe5D,IAAM,gBAA8C,CAAC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAChB,MACE,gBAAAA,KAAC,UAAO,MAAY,cAAc,CAAC,WAAW,CAAC,UAAU,QAAQ,GAC/D,0BAAAC,MAAC,iBAAc,WAAU,oBACvB;AAAA,kBAAAA,MAAC,gBACC;AAAA,oBAAAD,KAAC,eAAa,iBAAM;AAAA,IACpB,gBAAAA,KAAC,qBAAmB,mBAAQ;AAAA,KAC9B;AAAA,EACA,gBAAAC,MAAC,gBACC;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,UAAU;AAAA,QACV,WAAU;AAAA,QAET;AAAA;AAAA,IACH;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,UAAU;AAAA,QACV,WAAW,2JACT,YAAY,WACR,mDACA,4DACN;AAAA,QAEC,oBAAU,cAAc;AAAA;AAAA,IAC3B;AAAA,KACF;AAAA,GACF,GACF;;;ACrJF,OAAOE,YAAW;AA2BZ,gBAAAC,YAAA;AAlBC,IAAM,OAAOD,OAAM;AAAA,EACxB,CAAC,EAAE,UAAU,UAAU,WAAW,YAAY,IAAI,QAAQ,GAAG,QAAQ;AACnE,UAAM,aACJ;AAEF,UAAM,gBAAgB;AAAA,MACpB,SAAS;AAAA,MACT,aACE;AAAA,IACJ;AAEA,UAAM,oBAAoB,UACtB,6FACA;AAEJ,UAAM,YAAY,UAAU,WAAW;AAEvC,WACE,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,GAAG,UAAU,IAAI,cAAc,OAAO,CAAC,IAAI,iBAAiB,IAAI,SAAS;AAAA,QACpF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;AAOZ,IAAM,aAAwC,CAAC,EAAE,UAAU,YAAY,GAAG,MAC/E,gBAAAA,KAAC,SAAI,WAAW,4CAA4C,SAAS,IAAK,UAAS;AAQ9E,IAAM,WAAoC,CAAC,EAAE,UAAU,YAAY,GAAG,MAC3E,gBAAAA,KAAC,SAAI,WAAW,2BAA2B,SAAS,IAAK,UAAS;AAQ7D,IAAM,aAAwC,CAAC,EAAE,UAAU,YAAY,GAAG,MAC/E,gBAAAA,KAAC,SAAI,WAAW,4CAA4C,SAAS,IAAK,UAAS;;;AChDjF,SAKE,OAAAC,MALF,QAAAC,aAAA;AAXG,IAAM,iBAAgD,CAAC;AAAA,EAC5D,OAAO;AAAA,EACP,YAAY;AACd,MAAM;AACJ,QAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,gBAAgB,WAAW,IAAI,CAAC,2CAA2C,SAAS;AAAA,MAC/F,MAAK;AAAA,MACL,SAAQ;AAAA,MAER;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA;AAAA,QACd;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,GAAE;AAAA;AAAA,QACJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,IAAM,gBAAgD,CAAC;AAAA,EAC5D,UAAU;AACZ,MACE,gBAAAC,MAAC,SAAI,WAAU,qEACb;AAAA,kBAAAD,KAAC,kBAAe,MAAK,MAAK;AAAA,EAC1B,gBAAAA,KAAC,OAAE,WAAU,uBAAuB,mBAAQ;AAAA,GAC9C;;;ACdE,gBAAAE,aAAA;AAvBG,IAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,YAAY;AACd,MAAM;AACJ,QAAM,aACJ;AAEF,QAAM,gBAAgB;AAAA,IACpB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAEA,QAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,UAAU,IAAI,cAAc,OAAO,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,SAAS;AAAA,MAElF;AAAA;AAAA,EACH;AAEJ;;;AClBE,SAGW,OAAAC,OAHX,QAAAC,aAAA;AAPK,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,MACE,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,oEAAoE,SAAS;AAAA,IAEvF;AAAA,cAAQ,gBAAAD,MAAC,SAAI,WAAU,2BAA2B,gBAAK;AAAA,MACxD,gBAAAA,MAAC,QAAG,WAAU,gDAAgD,iBAAM;AAAA,MACnE,eACC,gBAAAA,MAAC,OAAE,WAAU,6CAA6C,uBAAY;AAAA,MAEvE,UACC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,OAAO;AAAA,UAChB,WAAU;AAAA,UAET,iBAAO;AAAA;AAAA,MACV;AAAA;AAAA;AAEJ;;;ACSM,SACE,OAAAE,OADF,QAAAC,aAAA;AArBR,IAAM,cAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR;AAEO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,aAAa;AACf,GAAmB;AACjB,SACE,gBAAAD,MAAC,UAAO,MAAY,cAAc,CAAC,WAAW,CAAC,UAAU,QAAQ,GAC/D,0BAAAC,MAAC,iBAAc,WAAW,GAAG,YAAY,IAAI,GAAG,4BAA4B,GAAG,YAC7E;AAAA,oBAAAA,MAAC,gBACC;AAAA,sBAAAD,MAAC,eAAa,iBAAM;AAAA,MACnB,eAAe,gBAAAA,MAAC,qBAAmB,uBAAY;AAAA,OAClD;AAAA,IACA,gBAAAA,MAAC,SAAI,WAAU,uCAAuC,UAAS;AAAA,IAC9D,UAAU,gBAAAA,MAAC,gBAAa,WAAU,QAAQ,kBAAO;AAAA,KACpD,GACF;AAEJ;AAiBO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,eAAe;AAAA,EACf,wBAAwB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,EACP;AACF,GAAuB;AACrB,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY;AACd,UAAI,QAAQ,qBAAqB,GAAG;AAClC,gBAAQ;AAAA,MACV;AAAA,IACF,OAAO;AACL,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QACE,gBAAAC,MAAC,SAAI,WAAU,qEACZ;AAAA,oBACC,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,UAAU,cAAc;AAAA,YACxB,WAAU;AAAA,YAET,uBAAa,eAAe;AAAA;AAAA,QAC/B;AAAA,QAEF,gBAAAC,MAAC,SAAI,WAAU,sDACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS;AAAA,cACT,UAAU,gBAAgB;AAAA,cAC1B,WAAU;AAAA,cAET;AAAA;AAAA,UACH;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS;AAAA,cACT,UAAU,gBAAgB;AAAA,cAC1B,WAAU;AAAA,cAET,yBAAe,aAAa;AAAA;AAAA,UAC/B;AAAA,WACF;AAAA,SACF;AAAA,MAGD;AAAA;AAAA,EACH;AAEJ;;;AC/IA,SAAgB,QAAQ,WAAW,mBAAmB;AAwFhD,gBAAAE,OASE,QAAAC,aATF;AAnEC,IAAM,aAAwC,CAAC;AAAA,EACpD,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,UAAU,OAAuB,IAAI;AAE3C,YAAU,MAAM;AACd,QAAI,aAAa,QAAQ,SAAS;AAChC,YAAM,aAAa,QAAQ,QAAQ;AAAA,QAGjC;AAAA,MACF;AAEA,UAAI,YAAY;AACd,mBAAW,MAAM;AACf,qBAAW,MAAM;AAAA,QACnB,GAAG,EAAE;AAAA,MACP;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAA2B;AAC1B,UAAI,SAAU;AAEd,UAAI,EAAE,QAAQ,UAAU;AACtB,UAAE,eAAe;AACjB,iBAAS;AACT;AAAA,MACF;AAEA,UAAI,EAAE,QAAQ,WAAW,EAAE,EAAE,kBAAkB,sBAAsB;AACnE,YAAI,EAAE,WAAW,EAAE,SAAS;AAC1B,YAAE,eAAe;AACjB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,UAAU,QAAQ,QAAQ;AAAA,EAC7B;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,YAAY,OAAO,QAAQ,oBAAoB,GAAG;AACpD,eAAS;AAAA,IACX;AAAA,EACF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,uEAAuE,SAAS;AAAA,MAC3F,WAAW;AAAA,MAEX;AAAA,wBAAAD,MAAC,SAAI,WAAU,aAAa,UAAS;AAAA,QAEpC,SACC,gBAAAA,MAAC,SAAI,WAAU,8FACb,0BAAAA,MAAC,OAAE,WAAU,0CAA0C,iBAAM,GAC/D;AAAA,QAGF,gBAAAC,MAAC,SAAI,WAAU,0CACb;AAAA,0BAAAA,MAAC,SAAI,WAAU,2BACb;AAAA,4BAAAD,MAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,QAAQ,SAAS,UAAU,UAAU,UACnF,qBAAW,cAAc,WAC5B;AAAA,YACA,gBAAAA,MAAC,UAAO,MAAK,UAAS,SAAQ,aAAY,SAAS,UAAU,UAAU,UACpE,uBACH;AAAA,aACF;AAAA,UAEC,UAAU,cAAc,YACvB,gBAAAA,MAAC,UAAO,MAAK,UAAS,SAAQ,UAAS,SAAS,cAAc,UAAU,UACrE,uBACH;AAAA,WAEJ;AAAA,QAEA,gBAAAC,MAAC,SAAI,WAAU,mCACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,+CAA8C,iBAAG;AAAA,UAAM;AAAA,UACtE,gBAAAA,MAAC,UAAK,WAAU,QAAO,kBAAC;AAAA,UACxB,gBAAAA,MAAC,SAAI,WAAU,+CAA8C,oBAAC;AAAA,UAAM;AAAA,UACpE,gBAAAA,MAAC,SAAI,WAAU,+CAA8C,mBAAK;AAAA,UAAM;AAAA,WAC1E;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACzHA,SAAgB,UAAU,UAAAE,SAAQ,aAAAC,YAAW,eAAAC,oBAAmB;AA0LtD,gBAAAC,OAYN,QAAAC,cAZM;AApKV,IAAMC,eAAc;AAAA,EAClB,IAAI;AAAA,IACF,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,eAAe;AAAA,EACjB;AACF;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,SAAS,CAAC;AACZ,GAAqB;AACnB,QAAM,sBAAsB,eAAe,OAAO,eAAe;AACjE,QAAM,mBAAmB,OAAO,oBAAoB;AACpD,QAAM,kBAAkB,OAAO,cAAc;AAC7C,QAAM,kBAAkB,OAAO,UAAU;AACzC,QAAM,mBAAmB,OAAO,eAAe;AAE/C,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AACxD,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK;AACnE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,WAAWL,QAAyB,IAAI;AAC9C,QAAM,mBAAmBA,QAA6C,IAAI;AAE1E,QAAM,QAAQK,aAAY,IAAI;AAE9B,EAAAJ,WAAU,MAAM;AACd,qBAAiB,KAAK;AACtB,QAAI,SAAS,YAAY;AACvB,oBAAc,IAAI;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,CAAC;AAEtB,QAAM,oBAAoBC;AAAA,IACxB,CAAC,aAAqB;AACpB,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AAAA,MACvC;AAEA,UAAI,aAAa,GAAG;AAClB,yBAAiB,UAAU,WAAW,MAAM;AAC1C,mBAAS,QAAQ;AAAA,QACnB,GAAG,UAAU;AAAA,MACf,OAAO;AACL,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU;AAAA,EACvB;AAEA,EAAAD,WAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AAAA,MACvC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,EAAE,OAAO;AAC1B,qBAAiB,QAAQ;AACzB,sBAAkB,QAAQ;AAAA,EAC5B;AAEA,QAAM,cAAc,MAAM;AACxB,qBAAiB,EAAE;AACnB,aAAS,EAAE;AACX,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,QAAM,oBAAoB,MAAM;AAC9B,kBAAc,IAAI;AAClB,0BAAsB,MAAM;AAC1B,eAAS,SAAS,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,MAAM;AACvB,iBAAa,KAAK;AAClB,QAAI,cAAc,CAAC,eAAe;AAChC,iBAAW,MAAM;AACf,YAAI,SAAS,kBAAkB,SAAS,SAAS;AAC/C,wBAAc,KAAK;AAAA,QACrB;AAAA,MACF,GAAG,GAAG;AAAA,IACR;AAAA,EACF;AAEA,EAAAA,WAAU,MAAM;AACd,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,UACE,EAAE,QAAQ,OACV,CAAC,CAAC,SAAS,YAAY,QAAQ,EAAE,SAAU,EAAE,OAAuB,OAAO,GAC3E;AACA,UAAE,eAAe;AACjB,YAAI,cAAc,CAAC,YAAY;AAC7B,wBAAc,IAAI;AAAA,QACpB;AACA,8BAAsB,MAAM;AAC1B,mBAAS,SAAS,MAAM;AAAA,QAC1B,CAAC;AAAA,MACH;AACA,UAAI,EAAE,QAAQ,YAAY,SAAS,kBAAkB,SAAS,SAAS;AACrE,YAAI,eAAe;AACjB,sBAAY;AAAA,QACd,OAAO;AACL,mBAAS,SAAS,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,aAAS,iBAAiB,WAAW,aAAa;AAClD,WAAO,MAAM,SAAS,oBAAoB,WAAW,aAAa;AAAA,EACpE,GAAG,CAAC,YAAY,YAAY,aAAa,CAAC;AAE1C,EAAAA,WAAU,MAAM;AACd,QAAI,aAAa,SAAS,SAAS;AACjC,eAAS,QAAQ,MAAM;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,MAAI,cAAc,CAAC,YAAY;AAC7B,WACE,gBAAAE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,YACP,MAAM,cAAc,IAAI,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQnC,SAAS;AAAA;AAAA,QAEb,OAAO;AAAA,QACP,cAAY;AAAA,QAEZ,0BAAAA,MAAC,SAAI,WAAW,MAAM,MAAM,MAAK,QAAO,QAAO,gBAAe,SAAQ,aACpE,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAa;AAAA,YACb,GAAE;AAAA;AAAA,QACJ,GACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA;AAAA,UAEP,aAAa,+BAA+B,aAAa,MAAM,gBAAgB,MAAM,cAAc,KAAK,QAAQ;AAAA,UAChH,SAAS;AAAA;AAAA,MAGb;AAAA,wBAAAD,MAAC,SAAI,WAAU,wEACb,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,GAAG,MAAM,IAAI;AAAA,YACxB,MAAK;AAAA,YACL,QAAO;AAAA,YACP,SAAQ;AAAA,YAER,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,GAAE;AAAA;AAAA,YACJ;AAAA;AAAA,QACF,GACF;AAAA,QAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAO;AAAA,YACP,UAAU;AAAA,YACV,SAAS,MAAM,aAAa,IAAI;AAAA,YAChC,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,WAAW;AAAA,mBACA,MAAM,KAAK,IAAI,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKnC,YAAY,+CAA+C,uBAAuB;AAAA;AAAA;AAAA;AAAA,YAItF,cAAY;AAAA;AAAA,QACd;AAAA,QAEC,iBACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACV,cAAY;AAAA,YAEZ,0BAAAA,MAAC,SAAI,WAAW,MAAM,MAAM,MAAK,QAAO,QAAO,gBAAe,SAAQ,aACpE,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,GAAE;AAAA;AAAA,YACJ,GACF;AAAA;AAAA,QACF;AAAA,QAGD,CAAC,iBAAiB,CAAC,aAClB,gBAAAA,MAAC,SAAI,WAAU,yEACb,0BAAAA,MAAC,SAAI,WAAU,uJAAsJ,eAErK,GACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AC7QA,SAAgB,aAAAG,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AA8DzC,gBAAAC,OAqCJ,QAAAC,cArCI;AAjDH,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,mBAAmB;AACrB,MAAM;AACJ,QAAM,WAAWH,QAAyB,IAAI;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAIC,UAAS,KAAK;AAEhD,EAAAF,WAAU,MAAM;AACd,UAAMK,iBAAgB,CAAC,MAAqB;AAC1C,WAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC7C,UAAE,eAAe;AACjB,iBAAS,SAAS,MAAM;AAAA,MAC1B;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAWA,cAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAWA,cAAa;AAAA,EAClE,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAgB,CAAC,MAA6C;AAClE,SAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC7C,QAAE,eAAe;AACjB,eAAS,SAAS,OAAO;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,aAAS,EAAE;AACX,cAAU;AACV,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,QAAM,qBAAqB,aAAa,MAAM,SAAS;AAEvD,SACE,gBAAAD,OAAC,SAAI,WAAW,YAAY,SAAS,IACnC;AAAA,oBAAAD,MAAC,SAAI,WAAU,wEACb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,QAAO;AAAA,QACP,SAAQ;AAAA,QAER,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAa;AAAA,YACb,GAAE;AAAA;AAAA,QACJ;AAAA;AAAA,IACF,GACF;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAK;AAAA,QACL;AAAA,QACA,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,QACxC,WAAW;AAAA,QACX,SAAS,MAAM,aAAa,IAAI;AAAA,QAChC,QAAQ,MAAM,aAAa,KAAK;AAAA,QAChC;AAAA,QACA;AAAA,QACA,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,YAKP,qBAAqB,2BAA2B,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAa/E;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,2DACZ;AAAA,0BAAoB,CAAC,SACpB,gBAAAD,MAAC,SAAI,WAAU,4HAA2H,qBAE1I;AAAA,MAED,SACC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAU;AAAA,UACV,cAAY;AAAA,UAEZ,0BAAAA,MAAC,SAAI,WAAU,WAAU,MAAK,QAAO,QAAO,gBAAe,SAAQ,aACjE,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAc;AAAA,cACd,gBAAe;AAAA,cACf,aAAa;AAAA,cACb,GAAE;AAAA;AAAA,UACJ,GACF;AAAA;AAAA,MACF;AAAA,OAEJ;AAAA,KACF;AAEJ;;;AC7HA,OAAOG,YAAW;AA+BZ,gBAAAC,OAYI,QAAAC,cAZJ;AAbC,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,gBAAgB;AAEtB,QAAM,iBAAiB,CAAC,MAAc,UAAkB;AACtD,QAAI,YAAY;AACd,aAAO,WAAW,EAAE,MAAM,UAAU,OAAO,WAAW,cAAc,CAAC;AAAA,IACvE;AACA,WACE,gBAAAD,MAAC,OAAE,MAAY,WAAW,eACvB,iBACH;AAAA,EAEJ;AAEA,SACE,gBAAAA,MAAC,SAAI,WAAW,oCAAoC,SAAS,IAAI,cAAY,WAC1E,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,SAAS,UAAU,MAAM,SAAS;AAExC,WACE,gBAAAC,OAACF,OAAM,UAAN,EACE;AAAA,WAAK,QAAQ,CAAC,SACX,eAAe,KAAK,MAAM,KAAK,KAAK,IAEpC,gBAAAC,MAAC,UAAK,WAAW,SAAS,sBAAsB,IAAK,eAAK,OAAM;AAAA,MAEnE,CAAC,UAAU,gBAAAA,MAAC,UAAK,WAAU,QAAO,eAAC;AAAA,SANjB,KAOrB;AAAA,EAEJ,CAAC,GACH;AAEJ;;;AC7CM,gBAAAE,aAAA;AAHC,IAAM,QAA8B,CAAC,EAAE,UAAU,YAAY,GAAG,MAAM;AAC3E,SACE,gBAAAA,MAAC,SAAI,WAAU,mBACb,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,yCAAyC,SAAS;AAAA,MAE5D;AAAA;AAAA,EACH,GACF;AAEJ;AAOO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,YAAY;AACd,MAAM;AACJ,SACE,gBAAAA,MAAC,WAAM,WAAW,0BAA0B,SAAS,IAClD,UACH;AAEJ;AAOO,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA,YAAY;AACd,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,0DAA0D,SAAS;AAAA,MAE7E;AAAA;AAAA,EACH;AAEJ;AAQO,IAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,UAAU,gDAAgD,EAAE,IAAI,SAAS;AAAA,MACvF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;AAOO,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA,YAAY;AACd,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,kGAAkG,SAAS;AAAA,MAErH;AAAA;AAAA,EACH;AAEJ;AASO,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,iDAAiD,UAAU,mBAAmB,EAAE,IAAI,SAAS;AAAA,MACxG;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACpHA,OAAOC,UAAS,YAAAC,WAAU,UAAAC,eAAc;AAuDlC,gBAAAC,aAAA;AA5BN,IAAM,cAAcH,OAAM,cAGvB;AAAA,EACD,OAAO;AAAA,EACP,eAAe,MAAM;AAAA,EAAC;AACxB,CAAC;AAEM,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA,eAAe;AAAA,EACf,OAAO;AAAA,EACP;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAS,YAAY;AAC/D,QAAM,eAAe,oBAAoB;AACzC,QAAM,QAAQ,eAAe,kBAAkB;AAE/C,QAAM,oBAAoB,CAAC,aAAqB;AAC9C,QAAI,CAAC,cAAc;AACjB,uBAAiB,QAAQ;AAAA,IAC3B;AACA,oBAAgB,QAAQ;AAAA,EAC1B;AAEA,SACE,gBAAAE,MAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,OAAO,eAAe,kBAAkB,GACrE,0BAAAA,MAAC,SAAI,WAAuB,UAAS,GACvC;AAEJ;AAEO,IAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA,YAAY;AACd,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,QAAQ,SAAS;AAAA,MAC5B,MAAK;AAAA,MAEJ;AAAA;AAAA,EACH;AAEJ;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,UAAUH,OAAM,WAAW,WAAW;AAC5C,QAAM,WAAW,QAAQ,UAAU;AACnC,QAAM,YAAYE,QAA0B,IAAI;AAEhD,QAAM,cAAc,MAAM;AACxB,YAAQ,cAAc,KAAK;AAAA,EAC7B;AAEA,QAAM,gBAAgB,CAAC,MAA2B;AAChD,QAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,QAAE,eAAe;AACjB,cAAQ,cAAc,KAAK;AAAA,IAC7B;AAAA,EACF;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe,eAAe,KAAK;AAAA,MACnC,IAAI,eAAe,KAAK;AAAA,MACxB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,UAMP,WACI,wCACA,8FACN;AAAA,UACE,SAAS;AAAA;AAAA,MAGZ;AAAA;AAAA,EACH;AAEJ;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,UAAUH,OAAM,WAAW,WAAW;AAC5C,QAAM,WAAW,QAAQ,UAAU;AAEnC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE,gBAAAG;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,IAAI,eAAe,KAAK;AAAA,MACxB,mBAAiB,eAAe,KAAK;AAAA,MACrC,WAAW,QAAQ,SAAS;AAAA,MAE3B;AAAA;AAAA,EACH;AAEJ;;;AC9IA,YAAY,qBAAqB;AAQ/B,gBAAAC,aAAA;AADF,IAAM,SAAgC,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAChE,gBAAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iEAAiE,SAAS;AAAA,IACvF,GAAG;AAAA;AACN;AAEF,OAAO,cAA8B,qBAAK;AAM1C,IAAM,cAA0C,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAC1E,gBAAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,IACrD,GAAG;AAAA;AACN;AAEF,YAAY,cAA8B,sBAAM;AAMhD,IAAM,iBAAgD,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAChF,gBAAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,wEAAwE,SAAS;AAAA,IAC9F,GAAG;AAAA;AACN;AAEF,eAAe,cAA8B,yBAAS;;;ACxCtD,YAAY,2BAA2B;AACvC,SAAS,OAAO,cAAc,cAAc;AAsB1C,SAUE,OAAAC,OAVF,QAAAC,cAAA;AAlBF,IAAM,eAAqC;AAE3C,IAAM,sBAA4C;AAElD,IAAM,oBAA0C;AAEhD,IAAM,qBAA2C;AAEjD,IAAM,kBAAwC;AAE9C,IAAM,yBAA+C;AAOrD,IAAM,yBAAgE,CAAC,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,MAAM,MACjH,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACC,GAAG;AAAA,IAEH;AAAA;AAAA,MACD,gBAAAD,MAAC,gBAAa,WAAU,WAAU;AAAA;AAAA;AACpC;AAEF,uBAAuB,cACC,iCAAW;AAMnC,IAAM,yBAAgE,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAChG,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,uBAAuB,cACC,iCAAW;AAMnC,IAAM,sBAA0D,CAAC,EAAE,WAAW,aAAa,GAAG,KAAK,GAAG,MAAM,MAC1G,gBAAAA,MAAuB,8BAAtB,EACC,0BAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,GACF;AAEF,oBAAoB,cAAoC,8BAAQ;AAOhE,IAAM,mBAAoD,CAAC,EAAE,WAAW,OAAO,KAAK,GAAG,MAAM,MAC3F,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,iBAAiB,cAAoC,2BAAK;AAM1D,IAAM,2BAAoE,CAAC,EAAE,WAAW,UAAU,SAAS,KAAK,GAAG,MAAM,MACvH,gBAAAC;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA,IAEJ;AAAA,sBAAAD,MAAC,UAAK,WAAU,gEACd,0BAAAA,MAAuB,qCAAtB,EACC,0BAAAA,MAAC,SAAM,WAAU,WAAU,GAC7B,GACF;AAAA,MACC;AAAA;AAAA;AACH;AAEF,yBAAyB,cACD,mCAAa;AAMrC,IAAM,wBAA8D,CAAC,EAAE,WAAW,UAAU,KAAK,GAAG,MAAM,MACxG,gBAAAC;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,IAEJ;AAAA,sBAAAD,MAAC,UAAK,WAAU,gEACd,0BAAAA,MAAuB,qCAAtB,EACC,0BAAAA,MAAC,UAAO,WAAU,wBAAuB,GAC3C,GACF;AAAA,MACC;AAAA;AAAA;AACH;AAEF,sBAAsB,cAAoC,gCAAU;AAOpE,IAAM,oBAAsD,CAAC,EAAE,WAAW,OAAO,KAAK,GAAG,MAAM,MAC7F,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,kBAAkB,cAAoC,4BAAM;AAM5D,IAAM,wBAA8D,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAC9F,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,4BAA4B,SAAS;AAAA,IAClD,GAAG;AAAA;AACN;AAEF,sBAAsB,cAAoC,gCAAU;AAEpE,IAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA,GAAG;AACL,MAA6C;AAC3C,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,8CAA8C,SAAS;AAAA,MACpE,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,qBAAqB,cAAc;;;ACzLnC,SAAgB,YAAAE,WAAU,aAAAC,YAAW,UAAAC,SAAQ,eAAAC,oBAAmB;AA+E5D,SAEE,OAAAC,OAFF,QAAAC,cAAA;AAtDG,SAAS,YAAY;AAAA,EAC1B,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AACb,GAAqB;AAEnB,QAAM,eAAe,mBAAmB;AACxC,QAAM,CAAC,cAAc,eAAe,IAAIL,UAAS,MAAM;AAErD,QAAI,cAAc,OAAO,WAAW,aAAa;AAC/C,YAAM,SAAS,aAAa,QAAQ,eAAe,UAAU,EAAE;AAC/D,UAAI,WAAW,MAAM;AACnB,eAAO,WAAW;AAAA,MACpB;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAED,QAAM,SAAS,eAAe,iBAAiB;AAC/C,QAAM,aAAaE,QAAuB,IAAI;AAC9C,QAAM,CAAC,eAAe,gBAAgB,IAAIF,UAA6B,MAAS;AAGhF,EAAAC,WAAU,MAAM;AACd,QAAI,WAAW,SAAS;AACtB,uBAAiB,WAAW,QAAQ,YAAY;AAAA,IAClD;AAAA,EACF,GAAG,CAAC,UAAU,MAAM,CAAC;AAGrB,EAAAA,WAAU,MAAM;AACd,QAAI,cAAc,CAAC,cAAc;AAC/B,mBAAa,QAAQ,eAAe,UAAU,IAAI,OAAO,YAAY,CAAC;AAAA,IACxE;AAAA,EACF,GAAG,CAAC,YAAY,cAAc,YAAY,CAAC;AAE3C,QAAM,eAAeE,aAAY,MAAM;AACrC,QAAI,SAAU;AAEd,UAAM,WAAW,CAAC;AAElB,QAAI,CAAC,cAAc;AACjB,sBAAgB,QAAQ;AAAA,IAC1B;AAEA,mBAAe,QAAQ;AAAA,EACzB,GAAG,CAAC,UAAU,QAAQ,cAAc,YAAY,CAAC;AAEjD,SACE,gBAAAE,OAAC,SAAI,WAEH;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW,CAAC,MAAM;AAChB,cAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,cAAE,eAAe;AACjB,yBAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA,MAAK;AAAA,QACL,UAAU,WAAW,KAAK;AAAA,QAC1B,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,WAAW,WAAW,kCAAkC;AAAA,QAEvD;AAAA;AAAA,IACH;AAAA,IAGA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAU;AAAA,QACV,OAAO;AAAA,UACL,WAAW,SAAS,gBAAgB;AAAA,UACpC,SAAS,SAAS,IAAI;AAAA,QACxB;AAAA,QACA,eAAa,CAAC;AAAA,QAEb;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;AAmBO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAA4B;AAC1B,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,mGAAmG,SAAS;AAAA,MAEvH;AAAA,wBAAAA,OAAC,SAAI,WAAU,kBACb;AAAA,0BAAAD,MAAC,QAAG,WAAU,wDACX,iBACH;AAAA,UACC,YACC,gBAAAA,MAAC,OAAE,WAAU,qDACV,oBACH;AAAA,WAEJ;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,sBACZ,kBACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,2DACT,SAAS,eAAe,EAC1B;AAAA,YACA,MAAK;AAAA,YACL,QAAO;AAAA,YACP,SAAQ;AAAA,YAER,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,GAAE;AAAA;AAAA,YACJ;AAAA;AAAA,QACF,GAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAqBA,IAAM,uBAAuB;AAAA,EAC3B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AACZ,GAA2B;AACzB,QAAM,CAAC,aAAa,cAAc,IAAIJ,UAAS,MAAM;AACnD,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO,aAAa,QAAQ,UAAU,UAAU,YAAY,MAAM;AAAA,IACpE;AACA,WAAO;AAAA,EACT,CAAC;AACD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAS,KAAK;AAE1D,QAAM,gBAAgBG,aAAY,MAAM;AACtC,sBAAkB,IAAI;AAGtB,eAAW,MAAM;AACf,qBAAe,IAAI;AACnB,mBAAa,QAAQ,UAAU,UAAU,cAAc,MAAM;AAC7D,kBAAY;AAAA,IACd,GAAG,GAAG;AAAA,EACR,GAAG,CAAC,YAAY,SAAS,CAAC;AAE1B,MAAI,aAAa;AACf,WAAO;AAAA,EACT;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA;AAAA;AAAA,UAGP,iBAAiB,qDAAqD,2BAA2B;AAAA,UACjG,qBAAqB,OAAO,CAAC;AAAA,UAC7B,SAAS;AAAA;AAAA,MAGb,0BAAAC,OAAC,SAAI,WAAU,iBACb;AAAA,wBAAAD,MAAC,SAAI,WAAU,UAAU,UAAS;AAAA,QAClC,gBAAAA,MAAC,SAAI,WAAU,yBACb,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAW,4IACT,YAAY,SACR,4DACA,4DACN;AAAA,YAEC;AAAA;AAAA,QACH,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAaO,SAAS,eAAe,UAAiC,CAAC,GAAG;AAClE,QAAM,EAAE,cAAc,OAAO,WAAW,IAAI;AAE5C,QAAM,CAAC,QAAQ,SAAS,IAAIJ,UAAS,MAAM;AACzC,QAAI,cAAc,OAAO,WAAW,aAAa;AAC/C,YAAM,SAAS,aAAa,QAAQ,eAAe,UAAU,EAAE;AAC/D,UAAI,WAAW,MAAM;AACnB,eAAO,WAAW;AAAA,MACpB;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAED,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY;AACd,mBAAa,QAAQ,eAAe,UAAU,IAAI,OAAO,MAAM,CAAC;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,YAAY,MAAM,CAAC;AAEvB,QAAM,SAASE,aAAY,MAAM;AAC/B,cAAU,CAAC,SAAS,CAAC,IAAI;AAAA,EAC3B,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA,aAAY,MAAM;AAC7B,cAAU,IAAI;AAAA,EAChB,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQA,aAAY,MAAM;AAC9B,cAAU,KAAK;AAAA,EACjB,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["jsx","jsxs","jsx","jsx","jsx","jsxs","useId","jsx","jsxs","jsx","jsxs","React","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","useRef","useEffect","useCallback","jsx","jsxs","sizeClasses","useEffect","useRef","useState","jsx","jsxs","handleKeyDown","React","jsx","jsxs","jsx","React","useState","useRef","jsx","jsx","jsx","jsxs","useState","useEffect","useRef","useCallback","jsx","jsxs"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dynamicnorway/react",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "React component library for Dynamic",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@radix-ui/react-avatar": "^1.1.11",
|
|
22
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
23
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
24
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
25
|
+
"class-variance-authority": "^0.7.1",
|
|
26
|
+
"clsx": "^2.1.1",
|
|
27
|
+
"lucide-react": "^1.21.0",
|
|
28
|
+
"tailwind-merge": "^3.5.0"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
32
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
33
|
+
"tailwindcss": "^4.0.0",
|
|
34
|
+
"@dynamicnorway/tokens": "1.0.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@testing-library/dom": "^10.4.1",
|
|
38
|
+
"@testing-library/jest-dom": "^6.1.5",
|
|
39
|
+
"@testing-library/react": "^16.3.2",
|
|
40
|
+
"@testing-library/user-event": "^14.6.1",
|
|
41
|
+
"@types/react": "^19.2.14",
|
|
42
|
+
"@types/react-dom": "^19.2.3",
|
|
43
|
+
"@vitejs/plugin-react": "^6.0.2",
|
|
44
|
+
"jsdom": "^29.1.1",
|
|
45
|
+
"react": "^19.2.4",
|
|
46
|
+
"react-dom": "^19.2.4",
|
|
47
|
+
"tailwindcss": "^4.2.2",
|
|
48
|
+
"tsup": "^8.5.0",
|
|
49
|
+
"typescript": "^6.0.3",
|
|
50
|
+
"vitest": "^4.1.0",
|
|
51
|
+
"@dynamicnorway/tokens": "1.0.0"
|
|
52
|
+
},
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"access": "public"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"build": "tsup",
|
|
58
|
+
"dev": "tsup --watch",
|
|
59
|
+
"lint": "eslint src --max-warnings 0",
|
|
60
|
+
"typecheck": "tsc --noEmit",
|
|
61
|
+
"test": "vitest run"
|
|
62
|
+
}
|
|
63
|
+
}
|