@pixonui/react 0.1.0 → 0.3.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/dist/index.d.mts +1871 -826
- package/dist/index.d.ts +1871 -826
- package/dist/index.js +29 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/components/button/PrimaryButton.tsx","../src/utils/Slot.tsx","../src/components/button/Button.tsx","../src/components/button/GlowButton.tsx","../src/components/card/MetricCard.tsx","../src/components/typography/Text.tsx","../src/components/typography/Heading.tsx","../src/components/typography/TextGradient.tsx","../src/components/typography/ShinyText.tsx","../src/hooks/useInView.ts","../src/components/feedback/Reveal.tsx","../src/components/typography/HeroText.tsx","../src/components/typography/LetterPullup.tsx","../src/components/form/Label.tsx","../src/components/form/TextInput.tsx","../src/components/form/Checkbox.tsx","../src/components/form/Switch.tsx","../src/components/form/Select.tsx","../src/hooks/useFloating.ts","../src/components/overlay/Popover.tsx","../src/components/form/Combobox.tsx","../src/components/form/Slider.tsx","../src/components/data-display/Calendar.tsx","../src/components/form/DatePicker.tsx","../src/components/data-display/ScrollArea.tsx","../src/components/form/DateTimePicker.tsx","../src/components/form/Textarea.tsx","../src/components/form/RadioGroup.tsx","../src/components/form/Form.tsx","../src/components/feedback/Toast.tsx","../src/components/feedback/ToastProvider.tsx","../src/components/feedback/Alert.tsx","../src/components/feedback/Progress.tsx","../src/components/data-display/Avatar.tsx","../src/components/data-display/Accordion.tsx","../src/components/navigation/Tabs.tsx","../src/components/navigation/Sidebar.tsx","../src/primitives/Surface.tsx","../src/components/navigation/Navbar.tsx","../src/components/overlay/DropdownMenu.tsx","../src/components/navigation/UserMenu.tsx","../src/components/navigation/Breadcrumb.tsx","../src/components/navigation/Pagination.tsx","../src/components/overlay/Modal.tsx","../src/components/overlay/Dialog.tsx","../src/components/overlay/Drawer.tsx","../src/components/overlay/Tooltip.tsx","../src/components/overlay/Command.tsx","../src/hooks/useToast.ts","../src/hooks/useTimer.ts","../src/hooks/useIntersection.ts","../src/hooks/useForm.ts","../src/hooks/useResponsive.ts","../src/hooks/useScroll.ts","../src/primitives/ScrollProgress.tsx","../src/primitives/Badge.tsx","../src/primitives/Divider.tsx","../src/primitives/Kbd.tsx","../src/components/feedback/EmptyState.tsx","../src/components/feedback/Skeleton.tsx","../src/components/data-display/Table.tsx","../src/components/data-display/DataTable.tsx","../src/components/data-display/kanban/useKanbanTasks.ts","../src/components/data-display/kanban/useKanbanDragAndDrop.ts","../src/components/data-display/kanban/useKanbanBoardScroll.ts","../src/components/data-display/kanban/KanbanCard.tsx","../src/components/data-display/kanban/KanbanColumnContent.tsx","../src/components/data-display/Kanban.tsx","../src/components/form/FileDropzone.tsx","../src/components/data-display/KanbanTaskModal.tsx","../src/components/data-display/KanbanFilterBar.tsx","../src/components/data-display/KanbanCalendarView.tsx","../src/components/card/Card.tsx","../src/components/data-display/Image.tsx","../src/components/layout/Container.tsx","../src/components/layout/Stack.tsx","../src/components/layout/Grid.tsx","../src/components/layout/Background.tsx","../src/theme/ThemeProvider.tsx","../src/theme/ThemeToggle.tsx","../src/components/data-display/chart/Chart.tsx","../src/components/data-display/chart/BarChart.tsx","../src/components/data-display/chart/AreaChart.tsx","../src/components/data-display/chart/LineChart.tsx","../src/components/data-display/chart/PieChart.tsx","../src/components/data-display/chart/RadarChart.tsx","../src/components/data-display/chart/Sparkline.tsx","../src/components/data-display/chart/YAxis.tsx","../src/components/data-display/UserPreview.tsx","../src/components/data-display/Timeline.tsx","../src/components/data-display/Tree.tsx","../src/components/data-display/Terminal.tsx","../src/components/data-display/Marquee.tsx","../src/components/data-display/StatusDot.tsx","../src/components/form/OTPInput.tsx","../src/components/form/NumberInput.tsx","../src/components/form/ToggleGroup.tsx","../src/components/feedback/Rating.tsx","../src/components/navigation/Stepper.tsx","../src/components/layout/Spotlight.tsx","../src/components/ai/AIPromptInput.tsx","../src/components/ai/AIResponse.tsx","../src/components/chat/ChatLayout.tsx","../src/components/chat/ChatSidebar.tsx","../src/components/chat/ChatHeader.tsx","../src/components/feedback/Motion.tsx","../src/components/chat/MessageBubble.tsx","../src/components/chat/MessageList.tsx","../src/components/chat/ChatInput.tsx","../src/components/data-display/Separator.tsx","../src/components/chat/ChatProfile.tsx","../src/components/feedback/MotionGroup.tsx","../src/components/feedback/TextMotion.tsx","../src/components/feedback/Parallax.tsx","../src/components/feedback/Magnetic.tsx","../src/components/feedback/NumberTicker.tsx","../src/components/data-display/Collapse.tsx","../src/components/feedback/PageLoader.tsx","../src/components/feedback/PageTransition.tsx"],"names":["cn","inputs","twMerge","clsx","PrimaryButton","React","children","className","leftIcon","rightIcon","props","ref","jsxs","jsx","Slot","pt","forwardedRef","child","node","buttonVariants","cva","Button","variant","size","shape","shadow","asChild","isLoading","disabled","GlowButton","localRef","useRef","handleMove","e","el","rect","x","y","TokenBadge","accent","map","AccentGlow","SparkWave","color","MetricCard","icon","value","subtext","showWave","onClick","setCenter","r","waveColors","waveColor","Text","Component","weight","code","Heading","TextGradient","from","to","via","direction","animate","ShinyText","shimmerColor","duration","baseColor","useInView","options","isInView","setIsInView","useState","hasAnimated","setHasAnimated","enabled","useEffect","element","observer","entry","Reveal","delay","boxColor","directionClasses","HeroText","title","highlight","subtitle","gradient","glow","content","LetterPullup","text","letters","letter","Label","required","inputVariants","TextInput","containerClassName","label","errorMsg","id","inputId","hasError","Checkbox","error","checked","defaultChecked","onChange","isChecked","setIsChecked","handleClick","newValue","Switch","Select","name","defaultValue","placeholder","isOpen","setIsOpen","internalValue","setInternalValue","activeIndex","setActiveIndex","containerRef","isControlled","currentValue","selectedOption","opt","index","handleClickOutside","event","handleSelect","optionValue","handleKeyDown","prev","option","useFloating","triggerRef","contentRef","side","align","sideOffset","alignOffset","position","setPosition","isPositioned","setIsPositioned","updatePosition","useCallback","triggerRect","contentRect","top","left","padding","viewportWidth","viewportHeight","useLayoutEffect","resizeObserver","PopoverContext","createContext","Popover","open","onOpenChange","internalOpen","setInternalOpen","newOpen","PopoverTrigger","context","useContext","PopoverContent","handleOutsideClick","getTransformOrigin","createPortal","ComboboxContext","Combobox","controlledValue","onValueChange","filter","search","usePopover","searchTerm","setSearchTerm","items","setItems","handleValueChange","registerItem","next","visibleItems","useMemo","_","item","hasVisibleItems","ComboboxTrigger","ComboboxContent","ComboboxInput","ComboboxList","ComboboxEmpty","ComboboxItem","textValue","isVisible","isSelected","itemIndex","isActive","Slider","min","max","step","trackRef","percentage","clientX","width","steps","handleMouseDown","handleMouseMove","handleMouseUp","handleTouchStart","startTouch","handleTouchMove","moveTouch","handleTouchEnd","DAYS","MONTHS","Calendar","minDate","maxDate","currentDate","setCurrentDate","viewDate","setViewDate","getDaysInMonth","year","month","getFirstDayOfMonth","handlePrevMonth","handleNextMonth","handleDateClick","day","newDate","isToday","today","renderDays","daysInMonth","firstDay","days","i","selected","ChevronLeft","ChevronRight","DatePicker","date","setDate","formatDate","d","CalendarIcon","ScrollArea","orientation","scrollbarSize","DateTimePicker","hours","setHours","minutes","setMinutes","handleDateSelect","updatedDate","handleTimeChange","type","val","num","newHours","newMinutes","baseDate","formatDateTime","Clock","Textarea","generatedId","RadioGroupContext","RadioGroup","RadioGroupItem","isDisabled","FormItemContext","FormItem","FormLabel","FormControl","rest","FormDescription","FormMessage","Icons","Toast","description","onDismiss","timer","ToastContext","ToastProvider","toasts","setToasts","dismiss","toast","updateToast","t","promise","loadingOptions","data","successOptions","err","errorOptions","Alert","Icon","Progress","isIndeterminate","hasStripe","indicatorClassName","variants","sizeClasses","Avatar","src","alt","fallback","imageError","setImageError","AccordionContext","Accordion","itemValue","arrayValue","v","AccordionItemContext","AccordionItem","AccordionTrigger","ChevronDown","AccordionContent","TabsContext","Tabs","TabsList","TabsTrigger","TabsContent","Sidebar","SidebarHeader","SidebarContent","SidebarFooter","SidebarItem","active","badge","SidebarGroup","surfaceVariants","Surface","maxWidthClasses","Navbar","logo","links","actions","maxWidth","isScrolled","setIsScrolled","isMobileMenuOpen","setIsMobileMenuOpen","handleScroll","link","X","Menu","DropdownMenuContext","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","currentIndex","nextIndex","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","UserMenu","avatarSrc","avatarFallback","Settings","User","LogOut","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","BreadcrumbEllipsis","Pagination","PaginationContent","PaginationItem","PaginationLink","PaginationPrevious","PaginationNext","PaginationEllipsis","Modal","onClose","dialogRef","dialog","handleCancel","ModalHeader","ModalFooter","ModalTitle","ModalDescription","Dialog","DialogHeader","DialogFooter","DialogTitle","DialogDescription","Drawer","setIsVisible","shouldRender","setShouldRender","overlayRef","handleEscape","handleBackdropClick","positionClasses","translateClasses","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","Tooltip","timeoutRef","floatingPosition","showTooltip","hideTooltip","animationClasses","Command","CommandDialog","CommandInput","Search","CommandList","CommandEmpty","CommandGroup","heading","CommandItem","CommandShortcut","useToast","useTimer","initialSeconds","seconds","setSeconds","setIsActive","intervalRef","start","pause","reset","totalSeconds","secs","useIntersection","elementRef","threshold","root","rootMargin","freezeOnceVisible","setEntry","frozen","updateEntry","observerParams","useForm","initialValues","onSubmit","values","setValues","errors","setErrors","isSubmitting","setIsSubmitting","handleChange","handleSubmit","form","newErrors","input","register","breakpoints","useMediaQuery","query","matches","setMatches","media","listener","useBreakpoint","breakpoint","useContainerQuery","setSize","entries","useScroll","height","ScrollProgress","scrollProgressY","badgeVariants","Badge","Divider","Kbd","EmptyState","action","Info","Skeleton","Table","wrapperClassName","rounded","maxHeight","TableHeader","TableBody","TableRow","hoverable","optimized","TableHead","TableCell","DataTable","columns","searchPlaceholder","searchKeys","onRowClick","setSearch","sortConfig","setSortConfig","processedData","filtered","key","a","aValue","bValue","handleSort","col","ArrowUp","ArrowDown","ArrowUpDown","idx","useKanbanTasks","tasks","groupBy","pageSize","visibleCounts","setVisibleCounts","sortedTasks","b","field","comparison","priorityOrder","aPrio","bPrio","tasksByGroupAndColumn","groups","task","groupValue","group","defaultGroup","handleLoadMore","columnId","useKanbanDragAndDrop","selectedTaskIds","onTaskMove","onColumnMove","onTaskDrop","onTaskDragStart","onTaskDragEnd","draggedTaskId","setDraggedTaskId","draggedColumnId","setDraggedColumnId","dragOverColumnId","setDragOverColumnId","dragOverTaskId","setDragOverTaskId","dropPosition","setDropPosition","touchTimeout","lastTouchPos","handleDragStart","handleDragEnd","taskId","midpoint","toColumnId","toTaskId","fromColumnId","touch","target","columnEl","taskEl","useKanbanBoardScroll","isDraggingBoard","setIsDraggingBoard","startX","setStartX","scrollLeft","setScrollLeft","boardRef","walk","KanbanCard","activeTimerTaskId","selectable","cardClassName","onTaskClick","onTaskSelectionChange","onTaskRemove","onTaskTimerToggle","renderCard","Fragment","getPriorityColor","priority","newSelection","Lock","Trash2","GripVertical","tag","Pause","Play","MessageSquare","Paperclip","KanbanColumnContent","column","columnMap","groupName","visibleCount","quickAddColumnId","quickAddValue","handleDragOver","handleDrop","handleSetQuickAdd","handleQuickAdd","setQuickAddValue","setQuickAddColumnId","onTaskFullAdd","columnTasks","visibleTasks","hasMore","Plus","LayoutGrid","Kanban","onTaskAdd","onColumnAction","columnClassName","accentColor","showTaskCount","showDividers","columnHeight","handleBoardMouseDown","handleBoardMouseMove","handleBoardMouseUp","handleTaskClickInternal","colIndex","c","taskIndex","currentGroupName","nextTask","prevTask","isOverLimit","AlertTriangle","MoreHorizontal","SortAsc","CalendarDays","Archive","dropzoneVariants","FileDropzone","onDrop","maxFiles","maxSize","isDragActive","setIsDragActive","files","setFiles","setError","inputRef","handleDragLeave","validateFiles","fileList","f","droppedFiles","selectedFiles","removeFile","newFiles","Upload","file","FileIcon","KanbanTaskModal","onSave","setTitle","setDescription","setPriority","tags","setTags","tagInput","setTagInput","handleSave","addTag","removeTag","tagToRemove","KanbanFilterBar","onSearchChange","onFilterChange","priorityOptions","tagOptions","assigneeOptions","activeFilters","setActiveFilters","toggleFilter","category","current","newFilters","clearFilters","activeCount","FilterPopover","onSelect","Filter","Check","KanbanCalendarView","onAddTask","firstDayOfMonth","totalDays","startDay","prevMonth","nextMonth","monthNames","getTasksForDate","taskDate","currentYear","dateTasks","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Image","onLoad","onError","setIsLoading","setHasError","handleLoad","handleError","Container","Stack","gap","justify","wrap","style","Grid","cols","sm","md","lg","xl","Background","noise","patternColor","mask","followMouse","bgColor","getBackgroundStyle","baseStyle","effectiveColor","maskStyle","initialState","ThemeProviderContext","ThemeProvider","defaultTheme","storageKey","theme","setTheme","mediaQuery","applySystemTheme","useTheme","ThemeToggle","Sun","Moon","ChartContext","useChart","normalize","ChartContainer","hoveredIndex","setHoveredIndex","containerWidth","setContainerWidth","maxValue","ChartGrid","lines","chartHeight","ChartXAxis","itemWidth","point","ChartTooltip","renderTooltip","ChartSkeleton","BarChart","showValues","animationDelay","onValueClick","chartWidth","barWidth","colors","barHeight","isHovered","AreaChart","points","linePath","p","areaPath","LineChart","curve","strokeWidth","strokeColor","p0","p1","cp1x","cp1y","cp2x","cp2y","PieChart","innerRadius","padAngle","showLabels","radius","centerX","centerY","total","acc","cur","currentAngle","slices","angle","startAngle","endAngle","getCoordinatesForPercent","percent","slice","effectiveStartAngle","effectiveEndAngle","startY","endX","endY","largeArcFlag","rInner","innerStartX","innerStartY","innerEndX","innerEndY","pathData","midAngle","labelRadius","labelX","labelY","RadarChart","keys","userMaxValue","center","k","angleSlice","colorMap","strokeMap","level","levelRadius","kIndex","colorName","fill","stroke","Sparkline","range","fillPath","ChartYAxis","ticks","format","userPreviewVariants","UserPreview","user","onFollow","onMessage","stat","timelineItemVariants","TimelineItem","status","isLast","Timeline","TreeNodeItem","depth","hasChildren","handleToggle","FolderOpen","Folder","File","Tree","Terminal","TerminalLine","prefix","Marquee","pauseOnHover","speed","speeds","statusDotVariants","StatusDot","otpInputVariants","OTPInput","length","onComplete","localValue","setLocalValue","inputsRef","newVal","newLocalValue","stringValue","handlePaste","pastedData","char","digit","numberInputVariants","NumberInput","handleDecrement","handleIncrement","Minus","toggleGroupVariants","toggleItemVariants","ToggleGroup","fullWidth","Rating","readOnly","hoverValue","setHoverValue","sizes","isFilled","Star","Stepper","currentStep","onStepClick","isCompleted","isCurrent","isClickable","Spotlight","divRef","aiPromptInputVariants","AIPromptInput","isGenerating","onAttach","onFilesSelected","onStop","onMic","maxLength","footer","attachments","onRemoveAttachment","accept","multiple","textareaRef","fileInputRef","adjustHeight","handleInput","handleAttachClick","handleFileChange","att","Mic","Square","Sparkles","aiResponseVariants","AIResponse","onCopy","onRegenerate","onFeedback","onShare","onEdit","timestamp","sources","model","usage","source","ExternalLink","Copy","Share","Edit","RefreshCw","ThumbsUp","ThumbsDown","ChatLayout","ChatSidebar","conversations","activeId","onNewChat","chat","ChatHeader","onBack","onInfo","ArrowLeft","Phone","Video","MoreVertical","motionVariants","Motion","preset","viewport","visible","once","shouldShow","initialClasses","visibleClasses","MessageBubble","message","isOwn","showAvatar","showStatus","onReply","onReact","onDelete","Reply","Smile","CheckCheck","emoji","users","MessageList","messages","currentUserId","onLoadMore","isLoadingMore","bottomRef","shouldAutoScroll","setShouldAutoScroll","isAtBottom","groupedMessages","msgs","msg","prevMsg","nextMsg","isLastInGroup","ChatInput","onSend","setContent","isUploading","setIsUploading","mentionSearch","setMentionSearch","mentionIndex","setMentionIndex","filteredUsers","u","mentionMatch","insertMention","textBefore","textAfter","handleSend","AtSign","Send","separatorVariants","Separator","decorative","ChatProfile","Bell","Ban","MotionGroup","stagger","TextMotion","Parallax","windowHeight","translate","Magnetic","strength","clientY","distanceX","distanceY","handleMouseLeave","NumberTicker","decimalPlaces","displayValue","setDisplayValue","startTimeRef","progress","timeout","Collapse","controlledOpen","defaultOpen","triggerClassName","contentClassName","uncontrolledOpen","setUncontrolledOpen","newState","PageLoader","fullscreen","baseStyles","Loader2","PageTransition","useViewTransition","currentPreset"],"mappings":"q1BAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCIO,IAAMG,GAAgBC,WAAAA,CAAM,UAAA,CACjC,CAAC,CAAE,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,EAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAErDC,KAAC,QAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAMD,CAAAA,CAAM,IAAA,EAAQ,SACpB,SAAA,CAAWV,CAAAA,CACT,qFACA,2DAAA,CACA,yCAAA,CACA,4CACA,6BAAA,CACA,mEAAA,CACA,qBAAA,CACA,iDAAA,CACA,0DAAA,CACAO,CACF,EACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oLAAoL,CAAA,CACpMD,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yCAAA,CACb,QAAA,CAAA,CAAAJ,EACAF,CAAAA,CACAG,CAAAA,CAAAA,CACH,GACF,CAGN,EAEAL,GAAc,WAAA,CAAc,eAAA,CCjCrB,IAAMU,GAAaC,EAAA,CAAA,UAAA,CACxB,CAAC,CAAE,QAAA,CAAAT,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGM,CAAAA,GAAiB,CACxC,GAAI,CAAOD,kBAAeT,CAAQ,CAAA,CAChC,OAAO,IAAA,CAGT,IAAMW,CAAAA,CAAQX,EAEd,OAAaS,EAAA,CAAA,YAAA,CAAaE,CAAAA,CAAO,CAC/B,GAAGP,CAAAA,CACH,GAAGO,CAAAA,CAAM,KAAA,CACT,GAAA,CAAMC,CAAAA,EAA6B,CAE7B,OAAOF,GAAiB,UAAA,CAC1BA,CAAAA,CAAaE,CAAI,CAAA,CACRF,CAAAA,GACRA,EAA4D,OAAA,CAAUE,CAAAA,CAAAA,CAIzE,GAAM,CAAE,GAAA,CAAAP,CAAI,EAAIM,CAAAA,CACZ,OAAON,CAAAA,EAAQ,UAAA,CACjBA,CAAAA,CAAIO,CAAI,EACCP,CAAAA,EAAO,SAAA,GAAaA,CAAAA,GAC5BA,CAAAA,CAAmD,OAAA,CAAUO,CAAAA,EAElE,EACA,SAAA,CAAWlB,CAAAA,CAAGU,EAAM,SAAA,CAAWO,CAAAA,CAAM,MAAM,SAAS,CACtD,CAAC,CACH,CACF,CAAA,CAEAH,GAAK,WAAA,CAAc,MAAA,CClCnB,IAAMK,EAAAA,CAAiBC,GAAAA,CACrB,oTAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,QAAS,yFAAA,CACT,SAAA,CAAW,qLACX,OAAA,CAAS,kKAAA,CACT,KAAA,CAAO,2JAAA,CACP,MAAA,CAAQ,sKAAA,CACR,QAAS,8LAAA,CACT,KAAA,CAAO,8KACT,CAAA,CACA,IAAA,CAAM,CACJ,GAAI,0BAAA,CACJ,EAAA,CAAI,yBAAA,CACJ,EAAA,CAAI,2BAAA,CACJ,IAAA,CAAM,gDACR,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,aAAA,CACT,KAAM,cAAA,CACN,MAAA,CAAQ,YACV,CAAA,CACA,MAAA,CAAQ,CACN,KAAM,EAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,iBAAkB,CAChB,CACE,OAAA,CAAS,SAAA,CACT,MAAA,CAAQ,IAAA,CACR,MAAO,0FACT,CAAA,CACA,CACE,OAAA,CAAS,WAAA,CACT,OAAQ,IAAA,CACR,KAAA,CAAO,WACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,IAAA,CACN,KAAA,CAAO,SAAA,CACP,OAAQ,IACV,CACF,CACF,CAAA,CAmBaC,CAAAA,CAAShB,WAAAA,CAAM,WAC1B,CAAC,CACC,UAAAE,CAAAA,CACA,OAAA,CAAAe,EACA,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CAAU,KAAA,CACV,QAAA,CAAAlB,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,UAAAkB,CAAAA,CACA,QAAA,CAAArB,CAAAA,CACA,QAAA,CAAAsB,CAAAA,CACA,GAAGlB,CACL,CAAA,CAAGC,CAAAA,GAICC,KAHWc,CAAAA,CAAUZ,EAAAA,CAAO,SAG3B,CACC,GAAA,CAAKH,CAAAA,CACL,QAAA,CAAUiB,CAAAA,EAAYD,CAAAA,CACtB,UAAW3B,CAAAA,CAAGmB,EAAAA,CAAe,CAAE,OAAA,CAAAG,CAAAA,CAAS,IAAA,CAAAC,EAAM,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,SAAA,CAAAlB,CAAU,CAAC,CAAC,CAAA,CACxE,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAY,IAAY,SAAA,EAAa,CAACI,CAAAA,EACzBb,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0LAA0L,CAAA,CAG5MD,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kDAAA,CACb,QAAA,CAAA,CAAAe,GACCf,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAA+C,KAAA,CAAM,4BAAA,CAA6B,KAAK,MAAA,CAAO,OAAA,CAAQ,YACnH,QAAA,CAAA,CAAAC,GAAAA,CAAC,UAAO,SAAA,CAAU,YAAA,CAAa,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAE,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,CAAA,CAC5FA,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,cAAA,CAAe,CAAA,CAAE,kHAAkH,CAAA,CAAA,CACvK,CAAA,CAED,CAACc,CAAAA,EAAanB,CAAAA,EAAYK,IAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,MAAA,CAAQuB,CAAAA,GAAS,IAAA,EAAQ,QAAQ,CAAA,CAAI,QAAA,CAAAf,CAAAA,CAAS,CAAA,CAC5FF,CAAAA,CACA,CAACqB,GAAalB,CAAAA,EAAaI,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,MAAA,CAAQuB,IAAS,IAAA,EAAQ,QAAQ,EAAI,QAAA,CAAAd,CAAAA,CAAU,GACjG,CAAA,CAAA,CACF,CAGN,EAEAY,CAAAA,CAAO,WAAA,CAAc,QAAA,CC3Gd,IAAMQ,EAAAA,CAAaxB,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,QAAA,CAAAC,EAAU,SAAA,CAAAC,CAAAA,CAAW,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAGC,IAAQ,CAC/D,IAAMmB,EAAWC,MAAAA,CAA0B,IAAI,EAEzCC,CAAAA,CAAcC,CAAAA,EAA2C,CAC7D,IAAMC,CAAAA,CAAKJ,CAAAA,CAAS,QACpB,GAAI,CAACI,EAAI,OACT,IAAMC,EAAOD,CAAAA,CAAG,qBAAA,EAAsB,CAChCE,CAAAA,CAAIH,CAAAA,CAAE,OAAA,CAAUE,EAAK,IAAA,CACrBE,CAAAA,CAAIJ,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BD,EAAG,KAAA,CAAM,WAAA,CAAY,WAAA,CAAa,CAAA,EAAGE,CAAC,CAAA,EAAA,CAAI,EAC1CF,CAAAA,CAAG,KAAA,CAAM,YAAY,WAAA,CAAa,CAAA,EAAGG,CAAC,CAAA,EAAA,CAAI,EAC5C,CAAA,CAGA,OAAAhC,WAAAA,CAAM,mBAAA,CAAoBM,EAAK,IAAMmB,CAAAA,CAAS,OAA4B,CAAA,CAGxElB,IAAAA,CAAC,QAAA,CAAA,CACC,IAAKkB,CAAAA,CACL,WAAA,CAAaE,CAAAA,CACb,IAAA,CAAMtB,CAAAA,CAAM,IAAA,EAAQ,SACpB,SAAA,CAAWV,CAAAA,CACT,qFACA,kDAAA,CACA,2DAAA,CACA,+CACA,6BAAA,CACA,iEAAA,CACA,qBAAA,CACA,0DAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAGJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,0GAAA,CACV,MAAO,CACL,UAAA,CAAY,wGACd,CAAA,CACF,CAAA,CAGAA,GAAAA,CAAC,OACC,SAAA,CAAU,sHAAA,CACV,MAAO,CACL,UAAA,CAAY,yGACZ,SAAA,CAAW,0DAAA,CACX,QAAA,CAAU,yBAAA,CACV,aAAA,CAAe,SAAA,CACf,oBAAqB,KAAA,CACrB,OAAA,CAAS,KACX,CAAA,CACF,CAAA,CAEAD,IAAAA,CAAC,QAAK,SAAA,CAAU,8CAAA,CACb,QAAA,CAAA,CAAAJ,CAAAA,CACAF,CAAAA,CACAG,CAAAA,CAAAA,CACH,GACF,CAEJ,CACF,EAEAoB,EAAAA,CAAW,WAAA,CAAc,aCvEzB,SAASS,EAAAA,CAAW,CAClB,OAAAC,CAAAA,CAAS,MAAA,CACT,QAAA,CAAAjC,CACF,CAAA,CAGG,CACD,IAAMkC,CAAAA,CAA8B,CAClC,KAAM,gBAAA,CACN,KAAA,CAAO,kBACP,MAAA,CAAQ,kBAAA,CACR,IAAA,CAAM,gBAAA,CACN,IAAA,CAAM,gBAAA,CACN,QAAS,mBAAA,CACT,MAAA,CAAQ,kBACV,CAAA,CAEA,OACE3B,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,wDAAA,CAA0DwC,CAAAA,CAAID,CAAM,CAAA,EAAKC,EAAI,IAAI,CAAA,CACjG,SAAAlC,CAAAA,CACH,CAEJ,CAEA,SAASmC,EAAAA,CAAW,CAAE,MAAA,CAAAF,CAAAA,CAAS,MAAO,EAAsF,CAC1H,IAAMC,CAAAA,CAA8B,CAClC,IAAA,CAAM,iDAAA,CACN,MAAO,mDAAA,CACP,MAAA,CAAQ,qDAAA,CACR,IAAA,CAAM,iDAAA,CACN,IAAA,CAAM,kDACN,OAAA,CAAS,uDAAA,CACT,OAAQ,qDACV,CAAA,CAEA,OACE3B,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,qFAAA,CACA,2BAAA,CACAwC,EAAID,CAAM,CAAA,EAAKC,EAAI,IACrB,CAAA,CACF,CAEJ,CAEA,SAASE,EAAAA,CAAU,CAAE,KAAA,CAAAC,CAAAA,CAAQ,cAAe,CAAA,CAAuB,CACjE,OACE9B,GAAAA,CAAC,KAAA,CAAA,CACC,QAAQ,YAAA,CACR,SAAA,CAAU,UAAA,CACV,IAAA,CAAK,MAAA,CACL,KAAA,CAAM,6BACN,aAAA,CAAY,MAAA,CAEZ,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,yEACF,MAAA,CAAQ8B,CAAAA,CACR,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,eAAe,OAAA,CACf,OAAA,CAAQ,OACV,CAAA,CACF,CAEJ,CAWO,IAAMC,EAAAA,CAAavC,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,OAAAkC,CAAAA,CAAS,MAAA,CAAQ,IAAA,CAAAM,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,QAAAC,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAW,KAAA,CAAO,OAAA,CAAAC,CAAAA,CAAS,UAAA1C,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAClG,IAAMmB,CAAAA,CAAWC,MAAAA,CAA8B,IAAI,CAAA,CAE7CmB,CAAAA,CAAY,IAAM,CACtB,IAAMhB,CAAAA,CAAKJ,CAAAA,CAAS,OAAA,CACpB,GAAI,CAACI,CAAAA,CAAI,OACT,IAAMiB,CAAAA,CAAIjB,CAAAA,CAAG,qBAAA,GACbA,CAAAA,CAAG,KAAA,CAAM,YAAY,KAAA,CAAO,CAAA,EAAG,KAAK,KAAA,CAAMiB,CAAAA,CAAE,KAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,EAC1DjB,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAG,IAAA,CAAK,MAAMiB,CAAAA,CAAE,MAAA,CAAS,CAAC,CAAC,CAAA,EAAA,CAAI,EAC7D,EAEMnB,CAAAA,CAAcC,CAAAA,EAAwB,CAC1C,IAAMC,CAAAA,CAAKJ,EAAS,OAAA,CACpB,GAAI,CAACI,CAAAA,CAAI,OACT,IAAMiB,EAAIjB,CAAAA,CAAG,qBAAA,EAAsB,CACnCA,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,MAAO,CAAA,EAAGD,CAAAA,CAAE,OAAA,CAAUkB,CAAAA,CAAE,IAAI,CAAA,EAAA,CAAI,EACrDjB,CAAAA,CAAG,KAAA,CAAM,YAAY,KAAA,CAAO,CAAA,EAAGD,EAAE,OAAA,CAAUkB,CAAAA,CAAE,GAAG,CAAA,EAAA,CAAI,EACtD,CAAA,CAEMC,EAAqC,CACzC,IAAA,CAAM,sBAAA,CACN,KAAA,CAAO,sBAAA,CACP,MAAA,CAAQ,wBACR,IAAA,CAAM,sBAAA,CACN,IAAA,CAAM,uBAAA,CACN,OAAA,CAAS,sBAAA,CACT,OAAQ,uBACV,CAAA,CAEMC,EAAYD,CAAAA,CAAWb,CAAM,GAAKa,CAAAA,CAAW,IAAA,CAEnD,OACExC,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAMM,GAAS,CACXY,CAAAA,CAAS,OAAA,CAAUZ,CAAAA,CACf,OAAOP,CAAAA,EAAQ,WAAYA,CAAAA,CAAIO,CAAI,CAAA,CAC9BP,CAAAA,GAAMA,CAAAA,CAAsD,OAAA,CAAUO,GACnF,CAAA,CACA,YAAA,CAAcgC,EACd,WAAA,CAAalB,CAAAA,CACb,QAASiB,CAAAA,CACT,SAAA,CAAWjD,CAAAA,CACT,4CAAA,CACA,2CAAA,CACA,uFAAA,CACA,2BACA,2CAAA,CACA,uDAAA,CACAiD,GAAW,gBAAA,CACX1C,CACF,EACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,yGACV,KAAA,CAAO,CACL,WACE,+FACJ,CAAA,CACF,EACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yHAAA,CAA0H,CAAA,CACzIA,GAAAA,CAAC4B,GAAA,CAAW,MAAA,CAAQF,CAAAA,CAAQ,CAAA,CAE5B3B,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,cAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,SAAAA,GAAAA,CAACyB,EAAAA,CAAA,CAAW,MAAA,CAAQC,CAAAA,CAAS,SAAAM,CAAAA,CAAK,CAAA,CACpC,CAAA,CAEAjC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CACb,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8EAAA,CAAgF,QAAA,CAAAiC,CAAAA,CAAM,CAAA,CACpGC,EAAUlC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,+CAAA,CAAiD,QAAA,CAAAkC,EAAQ,CAAA,CAAS,IAAA,CAAA,CAC9F,CAAA,CACCC,CAAAA,CAAWnC,GAAAA,CAAC6B,EAAAA,CAAA,CAAU,KAAA,CAAOW,CAAAA,CAAW,CAAA,CAAK,IAAA,CAAA,CAChD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CACF,EAEAT,EAAAA,CAAW,WAAA,CAAc,YAAA,CCtJlB,IAAMU,EAAOjD,WAAAA,CAAM,UAAA,CACxB,CAAC,CACC,EAAA,CAAIkD,CAAAA,CAAY,IAChB,OAAA,CAAAjC,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,MAAA,CACP,OAAAiC,CAAAA,CAAS,QAAA,CACT,IAAA,CAAAC,CAAAA,CAAO,KAAA,CACP,SAAA,CAAAlD,EACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAGC,IAECE,GAAAA,CAAC0C,CAAAA,CAAA,CACC,GAAA,CAAK5C,CAAAA,CACL,SAAA,CAAWX,EACT,gDAAA,CACAyD,CAAAA,EAAQ,+EAAA,CACR,CAEE,+BAAA,CAAiCnC,CAAAA,GAAY,UAC7C,kCAAA,CAAoCA,CAAAA,GAAY,OAAA,CAChD,kCAAA,CAAoCA,CAAAA,GAAY,QAAA,CAChD,iEAAkEA,CAAAA,GAAY,MAAA,CAC9E,mCAAoCA,CAAAA,GAAY,OAAA,CAChD,yCAA0CA,CAAAA,GAAY,SAAA,CACtD,oCAAA,CAAsCA,CAAAA,GAAY,SAAA,CAClD,gCAAA,CAAkCA,IAAY,MAAA,CAG9C,SAAA,CAAWC,CAAAA,GAAS,IAAA,CACpB,SAAA,CAAWA,CAAAA,GAAS,KACpB,WAAA,CAAaA,CAAAA,GAAS,MAAA,CACtB,SAAA,CAAWA,CAAAA,GAAS,IAAA,CACpB,UAAWA,CAAAA,GAAS,IAAA,CACpB,WAAYA,CAAAA,GAAS,KAAA,CAGrB,aAAciC,CAAAA,GAAW,OAAA,CACzB,aAAA,CAAeA,CAAAA,GAAW,QAAA,CAC1B,aAAA,CAAeA,IAAW,QAAA,CAC1B,eAAA,CAAiBA,CAAAA,GAAW,UAAA,CAC5B,WAAA,CAAaA,CAAAA,GAAW,MAC1B,CAAA,CACAjD,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,EACH,CAGN,EAEAgD,EAAK,WAAA,CAAc,MAAA,CCxDZ,IAAMI,GAAUrD,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,EAAA,CAAIkD,EAAY,IAAA,CAAM,MAAA,CAAAC,CAAAA,CAAS,MAAA,CAAQ,SAAA,CAAAjD,CAAAA,CAAW,SAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEvEE,IAAC0C,CAAAA,CAAA,CACC,GAAA,CAAK5C,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,8EACA,CACE,kCAAA,CAAoCuD,CAAAA,GAAc,IAAA,CAClD,sBAAA,CAAwBA,CAAAA,GAAc,KACtC,sBAAA,CAAwBA,CAAAA,GAAc,IAAA,CACtC,qBAAA,CAAuBA,CAAAA,GAAc,IAAA,CACrC,qBAAsBA,CAAAA,GAAc,IAAA,CACpC,uBAAwBA,CAAAA,GAAc,IACxC,EACA,CACE,aAAA,CAAeC,CAAAA,GAAW,QAAA,CAC1B,aAAA,CAAeA,CAAAA,GAAW,SAC1B,eAAA,CAAiBA,CAAAA,GAAW,UAAA,CAC5B,WAAA,CAAaA,CAAAA,GAAW,MAAA,CACxB,iBAAkBA,CAAAA,GAAW,WAAA,CAC7B,YAAA,CAAcA,CAAAA,GAAW,OAC3B,CAAA,CACAjD,CACF,CAAA,CACC,GAAGG,EAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEAoD,EAAAA,CAAQ,WAAA,CAAc,SAAA,CCZf,IAAMC,EAAAA,CAAetD,WAAAA,CAAM,WAChC,CAAC,CACC,IAAA,CAAAuD,CAAAA,CAAO,eAAA,CACP,EAAA,CAAAC,EAAK,eAAA,CACL,GAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CAAY,IACZ,OAAA,CAAAC,CAAAA,CAAU,KAAA,CACV,SAAA,CAAAzD,CAAAA,CACA,QAAA,CAAAD,EACA,GAAGI,CACL,CAAA,CAAGC,CAAAA,GAECE,GAAAA,CAAC,MAAA,CAAA,CACC,IAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,+CAAA,CAAkD+D,CAAAA,CAClDH,CAAAA,CACAC,EACAC,CAAAA,CACAE,CAAAA,EAAW,yCACXzD,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEAqD,EAAAA,CAAa,YAAc,cAAA,CCvCpB,IAAMM,EAAAA,CAAY5D,WAAAA,CAAM,UAAA,CAC7B,CAAC,CACC,aAAA6D,CAAAA,CAAe,uBAAA,CACf,SAAAC,CAAAA,CAAW,IAAA,CACX,UAAAC,CAAAA,CAAY,cAAA,CACZ,SAAA,CAAA7D,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAGC,CAAAA,GAECE,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CACT,8FAAA,CACAO,CACF,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,CAAA,uBAAA,EAA0B6D,CAAS,CAAA,KAAA,EAAQA,CAAS,SAASF,CAAY,CAAA,MAAA,EAASE,CAAS,CAAA,MAAA,EAASA,CAAS,CAAA,MAAA,CAAA,CAC9H,eAAgB,WAAA,CAChB,iBAAA,CAAmBD,CAAAA,CACnB,uBAAA,CAAyB,UAAA,CACzB,uBAAA,CAAyB,QAC3B,CAAA,CACC,GAAGzD,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEA2D,EAAAA,CAAU,WAAA,CAAc,YC3CjB,SAASI,GAAUC,CAAAA,CAA4B,CAAE,UAAW,EAAA,CAAK,UAAA,CAAY,MAAO,OAAA,CAAS,IAAK,CAAA,CAAG,CAC1G,IAAM3D,CAAAA,CAAMoB,OAAuB,IAAI,CAAA,CACjC,CAACwC,CAAAA,CAAUC,CAAW,EAAIC,QAAAA,CAAS,KAAK,CAAA,CACxC,CAACC,CAAAA,CAAaC,CAAc,EAAIF,QAAAA,CAAS,KAAK,CAAA,CAC9C,CAAE,OAAA,CAAAG,CAAAA,CAAU,IAAK,CAAA,CAAIN,CAAAA,CAE3B,OAAAO,SAAAA,CAAU,IAAM,CACd,GAAI,CAACD,CAAAA,CAAS,OAEd,IAAME,CAAAA,CAAUnE,EAAI,OAAA,CACpB,GAAI,CAACmE,CAAAA,CAAS,OAEd,IAAMC,EAAW,IAAI,oBAAA,CAAqB,CAAC,CAACC,CAAK,CAAA,GAAM,CACjDA,CAAAA,EAASA,CAAAA,CAAM,cAAA,EACjBR,CAAAA,CAAY,IAAI,CAAA,CAChBG,EAAe,IAAI,CAAA,EAEnBH,EAAY,KAAK,EAErB,EAAGF,CAAO,CAAA,CAEV,OAAAS,CAAAA,CAAS,OAAA,CAAQD,CAAO,EAEjB,IAAM,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,EAAG,CAACT,CAAAA,CAAQ,SAAA,CAAWA,CAAAA,CAAQ,UAAA,CAAYA,CAAAA,CAAQ,KAAMM,CAAO,CAAC,EAE1D,CAAE,GAAA,CAAAjE,EAAK,QAAA,CAAA4D,CAAAA,CAAU,WAAA,CAAAG,CAAY,CACtC,CC1BO,SAASO,GAAO,CACrB,QAAA,CAAA3E,CAAAA,CACA,SAAA,CAAAyD,CAAAA,CAAY,IAAA,CACZ,SAAAI,CAAAA,CAAW,EAAA,CACX,MAAAe,CAAAA,CAAQ,CAAA,CACR,SAAAC,CAAAA,CAAW,aAAA,CACX,SAAA,CAAA5E,CAAAA,CACA,GAAGG,CACL,EAAgB,CACd,GAAM,CAAE,GAAA,CAAAC,CAAAA,CAAK,WAAA,CAAA+D,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAI,CAAC,EAEnDe,CAAAA,CAAmB,CACvB,GAAI,kBAAA,CACJ,IAAA,CAAM,oBACN,IAAA,CAAM,kBAAA,CACN,KAAA,CAAO,mBACT,CAAA,CAEA,OACExE,KAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,uCAAA,CAAyCO,CAAS,CAAA,CAC/D,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,UAAWb,CAAAA,CACT,yBAAA,CACA0E,EAAc,yCAAA,CAA4C1E,CAAAA,CAAG,YAAaoF,CAAAA,CAAiBrB,CAAS,CAAC,CACvG,CAAA,CACA,KAAA,CAAO,CACL,kBAAA,CAAoB,CAAA,EAAGI,CAAQ,CAAA,CAAA,CAAA,CAC/B,eAAA,CAAiB,CAAA,EAAGe,CAAK,CAAA,CAAA,CAC3B,CAAA,CAEC,QAAA,CAAA5E,CAAAA,CACH,CAAA,CAGAO,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CACT,yDACAmF,CAAAA,CACAT,CAAAA,CAAeX,IAAc,MAAA,EAAUA,CAAAA,GAAc,OAAA,CAAU,WAAA,CAAc,WAAA,CAAe,WAC9F,EACA,KAAA,CAAO,CACL,kBAAA,CAAoB,CAAA,EAAGI,CAAQ,CAAA,CAAA,CAAA,CAC/B,gBAAiB,CAAA,EAAGe,CAAK,CAAA,CAAA,CAAA,CACzB,eAAA,CAAiBnB,CAAAA,GAAc,IAAA,CAAO,MAAQA,CAAAA,GAAc,MAAA,CAAS,SAAWA,CAAAA,GAAc,MAAA,CAAS,OAAS,OAClH,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC9BO,IAAMsB,EAAAA,CAAW,CAAC,CACvB,KAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CAAW,6CACX,OAAA,CAAAzB,CAAAA,CAAU,KACV,IAAA,CAAA0B,CAAAA,CAAO,IAAA,CACP,SAAA,CAAAnF,CAAAA,CACA,GAAGG,CACL,CAAA,GAAqB,CACnB,IAAMiF,CAAAA,CACJ/E,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG,kDAAA,CAAoDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACrF,UAAAE,IAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,wEAAA,CACX,QAAA,CAAA,CAAA0E,EAAO,GAAA,CACPC,CAAAA,EACC3E,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CACd,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,gDAAA,CAAkDyF,CAAQ,EAC3E,QAAA,CAAAF,CAAAA,CACH,CAAA,CACCG,CAAAA,EACC7E,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CACf,6DAAA,CACAyF,CACF,CAAA,CAAG,aAAA,CAAY,OACZ,QAAA,CAAAF,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CAEJ,CAAA,CACCC,CAAAA,EACC3E,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,oEAAA,CACV,QAAA,CAAA2E,CAAAA,CACH,CAAA,CAAA,CAEJ,EAGF,OAAIxB,CAAAA,CAEAnD,GAAAA,CAACoE,EAAAA,CAAA,CAAO,SAAA,CAAU,KAAK,QAAA,CAAU,CAAA,CAC9B,SAAAU,CAAAA,CACH,CAAA,CAIGA,CACT,EAEAN,EAAAA,CAAS,WAAA,CAAc,UAAA,CCpEhB,IAAMO,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAX,CAAAA,CAAQ,GAAA,CAAM,SAAA,CAAA3E,EAAW,GAAGG,CAAM,IAAyB,CAC9F,IAAMoF,EAAUD,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAE7B,OACEjF,IAAAA,CAAC,OAAI,SAAA,CAAWZ,CAAAA,CAAG,oDAAA,CAAsDO,CAAS,CAAA,CAAI,GAAGG,EACtF,QAAA,CAAA,CAAAoF,CAAAA,CAAQ,GAAA,CAAI,CAACC,CAAAA,CAAQ,CAAA,GACpBlF,IAAC,MAAA,CAAA,CAEC,SAAA,CAAU,wCACV,KAAA,CAAO,CACL,UAAW,qDAAA,CACX,cAAA,CAAgB,CAAA,EAAG,CAAA,CAAIqE,CAAK,CAAA,CAAA,CAAA,CAC5B,WAAYa,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QACvC,CAAA,CAEC,QAAA,CAAAA,GARI,CASP,CACD,CAAA,CACDlF,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAWN,CAAA,CAAA,CACJ,CAEJ,EAEA+E,EAAAA,CAAa,WAAA,CAAc,cAAA,CC1CpB,IAAMI,CAAAA,CAAQ3F,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,QAAA,CAAA2F,CAAAA,CAAU,GAAGvF,CAAM,CAAA,CAAGC,CAAAA,GAE1CC,IAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,6HAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAJ,CAAAA,CACA2F,CAAAA,EAAYpF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oBAAA,CAAqB,QAAA,CAAA,GAAA,CAAC,CAAA,CAAA,CACrD,CAGN,EAEAmF,CAAAA,CAAM,WAAA,CAAc,OAAA,CCpBpB,IAAME,EAAAA,CAAgB9E,GAAAA,CACpB,0UAAA,CACA,CACE,QAAA,CAAU,CACR,QAAA,CAAU,CACR,IAAA,CAAM,2CAAA,CACN,KAAA,CAAO,EACT,CAAA,CACA,WAAA,CAAa,CACX,IAAA,CAAM,OAAA,CACN,KAAA,CAAO,EACT,CAAA,CACA,YAAA,CAAc,CACZ,IAAA,CAAM,OAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,QAAA,CAAU,KAAA,CACV,WAAA,CAAa,KAAA,CACb,YAAA,CAAc,KAChB,CACF,CACF,CAAA,CAqBa+E,EAAAA,CAAY9F,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,kBAAA,CAAA6F,CAAAA,CAAoB,KAAA,CAAAC,CAAAA,CAAO,KAAA,CAAOC,CAAAA,CAAU,QAAA,CAAA9F,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,EAAA,CAAA8F,CAAAA,CAAI,GAAG7F,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACrG,IAAM6F,CAAAA,CAAUD,CAAAA,EAAMlG,WAAAA,CAAM,KAAA,EAAM,CAC5BoG,CAAAA,CAAW,CAAC,CAACH,CAAAA,CAEnB,OACE1F,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAA,CAAyBoG,CAAkB,CAAA,CAC3D,QAAA,CAAA,CAAAC,CAAAA,EAASxF,GAAAA,CAACmF,CAAAA,CAAA,CAAM,OAAA,CAASQ,CAAAA,CAAS,QAAA,CAAU9F,CAAAA,CAAM,QAAA,CAAW,SAAA2F,CAAAA,CAAM,CAAA,CAEpEzF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4BAAA,CACZ,QAAA,CAAA,CAAAJ,CAAAA,EACCK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+FAAA,CACZ,QAAA,CAAAL,CAAAA,CACH,CAAA,CAGFK,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAI6F,CAAAA,CACJ,SAAA,CAAWxG,CAAAA,CAAGkG,EAAAA,CAAc,CAC1B,QAAA,CAAUO,CAAAA,CACV,WAAA,CAAa,CAAC,CAACjG,CAAAA,CACf,YAAA,CAAc,CAAC,CAACC,CAAAA,CAChB,SAAA,CAAAF,CACF,CAAC,CAAC,CAAA,CACD,GAAGG,CAAAA,CACN,CAAA,CAECD,CAAAA,EACCI,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CAAA,CACZ,QAAA,CAAAJ,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAEC6F,CAAAA,EACCzF,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2EAAA,CACV,QAAA,CAAAyF,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAH,EAAAA,CAAU,WAAA,CAAc,YClFjB,IAAMO,EAAAA,CAAWrG,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,EAAW,KAAA,CAAA8F,CAAAA,CAAO,KAAA,CAAAM,CAAAA,CAAO,EAAA,CAAAJ,CAAAA,CAAI,QAAA,CAAA3E,CAAAA,CAAU,OAAA,CAAAgF,CAAAA,CAAS,cAAA,CAAAC,CAAAA,CAAgB,QAAA,CAAAC,CAAAA,CAAU,GAAGpG,CAAM,EAAGC,CAAAA,GAAQ,CAC/F,IAAM6F,CAAAA,CAAUD,CAAAA,EAAMlG,WAAAA,CAAM,KAAA,EAAM,CAC5B,CAAC0G,CAAAA,CAAWC,CAAY,CAAA,CAAI3G,WAAAA,CAAM,QAAA,CAASwG,CAAAA,EAAkBD,CAAAA,EAAW,KAAK,CAAA,CAEnFvG,WAAAA,CAAM,SAAA,CAAU,IAAM,CAChBuG,CAAAA,GAAY,MAAA,EACdI,CAAAA,CAAaJ,CAAO,EAExB,CAAA,CAAG,CAACA,CAAO,CAAC,CAAA,CAEZ,IAAMK,CAAAA,CAAc,IAAM,CACxB,GAAIrF,CAAAA,CAAU,OACd,IAAMsF,CAAAA,CAAW,CAACH,CAAAA,CAClBC,CAAAA,CAAaE,CAAQ,CAAA,CACjBJ,CAAAA,EACFA,CAAAA,CAAS,CAAE,MAAA,CAAQ,CAAE,OAAA,CAASI,CAAS,CAAE,CAAQ,EAErD,CAAA,CAEA,OACEtG,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAA,CAAyBO,CAAS,CAAA,CACnD,UAAAK,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,QAAA,CACL,EAAA,CAAI6F,CAAAA,CACJ,IAAA,CAAK,UAAA,CACL,cAAA,CAAcO,CAAAA,CACd,YAAA,CAAYV,CAAAA,CACZ,OAAA,CAASY,CAAAA,CACT,QAAA,CAAUrF,CAAAA,CACV,SAAA,CAAW5B,CAAAA,CACT,2HAAA,CACA,gEAAA,CACA4B,CAAAA,EAAY,+BACd,CAAA,CACC,GAAGlB,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAY,MAAA,CACZ,UAAWb,CAAAA,CACT,mDAAA,CACA+G,CAAAA,CACI,yCAAA,CACA,oEACN,CAAA,CAEC,QAAA,CAAAA,CAAAA,CACClG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CAA2B,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,WAAA,CAAY,OAAO,cAAA,CAAe,WAAA,CAAa,CAAA,CAC3G,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,CAAA,CAAE,uBAAA,CAAwB,CAAA,CAC/E,CAAA,CACE,IAAA,CACN,CAAA,CACCwF,GACCxF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAwF,CAAAA,CAAM,CAAA,CAAA,CAEtE,CAAA,CACCM,CAAAA,EACC9F,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,iCAAA,CAAmC,QAAA,CAAA8F,CAAAA,CAAM,CAAA,CAAA,CAE1D,CAEJ,CACF,EAEAD,EAAAA,CAAS,WAAA,CAAc,UAAA,CCjEhB,IAAMS,GAAS9G,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAA8F,CAAAA,CAAO,KAAA,CAAAM,CAAAA,CAAO,EAAA,CAAAJ,CAAAA,CAAI,QAAA,CAAA3E,CAAAA,CAAU,OAAA,CAAAgF,CAAAA,CAAS,cAAA,CAAAC,CAAAA,CAAgB,QAAA,CAAAC,CAAAA,CAAU,GAAGpG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC/F,IAAM6F,CAAAA,CAAUD,CAAAA,EAAMlG,WAAAA,CAAM,KAAA,EAAM,CAC5B,CAAC0G,EAAWC,CAAY,CAAA,CAAI3G,WAAAA,CAAM,QAAA,CAASwG,CAAAA,EAAkBD,CAAAA,EAAW,KAAK,CAAA,CAEnFvG,WAAAA,CAAM,SAAA,CAAU,IAAM,CAChBuG,CAAAA,GAAY,MAAA,EACdI,CAAAA,CAAaJ,CAAO,EAExB,CAAA,CAAG,CAACA,CAAO,CAAC,CAAA,CAEZ,IAAMK,CAAAA,CAAc,IAAM,CACxB,GAAIrF,CAAAA,CAAU,OACd,IAAMsF,CAAAA,CAAW,CAACH,EAClBC,CAAAA,CAAaE,CAAQ,CAAA,CACjBJ,CAAAA,EACFA,CAAAA,CAAS,CAAE,MAAA,CAAQ,CAAE,OAAA,CAASI,CAAS,CAAE,CAAQ,EAErD,CAAA,CAEA,OACEtG,IAAAA,CAAC,OAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAA,CAAyBO,CAAS,CAAA,CACnD,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,EAAA,CAAI2F,EACJ,IAAA,CAAK,QAAA,CACL,cAAA,CAAcO,CAAAA,CACd,OAAA,CAASE,CAAAA,CACT,QAAA,CAAUrF,CAAAA,CACV,SAAA,CAAW5B,CAAAA,CACT,wVAAA,CACA+G,CAAAA,CAAY,gBAAA,CAAmB,kCACjC,CAAA,CACC,GAAGrG,CAAAA,CAEJ,QAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,+FAAA,CACA+G,CAAAA,CAAY,eAAA,CAAkB,eAChC,CAAA,CACF,CAAA,CACF,CAAA,CACCV,CAAAA,EACCxF,GAAAA,CAACmF,CAAAA,CAAA,CACC,OAAA,CAASQ,CAAAA,CACT,SAAA,CAAU,uHAAA,CACV,OAAA,CAASS,CAAAA,CAER,QAAA,CAAAZ,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACCM,CAAAA,EACC9F,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,iCAAA,CAAmC,QAAA,CAAA8F,CAAAA,CAAM,CAAA,CAAA,CAE1D,CAEJ,CACF,EAEAQ,EAAAA,CAAO,WAAA,CAAc,QAAA,CCnDd,IAAMC,EAAAA,CAAS/G,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,KAAA,CAAAgG,CAAAA,CAAO,IAAA,CAAAgB,CAAAA,CAAM,OAAA,CAAA/C,CAAAA,CAAS,KAAA,CAAAxB,CAAAA,CAAO,YAAA,CAAAwE,CAAAA,CAAc,QAAA,CAAAR,CAAAA,CAAU,WAAA,CAAAS,CAAAA,CAAc,kBAAA,CAAoB,KAAA,CAAAZ,CAAAA,CAAO,QAAA,CAAA/E,CAAAA,CAAU,SAAA,CAAArB,CAAU,EAAGI,CAAAA,GAAQ,CAC9H,GAAM,CAAC6G,CAAAA,CAAQC,CAAS,CAAA,CAAIhD,QAAAA,CAAS,KAAK,CAAA,CACpC,CAACiD,CAAAA,CAAeC,CAAgB,CAAA,CAAIlD,QAAAA,CAAS6C,CAAY,EACzD,CAACM,CAAAA,CAAaC,CAAc,CAAA,CAAIpD,QAAAA,CAAS,EAAE,CAAA,CAC3CqD,CAAAA,CAAe/F,MAAAA,CAAuB,IAAI,CAAA,CAC1CwE,CAAAA,CAAKlG,WAAAA,CAAM,KAAA,EAAM,CAEjB0H,CAAAA,CAAejF,IAAU,MAAA,CACzBkF,CAAAA,CAAeD,CAAAA,CAAejF,CAAAA,CAAQ4E,CAAAA,CACtCO,CAAAA,CAAiB3D,CAAAA,CAAQ,IAAA,CAAM4D,CAAAA,EAAQA,CAAAA,CAAI,KAAA,GAAUF,CAAY,CAAA,CAEvEnD,SAAAA,CAAU,IAAM,CACd,GAAI2C,CAAAA,CAAQ,CACV,IAAMW,CAAAA,CAAQ7D,CAAAA,CAAQ,SAAA,CAAU4D,CAAAA,EAAOA,CAAAA,CAAI,KAAA,GAAUF,CAAY,CAAA,CACjEH,CAAAA,CAAeM,CAAAA,GAAU,EAAA,CAAKA,CAAAA,CAAQ,CAAC,EACzC,CAAA,KACEN,CAAAA,CAAe,EAAE,EAErB,CAAA,CAAG,CAACL,CAAAA,CAAQQ,CAAAA,CAAc1D,CAAO,CAAC,CAAA,CAElCO,SAAAA,CAAU,IAAM,CACd,IAAMuD,CAAAA,CAAsBC,CAAAA,EAAsB,CAC5CP,CAAAA,CAAa,OAAA,EAAW,CAACA,CAAAA,CAAa,OAAA,CAAQ,QAAA,CAASO,CAAAA,CAAM,MAAc,CAAA,EAC7EZ,CAAAA,CAAU,KAAK,EAEnB,CAAA,CAEA,gBAAS,gBAAA,CAAiB,WAAA,CAAaW,CAAkB,CAAA,CAClD,IAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaA,CAAkB,CAC3E,CAAA,CAAG,EAAE,CAAA,CAEL,IAAME,CAAAA,CAAgBC,CAAAA,EAAwB,CACxC3G,CAAAA,GACCmG,CAAAA,EACHJ,CAAAA,CAAiBY,CAAW,CAAA,CAE9BzB,CAAAA,GAAWyB,CAAW,CAAA,CACtBd,CAAAA,CAAU,KAAK,CAAA,EACjB,CAAA,CAEMe,CAAAA,CAAiBvG,CAAAA,EAA2B,CAC5CL,CAAAA,GAEAK,CAAAA,CAAE,GAAA,GAAQ,OAAA,EAAWA,CAAAA,CAAE,GAAA,GAAQ,GAAA,EACjCA,CAAAA,CAAE,cAAA,EAAe,CACbuF,CAAAA,EAAUI,CAAAA,GAAgB,EAAA,CAC5BU,CAAAA,CAAahE,CAAAA,CAAQsD,CAAW,EAAG,KAAK,CAAA,CAExCH,CAAAA,CAAU,IAAI,CAAA,EAEPxF,CAAAA,CAAE,GAAA,GAAQ,QAAA,CACnBwF,CAAAA,CAAU,KAAK,CAAA,CACNxF,CAAAA,CAAE,GAAA,GAAQ,WAAA,EACnBA,CAAAA,CAAE,cAAA,GACGuF,CAAAA,CAGHK,CAAAA,CAAgBY,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,CAAA,EAAKnE,CAAAA,CAAQ,MAAM,CAAA,CAFpDmD,CAAAA,CAAU,IAAI,CAAA,EAIPxF,CAAAA,CAAE,GAAA,GAAQ,SAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACZuF,CAAAA,CAGHK,CAAAA,CAAgBY,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,CAAA,CAAInE,CAAAA,CAAQ,MAAA,EAAUA,CAAAA,CAAQ,MAAM,CAAA,CAFrEmD,CAAAA,CAAU,IAAI,CAAA,EAIPxF,CAAAA,CAAE,GAAA,GAAQ,QACnBA,CAAAA,CAAE,cAAA,EAAe,CACbuF,CAAAA,EAAQK,CAAAA,CAAe,CAAC,CAAA,EACnB5F,CAAAA,CAAE,GAAA,GAAQ,KAAA,GACnBA,CAAAA,CAAE,cAAA,EAAe,CACbuF,CAAAA,EAAQK,CAAAA,CAAevD,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAAA,EAEjD,CAAA,CAEA,OACE1D,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKkH,CAAAA,CACL,SAAA,CAAW9H,CAAAA,CAAG,gCAAA,CAAkCO,CAAS,CAAA,CAExD,QAAA,CAAA,CAAA8F,CAAAA,EACCxF,IAACmF,CAAAA,CAAA,CACC,OAAA,CAASO,CAAAA,CACT,SAAA,CAAWvG,CAAAA,CAAG4B,CAAAA,EAAY,+BAA+B,CAAA,CAExD,QAAA,CAAAyE,CAAAA,CACH,CAAA,CAGFzF,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,EAAA,CAAI4F,CAAAA,CACJ,IAAA,CAAK,UAAA,CACL,eAAA,CAAeiB,CAAAA,CACf,eAAA,CAAc,SAAA,CACd,eAAA,CAAe,CAAA,EAAGjB,CAAE,CAAA,QAAA,CAAA,CACpB,eAAA,CAAe3E,CAAAA,CACf,QAAA,CAAUA,CAAAA,CAAW,GAAK,CAAA,CAC1B,OAAA,CAAS,IAAM,CAACA,CAAAA,EAAY6F,CAAAA,CAAU,CAACD,CAAM,CAAA,CAC7C,SAAA,CAAWgB,CAAAA,CACX,SAAA,CAAWxI,CAAAA,CACT,8EAAA,CACA,iDAAA,CACA,iDAAA,CACA,2DACA,6DAAA,CACA4B,CAAAA,EAAY,2EAAA,CACZ4F,CAAAA,EAAU,gEAAA,CACVb,CAAAA,EAAS,2CACX,CAAA,CAEA,QAAA,CAAA,CAAA9F,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,gBAAA,CAAkB,CAACiI,CAAAA,EAAkB,kCAAkC,CAAA,CACxF,QAAA,CAAAA,CAAAA,CAAiBA,CAAAA,CAAe,KAAA,CAAQV,CAAAA,CAC3C,CAAA,CACA1G,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAWb,CAAAA,CACT,8GAAA,CACAwH,CAAAA,EAAU,YACZ,EAEA,QAAA,CAAA3G,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,cAAA,CAAc,CAAA,CACxB,CAAA,CAAA,CACF,CAAA,CAEC2G,CAAAA,EACC3G,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uMAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,IAAA,CAAA,CACC,EAAA,CAAI,CAAA,EAAG0F,CAAE,CAAA,QAAA,CAAA,CACT,IAAA,CAAK,SAAA,CACL,uBAAA,CAAuBqB,CAAAA,GAAgB,EAAA,CAAK,CAAA,EAAGrB,CAAE,CAAA,QAAA,EAAWqB,CAAW,CAAA,CAAA,CAAK,MAAA,CAC5E,SAAA,CAAU,iDAET,QAAA,CAAAtD,CAAAA,CAAQ,GAAA,CAAI,CAACoE,CAAAA,CAAQP,CAAAA,GACpBtH,GAAAA,CAAC,IAAA,CAAA,CAEC,EAAA,CAAI,CAAA,EAAG0F,CAAE,CAAA,QAAA,EAAW4B,CAAK,CAAA,CAAA,CACzB,IAAA,CAAK,QAAA,CACL,eAAA,CAAeH,CAAAA,GAAiBU,CAAAA,CAAO,KAAA,CACvC,OAAA,CAAS,IAAMJ,CAAAA,CAAaI,CAAAA,CAAO,KAAK,CAAA,CACxC,YAAA,CAAc,IAAMb,CAAAA,CAAeM,CAAK,CAAA,CACxC,SAAA,CAAWnI,EACT,iFAAA,CACA,wFAAA,CACCgI,CAAAA,GAAiBU,CAAAA,CAAO,KAAA,EAASd,CAAAA,GAAgBO,CAAAA,CAC9C,mEAAA,CACA,kCACN,CAAA,CAEA,QAAA,CAAAvH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yCAAA,CACb,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,iBAAA,CAAmB,QAAA,CAAA6H,CAAAA,CAAO,KAAA,CAAM,CAAA,CAC/CV,CAAAA,GAAiBU,CAAAA,CAAO,KAAA,EACvB7H,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,OAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,+BAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,UAAA,CAAA,CAAS,MAAA,CAAO,gBAAA,CAAiB,CAAA,CACpC,CAAA,CAAA,CAEJ,CAAA,CAAA,CAhCK6H,CAAAA,CAAO,KAiCd,CACD,CAAA,CACH,CAAA,CACF,CAAA,CAGD/B,CAAAA,EACC9F,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,2EAAA,CACV,QAAA,CAAA8F,CAAAA,CACH,CAAA,CAEF9F,GAAAA,CAAC,OAAA,CAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAMwG,CAAAA,CAAM,KAAA,CAAOW,CAAAA,EAAgB,EAAA,CAAI,CAAA,CAAA,CAC9D,CAEJ,CACF,EAEAZ,EAAAA,CAAO,WAAA,CAAc,QAAA,CCrMd,SAASuB,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAvE,CAAAA,CAA8B,EAAC,CAC/B,CACA,GAAM,CACJ,IAAA,CAAAwE,CAAAA,CAAO,QAAA,CACP,KAAA,CAAAC,CAAAA,CAAQ,QAAA,CACR,UAAA,CAAAC,CAAAA,CAAa,CAAA,CACb,WAAA,CAAAC,CAAAA,CAAc,CAAA,CACd,MAAA,CAAAzB,CAAAA,CAAS,KACX,EAAIlD,CAAAA,CAEE,CAAC4E,CAAAA,CAAUC,CAAW,CAAA,CAAI1E,QAAAA,CAAmB,CAAE,GAAA,CAAK,CAAA,CAAG,IAAA,CAAM,CAAE,CAAC,CAAA,CAChE,CAAC2E,CAAAA,CAAcC,CAAe,EAAI5E,QAAAA,CAAS,KAAK,CAAA,CAEhD6E,CAAAA,CAAiBC,WAAAA,CAAY,IAAM,CACvC,GAAI,CAACX,CAAAA,CAAW,OAAA,EAAW,CAACC,CAAAA,CAAW,OAAA,EAAW,CAACrB,CAAAA,CAAQ,OAE3D,IAAMgC,CAAAA,CAAcZ,CAAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB,CACvDa,CAAAA,CAAcZ,CAAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB,CAEzDa,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAO,CAAA,CAGX,OAAQb,CAAAA,EACN,KAAK,KAAA,CACHY,CAAAA,CAAMF,CAAAA,CAAY,GAAA,CAAMC,CAAAA,CAAY,MAAA,CAAST,CAAAA,CAC7C,MACF,KAAK,QAAA,CACHU,CAAAA,CAAMF,CAAAA,CAAY,MAAA,CAASR,CAAAA,CAC3B,MACF,KAAK,MAAA,CACHW,CAAAA,CAAOH,CAAAA,CAAY,IAAA,CAAOC,CAAAA,CAAY,KAAA,CAAQT,CAAAA,CAC9C,MACF,KAAK,OAAA,CACHW,CAAAA,CAAOH,CAAAA,CAAY,KAAA,CAAQR,EAC3B,KACJ,CAGA,GAAIF,CAAAA,GAAS,KAAA,EAASA,CAAAA,GAAS,QAAA,CAC7B,OAAQC,CAAAA,EACN,KAAK,OAAA,CACHY,CAAAA,CAAOH,CAAAA,CAAY,IAAA,CAAOP,CAAAA,CAC1B,MACF,KAAK,QAAA,CACHU,CAAAA,CAAOH,CAAAA,CAAY,IAAA,CAAQA,CAAAA,CAAY,KAAA,CAAQ,CAAA,CAAMC,CAAAA,CAAY,KAAA,CAAQ,CAAA,CAAKR,CAAAA,CAC9E,MACF,KAAK,KAAA,CACHU,EAAOH,CAAAA,CAAY,KAAA,CAAQC,CAAAA,CAAY,KAAA,CAAQR,CAAAA,CAC/C,KACJ,CAAA,KAEA,OAAQF,CAAAA,EACN,KAAK,OAAA,CACHW,CAAAA,CAAMF,CAAAA,CAAY,GAAA,CAAMP,CAAAA,CACxB,MACF,KAAK,QAAA,CACHS,CAAAA,CAAMF,CAAAA,CAAY,GAAA,CAAOA,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAMC,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAKR,CAAAA,CAC9E,MACF,KAAK,KAAA,CACHS,CAAAA,CAAMF,EAAY,MAAA,CAASC,CAAAA,CAAY,MAAA,CAASR,CAAAA,CAChD,KACJ,CAIF,IAAMW,CAAAA,CAAU,CAAA,CACVC,CAAAA,CAAgB,MAAA,CAAO,UAAA,CACvBC,CAAAA,CAAiB,MAAA,CAAO,WAAA,CAE1BH,CAAAA,CAAOC,CAAAA,GAASD,CAAAA,CAAOC,CAAAA,CAAAA,CACvBD,CAAAA,CAAOF,CAAAA,CAAY,KAAA,CAAQI,CAAAA,CAAgBD,CAAAA,GAC7CD,CAAAA,CAAOE,CAAAA,CAAgBJ,CAAAA,CAAY,KAAA,CAAQG,CAAAA,CAAAA,CAEzCF,CAAAA,CAAME,CAAAA,GAASF,CAAAA,CAAME,GACrBF,CAAAA,CAAMD,CAAAA,CAAY,MAAA,CAASK,CAAAA,CAAiBF,CAAAA,GAC9CF,CAAAA,CAAMI,CAAAA,CAAiBL,CAAAA,CAAY,MAAA,CAASG,CAAAA,CAAAA,CAG9CT,CAAAA,CAAY,CAAE,GAAA,CAAAO,CAAAA,CAAK,IAAA,CAAAC,CAAK,CAAC,CAAA,CACzBN,CAAAA,CAAgB,IAAI,EACtB,CAAA,CAAG,CAACT,CAAAA,CAAYC,CAAAA,CAAYC,CAAAA,CAAMC,CAAAA,CAAOC,CAAAA,CAAYC,CAAAA,CAAazB,CAAM,CAAC,CAAA,CAEzE,OAAAuC,eAAAA,CAAgB,IAAM,CACpB,GAAI,CAACvC,CAAAA,CAAQ,CACP4B,CAAAA,EAAcC,CAAAA,CAAgB,KAAK,CAAA,CACvC,MACF,CAEAC,CAAAA,EAAe,CAGf,IAAMU,CAAAA,CAAiB,IAAI,cAAA,CAAe,IAAMV,CAAAA,EAAgB,CAAA,CAChE,OAAIV,CAAAA,CAAW,OAAA,EAASoB,CAAAA,CAAe,OAAA,CAAQpB,CAAAA,CAAW,OAAO,CAAA,CAC7DC,CAAAA,CAAW,SAASmB,CAAAA,CAAe,OAAA,CAAQnB,CAAAA,CAAW,OAAO,CAAA,CAEjE,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUS,CAAc,CAAA,CAChD,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUA,CAAAA,CAAgB,IAAI,CAAA,CAE/C,IAAM,CACXU,CAAAA,CAAe,UAAA,EAAW,CAC1B,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUV,CAAc,CAAA,CACnD,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAAA,CAAgB,IAAI,EAC3D,CACF,EAAG,CAAC9B,CAAAA,CAAQ8B,CAAAA,CAAgBV,CAAAA,CAAYC,CAAU,CAAC,CAAA,CAE5C,CACL,QAAA,CAAAK,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,cAAA,CAAAE,CACF,CACF,CC1HA,IAAMW,EAAAA,CAAiBC,aAAAA,CAA+C,MAAS,CAAA,CAQxE,SAASC,EAAAA,CAAQ,CAAE,QAAA,CAAA7J,CAAAA,CAAU,IAAA,CAAA8J,CAAAA,CAAM,YAAA,CAAAC,CAAa,CAAA,CAAiB,CACtE,GAAM,CAACC,CAAAA,CAAcC,CAAe,CAAA,CAAI9F,QAAAA,CAAS,KAAK,CAAA,CAChDmE,CAAAA,CAAa7G,MAAAA,CAAoB,IAAI,CAAA,CAErCgG,CAAAA,CAAeqC,CAAAA,GAAS,MAAA,CACxB5C,CAAAA,CAASO,CAAAA,CAAeqC,CAAAA,CAAOE,CAAAA,CAC/B7C,CAAAA,CAAa+C,CAAAA,EAAqB,CACjCzC,CAAAA,EACHwC,CAAAA,CAAgBC,CAAO,CAAA,CAEzBH,CAAAA,GAAeG,CAAO,EACxB,CAAA,CAEA,OACE3J,GAAAA,CAACoJ,EAAAA,CAAe,QAAA,CAAf,CAAwB,KAAA,CAAO,CAAE,MAAA,CAAAzC,CAAAA,CAAQ,SAAA,CAAAC,CAAAA,CAAW,UAAA,CAAAmB,CAAW,CAAA,CAC9D,QAAA,CAAA/H,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CACZ,QAAA,CAAAP,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAASmK,EAAAA,CAAe,CAAE,SAAA,CAAAlK,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,EAAwB,CACrF,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWV,EAAc,CAAA,CACzC,GAAI,CAACS,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,IAAMzD,CAAAA,CAAehF,GAAwB,CAC3CyI,CAAAA,CAAQ,SAAA,CAAU,CAACA,CAAAA,CAAQ,MAAM,CAAA,CACjChK,CAAAA,CAAM,OAAA,GAAUuB,CAAQ,EAC1B,CAAA,CAEA,OACEpB,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAK6J,EAAQ,UAAA,CACb,IAAA,CAAK,QAAA,CACL,eAAA,CAAc,QAAA,CACd,eAAA,CAAeA,CAAAA,CAAQ,MAAA,CAAS,MAAA,CAAS,OAAA,CACzC,OAAA,CAASzD,CAAAA,CACT,SAAA,CAAWjH,CAAAA,CAAG,yCAAA,CAA2CO,CAAS,CAAA,CACjE,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAQO,SAASsK,EAAAA,CAAe,CAAE,SAAA,CAAArK,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,KAAA,CAAAyI,CAAAA,CAAQ,SAAU,UAAA,CAAAC,CAAAA,CAAa,CAAA,CAAG,GAAGtI,CAAM,CAAA,CAAwB,CACvH,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWV,EAAc,CAAA,CACzC,GAAI,CAACS,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,IAAM7B,CAAAA,CAAa9G,MAAAA,CAAuB,IAAI,CAAA,CACxC,CAAE,QAAA,CAAAmH,CAAAA,CAAU,YAAA,CAAAE,CAAa,CAAA,CAAIT,EAAAA,CAAY+B,EAAQ,UAAA,CAAY7B,CAAAA,CAAY,CAC7E,IAAA,CAAM,QAAA,CACN,KAAA,CAAAE,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ0B,CAAAA,CAAQ,MAClB,CAAC,CAAA,CAsBD,GApBA7F,SAAAA,CAAU,IAAM,CACd,GAAI6F,CAAAA,CAAQ,MAAA,CAAQ,CAClB,IAAMG,CAAAA,CAAsB5I,CAAAA,EAAkB,CAE1C4G,CAAAA,CAAW,OAAA,EACX,CAACA,CAAAA,CAAW,OAAA,CAAQ,QAAA,CAAS5G,EAAE,MAAc,CAAA,EAC7CyI,CAAAA,CAAQ,UAAA,CAAW,OAAA,EACnB,CAACA,CAAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,QAAA,CAASzI,CAAAA,CAAE,MAAc,CAAA,EAErDyI,CAAAA,CAAQ,SAAA,CAAU,KAAK,EAE3B,CAAA,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaG,CAAkB,CAAA,CAClD,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaA,CAAkB,EAC9D,CACF,CACF,CAAA,CAAG,CAACH,CAAAA,CAAQ,MAAA,CAAQA,CAAAA,CAAQ,SAAA,CAAWA,CAAAA,CAAQ,UAAU,CAAC,CAAA,CAEtD,CAACA,CAAAA,CAAQ,MAAA,CAAQ,OAAO,IAAA,CAE5B,IAAMI,CAAAA,CAAqB,IAAM,CAE/B,IAAMhC,CAAAA,CAAOI,CAAAA,CAAS,GAAA,EAAOwB,CAAAA,CAAQ,UAAA,CAAW,OAAA,EAAS,qBAAA,EAAsB,CAAE,GAAA,EAAO,CAAA,CAAA,CAAK,QAAA,CAAW,KAAA,CAExG,OAAI5B,CAAAA,GAAS,SACPC,CAAAA,GAAU,OAAA,CAAgB,UAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,WAAA,CACrB,YAAA,CAELD,CAAAA,GAAS,KAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,aAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,cAAA,CACrB,eAAA,CAEF,eACT,CAAA,CAEA,OAAOgC,YAAAA,CACLlK,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKgI,CAAAA,CACL,KAAA,CAAO,CACL,GAAA,CAAKK,CAAAA,CAAS,GAAA,CACd,IAAA,CAAMA,CAAAA,CAAS,IAAA,CACf,gBAAiB4B,CAAAA,EACnB,CAAA,CACA,SAAA,CAAW9K,CAAAA,CACT,4KAAA,CACAoJ,CAAAA,CAAe,2CAAA,CAA8C,WAAA,CAC7D7I,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACA,QAAA,CAAS,IACX,CACF,CC9HA,IAAM0K,EAAAA,CAAkBd,aAAAA,CAAgD,MAAS,CAAA,CAW1E,SAASe,EAAAA,CAAS,CACvB,QAAA,CAAA3K,CAAAA,CACA,KAAA,CAAO4K,CAAAA,CACP,YAAA,CAAA5D,CAAAA,CAAe,EAAA,CACf,aAAA,CAAA6D,CAAAA,CACA,MAAA,CAAAC,CAAAA,CAAS,CAACvF,CAAAA,CAAMwF,CAAAA,GAAWxF,CAAAA,CAAK,WAAA,GAAc,QAAA,CAASwF,CAAAA,CAAO,WAAA,EAAa,CAAA,CAC3E,UAAA,CAAAC,CAAAA,CAAa,IACf,CAAA,CAAkB,CAChB,GAAM,CAAC5D,CAAAA,CAAeC,CAAgB,CAAA,CAAIlD,QAAAA,CAAS6C,CAAY,CAAA,CACzD,CAACiE,CAAAA,CAAYC,CAAa,CAAA,CAAI/G,QAAAA,CAAS,EAAE,CAAA,CACzC,CAAC+C,CAAAA,CAAQC,CAAS,CAAA,CAAIhD,QAAAA,CAAS,KAAK,CAAA,CACpC,CAACgH,CAAAA,CAAOC,CAAQ,CAAA,CAAIjH,QAAAA,CAAuD,IAAI,GAAK,CAAA,CACpF,CAACmD,CAAAA,CAAaC,CAAc,CAAA,CAAIpD,QAAAA,CAAS,EAAE,CAAA,CAE3CsD,CAAAA,CAAemD,CAAAA,GAAoB,OACnCpI,CAAAA,CAAQiF,CAAAA,CAAemD,CAAAA,CAAkBxD,CAAAA,CAEzCiE,CAAAA,CAAqBzE,CAAAA,EAAqB,CACzCa,CAAAA,EAAcJ,CAAAA,CAAiBT,CAAQ,CAAA,CAC5CiE,CAAAA,GAAgBjE,CAAQ,CAAA,CACxBO,CAAAA,CAAU,KAAK,CAAA,CACf+D,CAAAA,CAAc,EAAE,EAClB,CAAA,CAEMI,CAAAA,CAAevL,WAAAA,CAAM,WAAA,CAAY,CAACkG,CAAAA,CAAYV,CAAAA,CAAc/C,CAAAA,IAChE4I,CAAAA,CAASjD,CAAAA,EAAQ,CACf,IAAMoD,EAAO,IAAI,GAAA,CAAIpD,CAAI,CAAA,CACzB,OAAAoD,CAAAA,CAAK,GAAA,CAAItF,CAAAA,CAAI,CAAE,IAAA,CAAAV,CAAAA,CAAM,KAAA,CAAA/C,CAAM,CAAC,CAAA,CACrB+I,CACT,CAAC,CAAA,CACM,IAAM,CACXH,CAAAA,CAASjD,CAAAA,EAAQ,CACf,IAAMoD,CAAAA,CAAO,IAAI,GAAA,CAAIpD,CAAI,CAAA,CACzB,OAAAoD,CAAAA,CAAK,MAAA,CAAOtF,CAAE,CAAA,CACPsF,CACT,CAAC,EACH,CAAA,CAAA,CACC,EAAE,CAAA,CAECC,CAAAA,CAAeC,OAAAA,CAAQ,IACpB,KAAA,CAAM,IAAA,CAAKN,CAAAA,CAAM,OAAA,EAAS,EAC9B,MAAA,CAAO,CAAC,CAACO,CAAAA,CAAGC,CAAI,CAAA,GAAMb,CAAAA,CAAOa,CAAAA,CAAK,IAAA,CAAMV,CAAU,CAAC,CAAA,CACnD,GAAA,CAAI,CAAC,CAAChF,CAAAA,CAAI0F,CAAI,CAAA,IAAO,CAAE,EAAA,CAAA1F,CAAAA,CAAI,KAAA,CAAO0F,CAAAA,CAAK,KAAM,CAAA,CAAE,CAAA,CACjD,CAACR,CAAAA,CAAOF,CAAAA,CAAYH,CAAM,CAAC,CAAA,CAExBc,CAAAA,CAAkBJ,CAAAA,CAAa,MAAA,CAAS,CAAA,CAE9C,OAAAjH,SAAAA,CAAU,IAAM,CAEZgD,CAAAA,CADEL,CAAAA,CACa,CAAA,CAEA,EAFC,EAIpB,CAAA,CAAG,CAACA,CAAM,CAAC,EAGT3G,GAAAA,CAACmK,EAAAA,CAAgB,QAAA,CAAhB,CAAyB,KAAA,CAAO,CAC/B,KAAA,CAAAlI,CAAAA,CACA,aAAA,CAAe6I,CAAAA,CACf,UAAA,CAAAJ,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,MAAA,CAAAhE,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,YAAA,CAAAmE,CAAAA,CACA,aAAA,CAAe,CAACrF,CAAAA,CAAIV,CAAAA,GAASuF,CAAAA,CAAOvF,CAAAA,CAAM0F,CAAU,CAAA,CACpD,eAAA,CAAAW,CAAAA,CACA,WAAA,CAAAtE,CAAAA,CACA,eAAAC,CAAAA,CACA,YAAA,CAAAiE,CACF,CAAA,CACG,QAAA,CAAAR,CAAAA,CACCzK,GAAAA,CAACsJ,EAAAA,CAAA,CAAQ,IAAA,CAAM3C,CAAAA,CAAQ,YAAA,CAAcC,CAAAA,CAClC,QAAA,CAAAnH,CAAAA,CACH,CAAA,CAEAA,CAAAA,CAEJ,CAEJ,CAEO,SAAS6L,EAAAA,CAAgB,CAAE,SAAA,CAAA5L,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAkD,CAChH,IAAMgK,CAAAA,CAAUC,WAAWK,EAAe,CAAA,CAC1C,OACEpK,IAAAA,CAAC6J,EAAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,eAAA,CAAeC,CAAAA,EAAS,MAAA,CACxB,eAAA,CAAc,SAAA,CACd,SAAA,CAAW1K,CAAAA,CACT,qaAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAJ,CAAAA,CACDO,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,iBAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,cAAA,CAAc,CAAA,CACxB,CAAA,CAAA,CACF,CAEJ,CAEO,SAASuL,EAAAA,CAAgB,CAAE,SAAA,CAAA7L,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACvG,OACEG,GAAAA,CAAC+J,GAAA,CAAe,SAAA,CAAW5K,CAAAA,CAAG,eAAA,CAAiBO,CAAS,CAAA,CAAG,KAAA,CAAM,OAAA,CAAS,GAAGG,CAAAA,CAC1E,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS+L,EAAAA,CAAc,CAAE,SAAA,CAAA9L,CAAAA,CAAW,WAAA,CAAAgH,CAAAA,CAAc,WAAA,CAAa,GAAG7G,CAAM,CAAA,CAAgD,CAC7H,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWK,EAAe,CAAA,CAC1C,GAAI,CAACN,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,IAAMlC,CAAAA,CAAiBvG,CAAAA,EAA6C,CAC9DA,CAAAA,CAAE,GAAA,GAAQ,WAAA,EACZA,CAAAA,CAAE,cAAA,EAAe,CACjByI,CAAAA,CAAQ,cAAA,CAAgBjC,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,CAAA,EAAKiC,CAAAA,CAAQ,YAAA,CAAa,MAAM,CAAA,EAChEzI,CAAAA,CAAE,GAAA,GAAQ,SAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACjByI,CAAAA,CAAQ,eAAgBjC,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,CAAA,CAAIiC,CAAAA,CAAQ,YAAA,CAAa,MAAA,EAAUA,CAAAA,CAAQ,YAAA,CAAa,MAAM,CAAA,EAC9FzI,CAAAA,CAAE,GAAA,GAAQ,OAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACbyI,CAAAA,CAAQ,WAAA,GAAgB,EAAA,EAAMA,CAAAA,CAAQ,YAAA,CAAaA,CAAAA,CAAQ,WAAW,CAAA,EACxEA,CAAAA,CAAQ,aAAA,CAAcA,CAAAA,CAAQ,YAAA,CAAaA,CAAAA,CAAQ,WAAW,CAAA,CAAG,KAAK,GAE/DzI,CAAAA,CAAE,GAAA,GAAQ,QAAA,EACnByI,CAAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,CAEzBhK,CAAAA,CAAM,SAAA,GAAYuB,CAAC,EACrB,CAAA,CAEA,OACErB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,kCAAA,CACV,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,OAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CAEf,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,gBAAA,CAAiB,CAAA,CAAA,CAC3B,CAAA,CACAA,GAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,6MAAA,CACAO,CACF,CAAA,CACA,WAAA,CAAagH,CAAAA,CACb,MAAOmD,CAAAA,CAAQ,UAAA,CACf,QAAA,CAAWzI,CAAAA,EAAMyI,CAAAA,CAAQ,aAAA,CAAczI,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACrD,SAAA,CAAWuG,CAAAA,CACX,mBAAA,CAAkB,MAAA,CAClB,uBAAA,CAAuBkC,CAAAA,CAAQ,WAAA,GAAgB,EAAA,CAAKA,CAAAA,CAAQ,YAAA,CAAaA,CAAAA,CAAQ,WAAW,CAAA,EAAG,EAAA,CAAK,MAAA,CACnG,GAAGhK,CAAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAEO,SAAS4L,EAAAA,CAAa,CAAE,SAAA,CAAA/L,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACpG,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,SAAA,CACL,SAAA,CAAWb,CAAAA,CAAG,qDAAA,CAAuDO,CAAS,CAAA,CAC7E,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAASiM,EAAAA,CAAc,CAAE,SAAA,CAAAhM,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,EAAyC,CACrG,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWK,EAAe,CAAA,CAC1C,GAAI,CAACN,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,OAAIA,CAAAA,CAAQ,eAAA,CAAwB,IAAA,CAGlC7J,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,2DAAA,CAA6DO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7F,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAQO,SAASkM,GAAa,CAAE,SAAA,CAAAjM,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAxC,CAAAA,CAAU,SAAA,CAAAmM,CAAAA,CAAW,GAAG/L,CAAM,CAAA,CAAsB,CACnG,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWK,EAAe,CAAA,CAC1C,GAAI,CAACN,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,2CAA2C,CAAA,CAEzE,IAAMnE,CAAAA,CAAKlG,WAAAA,CAAM,KAAA,EAAM,CACjBwF,CAAAA,CAAO4G,IAAc,OAAOnM,CAAAA,EAAa,QAAA,CAAWA,CAAAA,CAAWwC,CAAAA,CAAAA,CAC/D4J,CAAAA,CAAYhC,CAAAA,CAAQ,aAAA,CAAcnE,CAAAA,CAAIV,CAAI,CAAA,CAC1C8G,CAAAA,CAAajC,CAAAA,CAAQ,KAAA,GAAU5H,CAAAA,CAE/B8J,CAAAA,CAAYlC,CAAAA,CAAQ,YAAA,CAAa,SAAA,CAAUuB,CAAAA,EAAQA,CAAAA,CAAK,EAAA,GAAO1F,CAAE,CAAA,CACjEsG,CAAAA,CAAWnC,CAAAA,CAAQ,WAAA,GAAgBkC,CAAAA,CAMzC,OAJA/H,SAAAA,CAAU,IACD6F,CAAAA,CAAQ,aAAanE,CAAAA,CAAIV,CAAAA,CAAM/C,CAAK,CAAA,CAC1C,CAACyD,CAAAA,CAAIV,CAAAA,CAAM/C,CAAAA,CAAO4H,CAAAA,CAAQ,YAAY,CAAC,CAAA,CAErCgC,CAAAA,CAGH9L,IAAAA,CAAC,KAAA,CAAA,CACC,EAAA,CAAI2F,EACJ,IAAA,CAAK,QAAA,CACL,eAAA,CAAeoG,CAAAA,CACf,OAAA,CAAS,IAAMjC,CAAAA,CAAQ,aAAA,CAAc5H,CAAK,CAAA,CAC1C,YAAA,CAAc,IAAM4H,CAAAA,CAAQ,cAAA,CAAekC,CAAS,CAAA,CACpD,UAAW5M,CAAAA,CACT,oHAAA,CACA,kCAAA,CACA,wHAAA,CACA,gEAAA,CACA,wFAAA,CAAA,CACC2M,CAAAA,EAAcE,CAAAA,GAAa,gEAAA,CAC5BtM,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,cAAA,CACA2M,CAAAA,CAAa,aAAA,CAAgB,WAC/B,CAAA,CACA,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CAEf,QAAA,CAAA9L,GAAAA,CAAC,UAAA,CAAA,CAAS,MAAA,CAAO,gBAAA,CAAiB,CAAA,CACpC,CAAA,CACCP,CAAAA,CAAAA,CACH,CAAA,CAtCqB,IAwCzB,CCzRO,IAAMwM,EAAAA,CAASzM,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAO2K,CAAAA,CAAiB,YAAA,CAAA5D,CAAAA,CAAe,CAAA,CAAG,GAAA,CAAAyF,CAAAA,CAAM,CAAA,CAAG,GAAA,CAAAC,CAAAA,CAAM,GAAA,CAAK,IAAA,CAAAC,CAAAA,CAAO,CAAA,CAAG,QAAA,CAAAnG,CAAAA,CAAU,QAAA,CAAAlF,CAAAA,CAAU,GAAGlB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC5H,GAAM,CAAC+G,CAAAA,CAAeC,CAAgB,CAAA,CAAIlD,QAAAA,CAAS6C,CAAY,CAAA,CACzDS,CAAAA,CAAemD,CAAAA,GAAoB,MAAA,CACnCpI,CAAAA,CAAQiF,CAAAA,CAAemD,CAAAA,CAAkBxD,CAAAA,CACzCwF,CAAAA,CAAWnL,MAAAA,CAAuB,IAAI,CAAA,CAEtCoL,CAAAA,CAAAA,CAAerK,CAAAA,CAAQiK,CAAAA,GAAQC,CAAAA,CAAMD,CAAAA,CAAAA,CAAQ,GAAA,CAE7C/K,CAAAA,CAAauH,WAAAA,CAAa6D,CAAAA,EAAoB,CAClD,GAAIxL,CAAAA,EAAY,CAACsL,CAAAA,CAAS,OAAA,CAAS,OAEnC,IAAM/K,CAAAA,CAAO+K,CAAAA,CAAS,OAAA,CAAQ,qBAAA,EAAsB,CAC9CG,CAAAA,CAAQlL,CAAAA,CAAK,KAAA,CACbwH,CAAAA,CAAOxH,CAAAA,CAAK,IAAA,CAEd+E,CAAAA,CAAAA,CAAakG,CAAAA,CAAUzD,CAAAA,EAAQ0D,CAAAA,EAAUL,CAAAA,CAAMD,CAAAA,CAAAA,CAAOA,CAAAA,CAG1D7F,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAU6F,CAAG,CAAA,CAAGC,CAAG,CAAA,CAGhD,IAAMM,CAAAA,CAAQ,IAAA,CAAK,OAAOpG,CAAAA,CAAW6F,CAAAA,EAAOE,CAAI,CAAA,CAChD/F,CAAAA,CAAW6F,CAAAA,CAAMO,CAAAA,CAAQL,CAAAA,CAGzB/F,CAAAA,CAAW,MAAA,CAAOA,CAAAA,CAAS,OAAA,CAAQ,EAAE,CAAC,CAAA,CAEjCa,CAAAA,EACHJ,CAAAA,CAAiBT,CAAQ,CAAA,CAE3BJ,CAAAA,GAAWI,CAAQ,EACrB,CAAA,CAAG,CAACtF,CAAAA,CAAUmG,CAAAA,CAAciF,CAAAA,CAAKD,CAAAA,CAAKjG,CAAAA,CAAUmG,CAAI,CAAC,CAAA,CAE/CM,EAAmBtL,CAAAA,EAAwB,CAC/C,GAAIL,CAAAA,CAAU,OACdI,CAAAA,CAAWC,CAAAA,CAAE,OAAO,CAAA,CAEpB,IAAMuL,CAAAA,CAAmBvL,CAAAA,EAAkB,CACzCD,CAAAA,CAAWC,CAAAA,CAAE,OAAO,EACtB,CAAA,CAEMwL,CAAAA,CAAgB,IAAM,CAC1B,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaD,CAAe,CAAA,CACzD,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWC,CAAa,EACvD,CAAA,CAEA,SAAS,gBAAA,CAAiB,WAAA,CAAaD,CAAe,CAAA,CACtD,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWC,CAAa,EACpD,CAAA,CAEMC,CAAAA,CAAoBzL,CAAAA,EAAwB,CAChD,GAAIL,CAAAA,CAAU,OACd,IAAM+L,CAAAA,CAAa1L,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC1B0L,CAAAA,EACF3L,CAAAA,CAAW2L,CAAAA,CAAW,OAAO,CAAA,CAG/B,IAAMC,CAAAA,CAAmB3L,CAAAA,EAAkB,CACzC,IAAM4L,CAAAA,CAAY5L,EAAE,OAAA,CAAQ,CAAC,CAAA,CACzB4L,CAAAA,EACF7L,CAAAA,CAAW6L,CAAAA,CAAU,OAAO,EAEhC,CAAA,CAEMC,CAAAA,CAAiB,IAAM,CAC3B,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaF,CAAe,CAAA,CACzD,QAAA,CAAS,mBAAA,CAAoB,UAAA,CAAYE,CAAc,EACzD,CAAA,CAEA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaF,CAAAA,CAAiB,CAAE,OAAA,CAAS,KAAM,CAAC,CAAA,CAC1E,SAAS,gBAAA,CAAiB,UAAA,CAAYE,CAAc,EACtD,CAAA,CA2BA,OACElN,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,QAAA,CACL,eAAA,CAAeoM,CAAAA,CACf,eAAA,CAAeC,CAAAA,CACf,eAAA,CAAelK,CAAAA,CACf,eAAA,CAAelB,CAAAA,CACf,QAAA,CAAUA,CAAAA,CAAW,EAAA,CAAK,CAAA,CAC1B,SAAA,CAlCmBK,CAAAA,EAA2B,CAChD,GAAIL,CAAAA,CAAU,OAEd,IAAIsF,CAAAA,CAAWpE,EACf,GAAIb,CAAAA,CAAE,GAAA,GAAQ,YAAA,EAAgBA,CAAAA,CAAE,GAAA,GAAQ,SAAA,CACtCiF,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAIpE,CAAAA,CAAQmK,CAAAA,CAAMD,CAAG,CAAA,CAAA,KAAA,GAC5B/K,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAeA,CAAAA,CAAE,GAAA,GAAQ,WAAA,CAC5CiF,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAIpE,CAAAA,CAAQmK,CAAAA,CAAMF,CAAG,CAAA,CAAA,KAAA,GAC5B9K,CAAAA,CAAE,GAAA,GAAQ,MAAA,CACnBiF,CAAAA,CAAW6F,CAAAA,CAAAA,KAAAA,GACF9K,EAAE,GAAA,GAAQ,KAAA,CACnBiF,CAAAA,CAAW8F,CAAAA,CAAAA,KAEX,OAGF/K,CAAAA,CAAE,cAAA,EAAe,CACbiF,CAAAA,GAAapE,CAAAA,GACViF,CAAAA,EACHJ,CAAAA,CAAiBT,CAAQ,CAAA,CAE3BJ,CAAAA,GAAWI,CAAQ,GAEvB,CAAA,CAYI,SAAA,CAAWlH,CAAAA,CACT,qEAAA,CACA4B,CAAAA,EAAY,+BAAA,CACZrB,CACF,CAAA,CACA,WAAA,CAAagN,CAAAA,CACb,YAAA,CAAcG,CAAAA,CACb,GAAGhN,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,OACC,GAAA,CAAKqM,CAAAA,CACL,SAAA,CAAU,sJAAA,CAEV,QAAA,CAAArM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,wGAAA,CACV,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGsM,CAAU,CAAA,CAAA,CAAI,CAAA,CACnC,CAAA,CACF,CAAA,CACAtM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,6MAAA,CACV,KAAA,CAAO,CAAE,IAAA,CAAM,CAAA,KAAA,EAAQsM,CAAU,CAAA,SAAA,CAAY,CAAA,CAC/C,CAAA,CAAA,CACF,CAEJ,CACF,ECvIA,IAAMY,EAAAA,CAAO,CAAC,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAI,CAAA,CAChDC,EAAAA,CAAS,CACb,UAAW,UAAA,CAAY,OAAA,CAAS,OAAA,CAAS,KAAA,CAAO,MAAA,CAChD,MAAA,CAAQ,QAAA,CAAU,WAAA,CAAa,SAAA,CAAW,UAAA,CAAY,UACxD,CAAA,CAEO,SAASC,EAAAA,CAAS,CAAE,SAAA,CAAA1N,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAgE,CAAAA,CAAU,OAAA,CAAAoH,CAAAA,CAAS,OAAA,CAAAC,CAAQ,CAAA,CAAkB,CACxF,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAI5J,SAAS3B,CAAAA,EAAS,IAAI,IAAM,CAAA,CAC5D,CAACwL,CAAAA,CAAUC,CAAW,CAAA,CAAI9J,QAAAA,CAAS3B,CAAAA,EAAS,IAAI,IAAM,CAAA,CAEtD0L,CAAAA,CAAiB,CAACC,CAAAA,CAAcC,IAC7B,IAAI,IAAA,CAAKD,CAAAA,CAAMC,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAA,CAAE,OAAA,EAAQ,CAGxCC,CAAAA,CAAqB,CAACF,CAAAA,CAAcC,CAAAA,GACjC,IAAI,IAAA,CAAKD,CAAAA,CAAMC,EAAO,CAAC,CAAA,CAAE,MAAA,EAAO,CAGnCE,CAAAA,CAAkB,IAAM,CAC5BL,CAAAA,CAAY,IAAI,IAAA,CAAKD,CAAAA,CAAS,WAAA,EAAY,CAAGA,CAAAA,CAAS,QAAA,EAAS,CAAI,CAAA,CAAG,CAAC,CAAC,EAC1E,CAAA,CAEMO,CAAAA,CAAkB,IAAM,CAC5BN,CAAAA,CAAY,IAAI,IAAA,CAAKD,CAAAA,CAAS,WAAA,EAAY,CAAGA,CAAAA,CAAS,QAAA,GAAa,CAAA,CAAG,CAAC,CAAC,EAC1E,CAAA,CAEMQ,CAAAA,CAAmBC,CAAAA,EAAgB,CACvC,IAAMC,CAAAA,CAAU,IAAI,IAAA,CAAKV,CAAAA,CAAS,WAAA,EAAY,CAAGA,CAAAA,CAAS,QAAA,EAAS,CAAGS,CAAG,CAAA,CACrEjI,CAAAA,EACFA,CAAAA,CAASkI,CAAO,CAAA,CAElBX,CAAAA,CAAeW,CAAO,EACxB,CAAA,CAEMrC,CAAAA,CAAcoC,CAAAA,EACXjM,CAAAA,EACLA,CAAAA,CAAM,SAAQ,GAAMiM,CAAAA,EACpBjM,CAAAA,CAAM,QAAA,EAAS,GAAMwL,CAAAA,CAAS,QAAA,EAAS,EACvCxL,CAAAA,CAAM,WAAA,EAAY,GAAMwL,CAAAA,CAAS,WAAA,EAAY,CAG3CW,CAAAA,CAAWF,CAAAA,EAAgB,CAC/B,IAAMG,CAAAA,CAAQ,IAAI,IAAA,CAClB,OAAOA,CAAAA,CAAM,OAAA,EAAQ,GAAMH,CAAAA,EACzBG,CAAAA,CAAM,QAAA,EAAS,GAAMZ,CAAAA,CAAS,QAAA,EAAS,EACvCY,EAAM,WAAA,EAAY,GAAMZ,CAAAA,CAAS,WAAA,EACrC,CAAA,CAEMa,CAAAA,CAAa,IAAM,CACvB,IAAMC,CAAAA,CAAcZ,CAAAA,CAAeF,CAAAA,CAAS,WAAA,EAAY,CAAGA,CAAAA,CAAS,UAAU,CAAA,CACxEe,CAAAA,CAAWV,CAAAA,CAAmBL,CAAAA,CAAS,WAAA,EAAY,CAAGA,CAAAA,CAAS,QAAA,EAAU,CAAA,CACzEgB,CAAAA,CAAO,EAAC,CAGd,IAAA,IAASC,CAAAA,CAAI,EAAGA,CAAAA,CAAIF,CAAAA,CAAUE,CAAAA,EAAAA,CAC5BD,CAAAA,CAAK,IAAA,CAAKzO,GAAAA,CAAC,KAAA,CAAA,CAAuB,SAAA,CAAU,SAAA,CAAA,CAAxB,CAAA,MAAA,EAAS0O,CAAC,CAAA,CAAwB,CAAE,CAAA,CAI1D,IAAA,IAASR,CAAAA,CAAM,CAAA,CAAGA,CAAAA,EAAOK,CAAAA,CAAaL,CAAAA,EAAAA,CAAO,CAC3C,IAAMS,CAAAA,CAAW7C,CAAAA,CAAWoC,CAAG,CAAA,CACzBG,CAAAA,CAAQD,CAAAA,CAAQF,CAAG,CAAA,CAEzBO,CAAAA,CAAK,IAAA,CACHzO,IAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMiO,CAAAA,CAAgBC,CAAG,CAAA,CAClC,IAAA,CAAK,QAAA,CACL,SAAA,CAAW/O,CAAAA,CACT,qEAAA,CACA,2HAAA,CACAwP,CAAAA,EAAY,sJAAA,CACZ,CAACA,CAAAA,EAAYN,CAAAA,EAAS,4GAAA,CACtB,CAACM,CAAAA,EAAY,CAACN,CAAAA,EAAS,4EACzB,CAAA,CAEC,QAAA,CAAAH,CAAAA,CAAAA,CAXIA,CAYP,CACF,EACF,CAEA,OAAOO,CACT,EAEA,OACE1O,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,8GAAA,CAAgHO,CAAS,CAAA,CAC1I,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACZ,QAAA,CAAA,CAAAoN,EAAAA,CAAOM,CAAAA,CAAS,QAAA,EAAU,CAAA,CAAE,GAAA,CAACzN,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kCAAA,CAAoC,QAAA,CAAAyN,CAAAA,CAAS,WAAA,GAAc,CAAA,CAAA,CAC3G,CAAA,CACA1N,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS+N,CAAAA,CACT,IAAA,CAAK,QAAA,CACL,SAAA,CAAU,4JAAA,CAEV,QAAA,CAAA/N,IAAC4O,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,CAAA,CACnC,CAAA,CACA5O,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASgO,CAAAA,CACT,IAAA,CAAK,QAAA,CACL,SAAA,CAAU,4JAAA,CAEV,QAAA,CAAAhO,GAAAA,CAAC6O,aAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CACpC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEA7O,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yCAAA,CACZ,QAAA,CAAAkN,EAAAA,CAAK,GAAA,CAAIgB,CAAAA,EACRlO,GAAAA,CAAC,KAAA,CAAA,CAAc,SAAA,CAAU,+FAAA,CACtB,QAAA,CAAAkO,CAAAA,CAAAA,CADOA,CAEV,CACD,CAAA,CACH,CAAA,CAEAlO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CACZ,QAAA,CAAAsO,CAAAA,EAAW,CACd,GACF,CAEJ,CCxHO,SAASQ,EAAAA,CAAW,CAAE,KAAA,CAAA7M,CAAAA,CAAO,QAAA,CAAAgE,CAAAA,CAAU,WAAA,CAAAS,CAAAA,CAAc,aAAA,CAAe,SAAA,CAAAhH,CAAU,CAAA,CAAoB,CACvG,GAAM,CAACqP,CAAAA,CAAMC,CAAO,CAAA,CAAIpL,QAAAA,CAA2B3B,CAAK,CAAA,CAClD,CAAC0E,CAAAA,CAAQC,CAAS,CAAA,CAAIhD,QAAAA,CAAS,KAAK,CAAA,CAEpC6D,CAAAA,CAAgB0G,CAAAA,EAAkB,CACtCa,CAAAA,CAAQb,CAAO,CAAA,CACflI,CAAAA,GAAWkI,CAAO,CAAA,CAClBvH,CAAAA,CAAU,KAAK,EACjB,CAAA,CAEMqI,CAAAA,CAAcC,CAAAA,EACXA,CAAAA,CAAE,kBAAA,CAAmB,OAAA,CAAS,CACnC,KAAA,CAAO,MAAA,CACP,GAAA,CAAK,SAAA,CACL,IAAA,CAAM,SACR,CAAC,CAAA,CAWH,OACEnP,IAAAA,CAACuJ,EAAAA,CAAA,CAAQ,IAAA,CAAM3C,CAAAA,CAAQ,YAAA,CAAcC,CAAAA,CACnC,QAAA,CAAA,CAAA7G,IAAAA,CAAC6J,EAAAA,CAAA,CACC,WAAA,CAXmBxI,CAAAA,EAA2C,CAClE,IAAME,CAAAA,CAAOF,CAAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB,CAC7CG,CAAAA,CAAIH,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,IAAA,CACrBE,CAAAA,CAAIJ,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BF,EAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAGG,CAAC,CAAA,EAAA,CAAI,CAAA,CACjDH,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAGI,CAAC,CAAA,EAAA,CAAI,EACnD,CAAA,CAMM,SAAA,CAAWrC,CAAAA,CACT,kPAAA,CACA,2HAAA,CACA,CAAC4P,CAAAA,EAAQ,kCAAA,CACTrP,CACF,CAAA,CAEA,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wGAAA,CACV,MAAO,CACL,UAAA,CAAY,6FACd,CAAA,CACL,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAiB,QAAA,CAAA+O,CAAAA,CAAOE,CAAAA,CAAWF,CAAI,CAAA,CAAIrI,CAAAA,CAAY,CAAA,CACvE1G,GAAAA,CAACmP,QAAAA,CAAA,CAAa,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAAA,CAChE,CAAA,CACAnP,GAAAA,CAAC+J,EAAAA,CAAA,CAAe,SAAA,CAAU,mDAAA,CAAoD,KAAA,CAAM,OAAA,CAClF,QAAA,CAAA/J,GAAAA,CAACoN,GAAA,CACC,KAAA,CAAO2B,CAAAA,CACP,QAAA,CAAUtH,CAAAA,CACV,SAAA,CAAU,4BAAA,CACZ,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC3DO,IAAM2H,EAAAA,CAAa5P,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,EAAU,WAAA,CAAA4P,CAAAA,CAAc,UAAA,CAAY,aAAA,CAAAC,CAAAA,CAAgB,IAAA,CAAM,GAAGzP,CAAM,CAAA,CAAGC,CAAAA,GAEhFE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,gBAEA,uCAAA,CACA,4FAAA,CACA,2CAAA,CACA,oGAAA,CACA,6CAAA,CAGA,+HAAA,CAGAkQ,CAAAA,GAAgB,UAAA,EAAc,mCAAA,CAC9BA,CAAAA,GAAgB,YAAA,EAAgB,mCAAA,CAChCA,CAAAA,GAAgB,MAAA,EAAU,eAAA,CAG1BC,CAAAA,GAAkB,MAAQ,2DAAA,CAC1BA,CAAAA,GAAkB,IAAA,EAAQ,2DAAA,CAC1BA,CAAAA,GAAkB,IAAA,EAAQ,uDAAA,CAE1B5P,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEA2P,EAAAA,CAAW,WAAA,CAAc,YAAA,CC/BlB,SAASG,EAAAA,CAAe,CAAE,MAAAtN,CAAAA,CAAO,QAAA,CAAAgE,CAAAA,CAAU,WAAA,CAAAS,CAAAA,CAAc,kBAAA,CAAoB,SAAA,CAAAhH,CAAU,CAAA,CAAwB,CACpH,GAAM,CAACqP,CAAAA,CAAMC,CAAO,CAAA,CAAIpL,QAAAA,CAA2B3B,CAAK,CAAA,CAClD,CAAC0E,CAAAA,CAAQC,CAAS,CAAA,CAAIhD,QAAAA,CAAS,KAAK,CAAA,CAGpC,CAAC4L,CAAAA,CAAOC,CAAQ,CAAA,CAAI7L,QAAAA,CAAS3B,CAAAA,CAAQA,CAAAA,CAAM,UAAS,CAAI,EAAE,CAAA,CAC1D,CAACyN,CAAAA,CAASC,CAAU,CAAA,CAAI/L,QAAAA,CAAS3B,CAAAA,CAAQA,CAAAA,CAAM,UAAA,EAAW,CAAI,CAAC,CAAA,CAErE+B,SAAAA,CAAU,IAAM,CACV/B,CAAAA,GACF+M,CAAAA,CAAQ/M,CAAK,CAAA,CACbwN,CAAAA,CAASxN,CAAAA,CAAM,QAAA,EAAU,CAAA,CACzB0N,CAAAA,CAAW1N,CAAAA,CAAM,UAAA,EAAY,CAAA,EAEjC,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAM2N,CAAAA,CAAoBzB,CAAAA,EAAkB,CAC1C,IAAM0B,CAAAA,CAAc,IAAI,IAAA,CAAK1B,CAAO,CAAA,CACpC0B,CAAAA,CAAY,QAAA,CAASL,CAAK,EAC1BK,CAAAA,CAAY,UAAA,CAAWH,CAAO,CAAA,CAC9BV,CAAAA,CAAQa,CAAW,CAAA,CACnB5J,CAAAA,GAAW4J,CAAW,EACxB,CAAA,CAEMC,CAAAA,CAAmB,CAACC,CAAAA,CAA2BC,CAAAA,GAAgB,CACnE,IAAIC,CAAAA,CAAM,QAAA,CAASD,CAAAA,CAAK,EAAE,CAAA,CAC1B,GAAI,KAAA,CAAMC,CAAG,CAAA,CAAG,OAEhB,IAAIC,CAAAA,CAAWV,CAAAA,CACXW,CAAAA,CAAaT,CAAAA,CAEbK,CAAAA,GAAS,OAAA,EACXE,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,EAAA,CAAIA,CAAG,CAAC,CAAA,CACnCR,CAAAA,CAASQ,CAAG,CAAA,CACZC,CAAAA,CAAWD,CAAAA,GAEXA,EAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,EAAA,CAAIA,CAAG,CAAC,CAAA,CACnCN,CAAAA,CAAWM,CAAG,CAAA,CACdE,CAAAA,CAAaF,CAAAA,CAAAA,CAGf,IAAMG,CAAAA,CAAWrB,CAAAA,EAAQ,IAAI,IAAA,CACvBc,CAAAA,CAAc,IAAI,IAAA,CAAKO,CAAQ,CAAA,CACrCP,CAAAA,CAAY,QAAA,CAASK,CAAQ,CAAA,CAC7BL,CAAAA,CAAY,UAAA,CAAWM,CAAU,CAAA,CACjCnB,EAAQa,CAAW,CAAA,CACnB5J,CAAAA,GAAW4J,CAAW,EACxB,CAAA,CAEMQ,CAAAA,CAAkBnB,CAAAA,EACfA,CAAAA,CAAE,kBAAA,CAAmB,OAAA,CAAS,CACnC,KAAA,CAAO,OAAA,CACP,GAAA,CAAK,SAAA,CACL,IAAA,CAAM,SAAA,CACN,IAAA,CAAM,SAAA,CACN,MAAA,CAAQ,SACV,CAAC,CAAA,CAWH,OACEnP,IAAAA,CAACuJ,EAAAA,CAAA,CAAQ,IAAA,CAAM3C,CAAAA,CAAQ,YAAA,CAAcC,CAAAA,CACnC,UAAA7G,IAAAA,CAAC6J,EAAAA,CAAA,CACC,WAAA,CAXmBxI,CAAAA,EAA2C,CAClE,IAAME,CAAAA,CAAOF,CAAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB,CAC7C,CAAA,CAAIA,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,KACrB,CAAA,CAAIF,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BF,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAA,CACjDA,CAAAA,CAAE,aAAA,CAAc,MAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,EACnD,CAAA,CAMM,SAAA,CAAWjC,CAAAA,CACT,kPAAA,CACA,2HAAA,CACA,CAAC4P,CAAAA,EAAQ,kCAAA,CACTrP,CACF,CAAA,CAEA,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wGAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,uFACd,CAAA,CACL,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAiB,QAAA,CAAA+O,EAAOsB,CAAAA,CAAetB,CAAI,CAAA,CAAIrI,CAAAA,CAAY,CAAA,CAC3E3G,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0DAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACmP,QAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CAClCnP,GAAAA,CAACsQ,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAAA,CAC7B,CAAA,CAAA,CACF,CAAA,CACAtQ,GAAAA,CAAC+J,EAAAA,CAAA,CAAe,SAAA,CAAU,mDAAA,CAAoD,KAAA,CAAM,OAAA,CAClF,QAAA,CAAA/J,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kJAAA,CACb,QAAA,CAAAD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,MAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACb,QAAA,CAAAA,GAAAA,CAACoN,EAAAA,CAAA,CACC,KAAA,CAAO2B,CAAAA,CACP,QAAA,CAAUa,CAAAA,CACV,SAAA,CAAU,yEAAA,CACZ,CAAA,CACF,CAAA,CAEA7P,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2DAAA,CAA4D,QAAA,CAAA,MAAA,CAAI,CAAA,CAC/ED,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAACqP,EAAAA,CAAA,CAAW,SAAA,CAAU,4BAAA,CAA6B,aAAA,CAAc,IAAA,CAC/D,QAAA,CAAA,CAAApP,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6GAAA,CAA8G,QAAA,CAAA,IAAA,CAAE,CAAA,CAC/HA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACZ,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CAAE,IAAI,CAACmL,CAAAA,CAAGuD,CAAAA,GAClC1O,GAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAM8P,CAAAA,CAAiB,OAAA,CAASpB,CAAAA,CAAE,QAAA,EAAU,CAAA,CACrD,SAAA,CAAWvP,CAAAA,CACT,8EAAA,CACAqQ,CAAAA,GAAUd,CAAAA,CACN,8DAAA,CACA,yHACN,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAA,CAAA,CATxBA,CAUP,CACD,CAAA,CACH,GACF,CAAA,CACA1O,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CAA2C,CAAA,CAC1DD,IAAAA,CAACqP,EAAAA,CAAA,CAAW,SAAA,CAAU,4BAAA,CAA6B,aAAA,CAAc,IAAA,CAC/D,QAAA,CAAA,CAAApP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6GAAA,CAA8G,QAAA,CAAA,KAAA,CAAG,CAAA,CAChIA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACZ,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAACmL,CAAAA,CAAGuD,CAAAA,GAClC1O,GAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAM8P,CAAAA,CAAiB,SAAA,CAAWpB,CAAAA,CAAE,QAAA,EAAU,CAAA,CACvD,SAAA,CAAWvP,CAAAA,CACT,8EAAA,CACAuQ,CAAAA,GAAYhB,CAAAA,CACR,8DAAA,CACA,yHACN,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAA,CAAA,CATxBA,CAUP,CACD,CAAA,CACH,CAAA,CAAA,CACF,GACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,KC1Ja6B,EAAAA,CAAW/Q,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAA8F,CAAAA,CAAO,KAAA,CAAAM,CAAAA,CAAO,EAAA,CAAAJ,CAAAA,CAAI,QAAA,CAAA3E,CAAAA,CAAU,GAAGlB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC5D,IAAM0Q,CAAAA,CAAchR,WAAAA,CAAM,KAAA,EAAM,CAC1BmG,CAAAA,CAAUD,CAAAA,EAAM8K,CAAAA,CAEtB,OACEzQ,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CACZ,QAAA,CAAA,CAAAyF,CAAAA,EACCxF,GAAAA,CAACmF,CAAAA,CAAA,CACC,OAAA,CAASQ,CAAAA,CACT,SAAA,CAAWxG,CAAAA,CAAG4B,CAAAA,EAAY,+BAA+B,CAAA,CAExD,QAAA,CAAAyE,CAAAA,CACH,CAAA,CAGFxF,GAAAA,CAAC,YACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAI6F,CAAAA,CACJ,QAAA,CAAU5E,CAAAA,CACV,SAAA,CAAW5B,CAAAA,CACT,8DAAA,CACA,iDAAA,CACA,wFAAA,CACA,0DAAA,CACA,aAAA,CACA,iDAAA,CACA2G,CAAAA,EAAS,2CAAA,CACTpG,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAAA,CAECiG,CAAAA,EACC9F,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2EAAA,CACV,QAAA,CAAA8F,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAyK,GAAS,WAAA,CAAc,UAAA,CCzCvB,IAAME,EAAAA,CAAoBpH,aAAAA,CAAsC,EAAE,CAAA,CAUrDqH,EAAAA,CAAalR,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAgE,CAAAA,CAAU,KAAAO,CAAAA,CAAM,QAAA,CAAAzF,CAAAA,CAAU,KAAA,CAAAyE,CAAAA,CAAO,QAAA,CAAA/F,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAClF,IAAM4F,CAAAA,CAAKlG,WAAAA,CAAM,KAAA,GAEjB,OACEO,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKD,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,qBAAA,CAAuBO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACjE,QAAA,CAAA,CAAA2F,CAAAA,EACCxF,GAAAA,CAACmF,CAAAA,CAAA,CAAM,SAAA,CAAWhG,CAAAA,CAAG4B,CAAAA,EAAY,+BAA+B,CAAA,CAC7D,QAAA,CAAAyE,CAAAA,CACH,CAAA,CAEFxF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CAAsB,IAAA,CAAK,YAAA,CACxC,QAAA,CAAAA,GAAAA,CAACyQ,EAAAA,CAAkB,QAAA,CAAlB,CAA2B,KAAA,CAAO,CAAE,KAAA,CAAAxO,CAAAA,CAAO,QAAA,CAAAgE,CAAAA,CAAU,IAAA,CAAMO,CAAAA,EAAQd,CAAAA,CAAI,QAAA,CAAA3E,CAAS,CAAA,CAC9E,QAAA,CAAAtB,EACH,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CACF,EAEAiR,EAAAA,CAAW,WAAA,CAAc,YAAA,CAOlB,IAAMC,EAAAA,CAAiBnR,WAAAA,CAAM,UAAA,CAClC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,KAAA,CAAAuD,CAAAA,CAAO,QAAA,CAAAzE,CAAAA,CAAU,GAAGlB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACxD,IAAM+J,CAAAA,CAAUC,UAAAA,CAAW2G,EAAiB,CAAA,CACtCvK,EAAY2D,CAAAA,CAAQ,KAAA,GAAU5H,CAAAA,CAC9B2O,CAAAA,CAAa/G,CAAAA,CAAQ,QAAA,EAAY9I,CAAAA,CACjC2E,CAAAA,CAAKlG,WAAAA,CAAM,KAAA,EAAM,CAEvB,OACEO,IAAAA,CAAC,OAAA,CAAA,CACC,OAAA,CAAS2F,CAAAA,CACT,SAAA,CAAWvG,CAAAA,CACT,8CAAA,CACAyR,CAAAA,EAAc,+BAAA,CACdlR,CACF,CAAA,CAEA,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,EACL,EAAA,CAAI4F,CAAAA,CACJ,IAAA,CAAK,OAAA,CACL,IAAA,CAAMmE,CAAAA,CAAQ,IAAA,CACd,KAAA,CAAO5H,CAAAA,CACP,OAAA,CAASiE,CAAAA,CACT,QAAA,CAAU0K,CAAAA,CACV,QAAA,CAAWxP,CAAAA,EAAM,CACXA,CAAAA,CAAE,MAAA,CAAO,OAAA,EACXyI,CAAAA,CAAQ,QAAA,GAAW5H,CAAK,EAE5B,CAAA,CACA,SAAA,CAAU,cAAA,CACT,GAAGpC,CAAAA,CACN,CAAA,CACAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,EACT,8HAAA,CACA,sNAAA,CACA,0DAAA,CACA+G,CAAAA,EAAa,6DACf,CAAA,CAEC,QAAA,CAAAA,CAAAA,EACClG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CAA8C,CAAA,CAC/D,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACCwF,CAAAA,EACCxF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kEAAA,CACb,QAAA,CAAAwF,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAmL,GAAe,WAAA,CAAc,gBAAA,CCnG7B,IAAME,EAAAA,CAAkBrR,WAAAA,CAAM,aAAA,CAAoC,EAA0B,CAAA,CAE/EsR,EAAAA,CAAWtR,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAChC,IAAM4F,CAAAA,CAAKlG,WAAAA,CAAM,KAAA,EAAM,CACvB,OACEQ,GAAAA,CAAC6Q,EAAAA,CAAgB,QAAA,CAAhB,CAAyB,KAAA,CAAO,CAAE,EAAA,CAAAnL,CAAG,CAAA,CACpC,QAAA,CAAA1F,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAAA,CACnE,CAEJ,CACF,EACAiR,EAAAA,CAAS,WAAA,CAAc,UAAA,CAEhB,IAAMC,EAAAA,CAAYvR,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAChC,GAAM,CAAE,EAAA,CAAA4F,CAAG,CAAA,CAAIlG,WAAAA,CAAM,UAAA,CAAWqR,EAAe,EAC/C,OACE7Q,GAAAA,CAACmF,CAAAA,CAAA,CACC,GAAA,CAAKrF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,4FAAA,CAA8FO,CAAS,CAAA,CACrH,OAAA,CAASgG,CAAAA,CACR,GAAG7F,CAAAA,CACN,CAEJ,CACF,EACAkR,EAAAA,CAAU,WAAA,CAAc,WAAA,CAEjB,IAAMC,EAAAA,CAAcxR,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,GAAGK,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACrB,GAAM,CAAE,EAAA,CAAA4F,CAAG,CAAA,CAAIlG,WAAAA,CAAM,UAAA,CAAWqR,EAAe,CAAA,CACzC,CAAE,QAAA,CAAApR,CAAAA,CAAU,GAAGwR,CAAK,CAAA,CAAIpR,CAAAA,CAE9B,OAAIL,YAAM,cAAA,CAAeC,CAAQ,CAAA,CACtBD,WAAAA,CAAM,YAAA,CAAaC,CAAAA,CAAgC,CACtD,EAAA,CAAAiG,CAAAA,CACA,kBAAA,CAAoB,CAAA,EAAGA,CAAE,CAAA,aAAA,EAAgBA,CAAE,CAAA,QAAA,CAAA,CAC3C,GAAGuL,CAAAA,CACH,GAAIxR,CAAAA,CAAS,KACjB,CAAC,CAAA,CAEEO,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAM,GAAGD,CAAAA,CAAO,CACnC,CACF,EACAmR,EAAAA,CAAY,YAAc,aAAA,CAEnB,IAAME,EAAAA,CAAkB1R,WAAAA,CAAM,UAAA,CACnC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAChC,GAAM,CAAE,EAAA,CAAA4F,CAAG,CAAA,CAAIlG,WAAAA,CAAM,UAAA,CAAWqR,EAAe,CAAA,CAC/C,OACE7Q,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAI,CAAA,EAAG4F,CAAE,CAAA,YAAA,CAAA,CACT,UAAWvG,CAAAA,CAAG,uBAAA,CAAyBO,CAAS,CAAA,CAC/C,GAAGG,CAAAA,CACN,CAEJ,CACF,EACAqR,EAAAA,CAAgB,WAAA,CAAc,iBAAA,CAEvB,IAAMC,EAAAA,CAAc3R,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC1C,GAAM,CAAE,EAAA,CAAA4F,CAAG,CAAA,CAAIlG,WAAAA,CAAM,WAAWqR,EAAe,CAAA,CAE/C,OAAKpR,CAAAA,CAKHO,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAI,CAAA,EAAG4F,CAAE,CAAA,QAAA,CAAA,CACT,SAAA,CAAWvG,CAAAA,CAAG,mCAAA,CAAqCO,CAAS,CAAA,CAC3D,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CAXO,IAaX,CACF,EACA0R,EAAAA,CAAY,WAAA,CAAc,aAAA,CC5E1B,IAAMC,EAAAA,CAAQ,CACZ,OAAA,CACEpR,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4BAAA,CAA6B,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAC/M,QAAA,CAAAA,GAAAA,CAAC,QAAK,CAAA,CAAE,6BAAA,CAA8B,CAAA,CACxC,CAAA,CAEF,OAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,kBAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,oCAAA,CAAqC,EAC7CA,GAAAA,CAAC,UAAA,CAAA,CAAS,MAAA,CAAO,uBAAA,CAAwB,CAAA,CAAA,CAC3C,CAAA,CAEF,KAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,YAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,eAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,KAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAC/BA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CACrCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,OAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,6BAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,gBAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,2EAAA,CAA4E,CAAA,CACpFA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,GAAG,IAAA,CAAK,CAAA,CACrCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,IAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,eAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAC/BA,GAAAA,CAAC,MAAA,CAAA,CAAK,GAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,GAAG,GAAA,CAAI,CAAA,CAAA,CACzC,CAEJ,CAAA,CAEaqR,EAAAA,CAAQ,CAAC,CACpB,EAAA,CAAA3L,CAAAA,CACA,KAAA,CAAAjB,CAAAA,CACA,WAAA,CAAA6M,CAAAA,CACA,OAAA,CAAA7Q,CAAAA,CAAU,SAAA,CACV,QAAA,CAAA6C,CAAAA,CAAW,GAAA,CACX,SAAA,CAAAiO,CACF,CAAA,IACEvN,SAAAA,CAAU,IAAM,CACd,GAAIV,CAAAA,GAAa,CAAA,CAAA,CAAA,CAAU,OAE3B,IAAMkO,CAAAA,CAAQ,UAAA,CAAW,IAAM,CAC7BD,CAAAA,CAAU7L,CAAE,EACd,CAAA,CAAGpC,CAAQ,CAAA,CAEX,OAAO,IAAM,YAAA,CAAakO,CAAK,CACjC,CAAA,CAAG,CAAClO,CAAAA,CAAUoC,CAAAA,CAAI6L,CAAS,CAAC,CAAA,CAG1BxR,IAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,OAAA,CACL,SAAA,CAAWZ,CAAAA,CACT,qIAAA,CACA,0DAAA,CACA,qFAAA,CACAsB,CAAAA,GAAY,OAAA,EAAW,wEAAA,CACvBA,CAAAA,GAAY,WAAa,oFAAA,CACzBA,CAAAA,GAAY,SAAA,EAAa,4EAAA,CACzBA,CAAAA,GAAY,MAAA,EAAU,wEAAA,CACtBA,CAAAA,GAAY,SAAA,EAAa,wEAC3B,CAAA,CAEC,QAAA,CAAA,CAAAA,CAAAA,GAAY,SAAA,EAAa2Q,EAAAA,CAAM3Q,CAAO,CAAA,EACrCT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACZ,QAAA,CAAAoR,EAAAA,CAAM3Q,CAAO,CAAA,CAChB,CAAA,CAGFV,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACZ,QAAA,CAAA,CAAA0E,CAAAA,EAASzE,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qDAAA,CAAuD,QAAA,CAAAyE,CAAAA,CAAM,CAAA,CACrF6M,CAAAA,EAAetR,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAsR,CAAAA,CAAY,CAAA,CAAA,CACzF,CAAA,CAEAtR,GAAAA,CAAC,UACC,OAAA,CAAS,IAAMuR,CAAAA,CAAU7L,CAAE,CAAA,CAC3B,SAAA,CAAU,wPAAA,CAEV,QAAA,CAAA3F,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CACxK,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CACpCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA,CAAA,CACtC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EClFG,IAAMyR,EAAAA,CAAepI,aAAAA,CAA4C,MAAS,EAE1E,SAASqI,EAAAA,CAAc,CAAE,QAAA,CAAAjS,CAAS,CAAA,CAAkC,CACzE,GAAM,CAACkS,EAAQC,CAAS,CAAA,CAAIhO,QAAAA,CAAuB,EAAE,CAAA,CAE/CiO,CAAAA,CAAUnJ,WAAAA,CAAahD,CAAAA,EAAe,CAC1CkM,CAAAA,CAAWhK,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAQkK,CAAAA,EAAUA,CAAAA,CAAM,EAAA,GAAOpM,CAAE,CAAC,EAC7D,CAAA,CAAG,EAAE,CAAA,CAECoM,CAAAA,CAAQpJ,WAAAA,CAAajF,CAAAA,EAA0B,CACnD,IAAMiC,CAAAA,CAAK,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,CAAG,CAAC,CAAA,CACpD,OAAAkM,CAAAA,CAAWhK,CAAAA,EAAS,CAAC,GAAGA,CAAAA,CAAM,CAAE,GAAGnE,CAAAA,CAAS,GAAAiC,CAAAA,CAAI,SAAA,CAAWmM,CAAQ,CAAC,CAAC,CAAA,CAC9DnM,CACT,CAAA,CAAG,CAACmM,CAAO,CAAC,CAAA,CAENE,CAAAA,CAAcrJ,WAAAA,CAAY,CAAChD,CAAAA,CAAYjC,IAAmC,CAC9EmO,CAAAA,CAAWhK,CAAAA,EACTA,CAAAA,CAAK,GAAA,CAAKoK,CAAAA,EAAOA,CAAAA,CAAE,EAAA,GAAOtM,CAAAA,CAAK,CAAE,GAAGsM,CAAAA,CAAG,GAAGvO,CAAQ,CAAA,CAAIuO,CAAE,CAC1D,EACF,CAAA,CAAG,EAAE,CAAA,CAECC,CAAAA,CAAUvJ,WAAAA,CACd,MACEuJ,CAAAA,CACAxO,CAAAA,GAKG,CACH,IAAMyO,CAAAA,CAAiB,OAAOzO,CAAAA,CAAQ,SAAY,QAAA,CAC9C,CAAE,KAAA,CAAOA,CAAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,SAAmB,CAAA,CACtD,CAAE,OAAA,CAAS,SAAA,CAAoB,GAAGA,CAAAA,CAAQ,OAAQ,CAAA,CAEhDiC,CAAAA,CAAKoM,CAAAA,CAAM,CAAE,GAAGI,CAAAA,CAAgB,QAAA,CAAU,CAAA,CAAA,CAAS,CAAC,CAAA,CAE1D,GAAI,CACF,IAAMC,CAAAA,CAAO,MAAMF,CAAAA,CACbG,CAAAA,CAAiB,OAAO3O,EAAQ,OAAA,EAAY,UAAA,CAC9CA,CAAAA,CAAQ,OAAA,CAAQ0O,CAAI,CAAA,CACpB,OAAO1O,CAAAA,CAAQ,OAAA,EAAY,QAAA,CAC3B,CAAE,KAAA,CAAOA,CAAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,SAAmB,CAAA,CACtDA,CAAAA,CAAQ,OAAA,CAEZ,OAAAsO,CAAAA,CAAYrM,CAAAA,CAAI,CAAE,GAAG0M,CAAAA,CAAgB,QAAA,CAAU,GAAK,CAAC,CAAA,CAC9CD,CACT,CAAA,MAASE,CAAAA,CAAK,CACZ,IAAMC,CAAAA,CAAe,OAAO7O,CAAAA,CAAQ,KAAA,EAAU,UAAA,CAC1CA,CAAAA,CAAQ,KAAA,CAAM4O,CAAG,CAAA,CACjB,OAAO5O,CAAAA,CAAQ,KAAA,EAAU,QAAA,CACzB,CAAE,KAAA,CAAOA,EAAQ,KAAA,CAAO,OAAA,CAAS,OAAiB,CAAA,CAClDA,CAAAA,CAAQ,KAAA,CAEZ,MAAAsO,CAAAA,CAAYrM,CAAAA,CAAI,CAAE,GAAG4M,CAAAA,CAAc,QAAA,CAAU,GAAK,CAAC,CAAA,CAC7CD,CACR,CACF,CAAA,CACA,CAACP,CAAAA,CAAOC,CAAW,CACrB,CAAA,CAEA,OACEhS,IAAAA,CAAC0R,EAAAA,CAAa,QAAA,CAAb,CAAsB,KAAA,CAAO,CAAE,KAAA,CAAAK,CAAAA,CAAO,OAAA,CAAAD,CAAAA,CAAS,OAAA,CAAAI,CAAQ,CAAA,CACrD,QAAA,CAAA,CAAAxS,CAAAA,CACDO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oJAAA,CACZ,QAAA,CAAA2R,CAAAA,CAAO,GAAA,CAAKG,CAAAA,EACX9R,GAAAA,CAACqR,GAAA,CAAsB,GAAGS,CAAAA,CAAAA,CAAdA,CAAAA,CAAM,EAAe,CAClC,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CC7EA,IAAMV,EAAAA,CAAQ,CACZ,OAAA,CACErR,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,YAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,kBAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,oCAAA,CAAqC,CAAA,CAC7CA,GAAAA,CAAC,UAAA,CAAA,CAAS,MAAA,CAAO,uBAAA,CAAwB,CAAA,CAAA,CAC3C,CAAA,CAEF,KAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,eAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,UAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAC/BA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA,CACrCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,OAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,SAAA,CAAU,gBAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,2EAAA,CAA4E,CAAA,CACpFA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CACrCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,KACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,eAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAC/BA,IAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,GAAG,OAAA,CAAQ,EAAA,CAAG,GAAA,CAAI,CAAA,CAAA,CACzC,CAEJ,CAAA,CAEauS,EAAAA,CAAQ/S,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,OAAA,CAAAe,CAAAA,CAAU,SAAA,CAAW,KAAAuB,CAAAA,CAAM,KAAA,CAAAyC,CAAAA,CAAO,QAAA,CAAAhF,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC5E,IAAM0S,CAAAA,CAAOxQ,CAAAA,GAASvB,CAAAA,GAAY,SAAA,CAAY2Q,EAAAA,CAAM3Q,CAAO,CAAA,CAAI,IAAA,CAAA,CAE/D,OACEV,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,OAAA,CACL,SAAA,CAAWX,CAAAA,CACT,kLAAA,CACA,mHAAA,CACAsB,CAAAA,GAAY,OAAA,EAAW,0JACvBA,CAAAA,GAAY,SAAA,EAAa,iLAAA,CACzBA,CAAAA,GAAY,SAAA,EAAa,iKAAA,CACzBA,CAAAA,GAAY,MAAA,EAAU,yJAAA,CACtBf,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAA2S,CAAAA,CACDzS,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACZ,QAAA,CAAA,CAAA0E,CAAAA,EACCzE,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8CAAA,CACX,QAAA,CAAAyE,CAAAA,CACH,CAAA,CAEDhF,CAAAA,EACCO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CACZ,QAAA,CAAAP,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CACF,EAEA8S,EAAAA,CAAM,WAAA,CAAc,OAAA,CC/Db,IAAME,EAAAA,CAAWjT,WAAAA,CAAM,UAAA,CAC5B,CAAC,CACC,SAAA,CAAAE,CAAAA,CACA,KAAA,CAAAuC,CAAAA,CAAQ,CAAA,CACR,GAAA,CAAAkK,CAAAA,CAAM,GAAA,CACN,OAAA,CAAA1L,CAAAA,CAAU,UACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,eAAA,CAAAgS,CAAAA,CAAkB,KAAA,CAClB,SAAA,CAAAC,CAAAA,CAAY,KAAA,CACZ,kBAAA,CAAAC,CAAAA,CACA,GAAG/S,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,IAAMwM,CAAAA,CAAaoG,CAAAA,CAAkB,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAA,CAAKzQ,CAAAA,EAAS,CAAA,EAAKkK,CAAAA,CAAK,CAAC,CAAA,CAAG,CAAC,CAAA,CAAI,GAAA,CAElF0G,CAAAA,CAAW,CACf,OAAA,CAAS,wEAAA,CACT,OAAA,CAAS,sEAAA,CACT,OAAA,CAAS,oEAAA,CACT,MAAA,CAAQ,kEAAA,CACR,QAAA,CAAU,iHACZ,CAAA,CAQA,OACE7S,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,IAAA,CAAK,aAAA,CACL,eAAA,CAAe,CAAA,CACf,eAAA,CAAeqM,CAAAA,CACf,eAAA,CAAeuG,CAAAA,CAAkB,MAAA,CAAYzQ,CAAAA,CAC7C,SAAA,CAAW9C,CAAAA,CACT,2IAAA,CAdQ,CACZ,EAAA,CAAI,KAAA,CACJ,GAAI,KAAA,CACJ,EAAA,CAAI,KACN,CAAA,CAWYuB,CAAI,CAAA,CACVhB,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,uFAAA,CACA0T,CAAAA,CAASpS,CAAO,CAAA,CAChBiS,CAAAA,EAAmB,oEAAA,CACnBE,CACF,CAAA,CACA,KAAA,CAAO,CACL,SAAA,CAAWF,CAAAA,CAAkB,MAAA,CAAY,CAAA,YAAA,EAAe,GAAA,CAAMpG,CAAU,CAAA,EAAA,CAC1E,EAEC,QAAA,CAAAqG,CAAAA,EAAa,CAACD,CAAAA,EACb1S,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDAAA,CACV,KAAA,CAAO,CACL,eAAA,CAAiB,kKAAA,CACjB,cAAA,CAAgB,WAClB,CAAA,CACL,CAAA,CAEJ,CAAA,CACF,CAEJ,CACF,EAEAyS,EAAAA,CAAS,WAAA,CAAc,UAAA,CCzEvB,IAAMK,EAAAA,CAAc,CAClB,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,mBAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,EAAA,CAAI,mBACN,CAAA,CAEaC,EAAAA,CAASvT,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAA,CAAAsT,CAAAA,CAAK,GAAA,CAAAC,CAAAA,CAAK,QAAA,CAAAC,CAAAA,CAAU,IAAA,CAAAxS,CAAAA,CAAO,IAAA,CAAM,GAAGb,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACjE,GAAM,CAACqT,CAAAA,CAAYC,CAAa,CAAA,CAAIxP,QAAAA,CAAS,KAAK,CAAA,CAElD,OAAAI,SAAAA,CAAU,IAAM,CACdoP,CAAAA,CAAc,KAAK,EACrB,CAAA,CAAG,CAACJ,CAAG,CAAC,CAAA,CAGNhT,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,sFAAA,CACA2T,EAAAA,CAAYpS,CAAI,CAAA,CAChBhB,CACF,CAAA,CACC,GAAGG,EAEH,QAAA,CAAAmT,CAAAA,EAAO,CAACG,CAAAA,CACPnT,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKgT,CAAAA,CACL,GAAA,CAAKC,CAAAA,CACL,SAAA,CAAU,0CAAA,CACV,OAAA,CAAS,IAAMG,CAAAA,CAAc,IAAI,CAAA,CACnC,CAAA,CAEApT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yHAAA,CACZ,QAAA,CAAAkT,CAAAA,GAAaD,CAAAA,CAAMA,CAAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAAI,GAAA,CAAA,CACpD,EAEJ,CAEJ,CACF,EAEAF,EAAAA,CAAO,WAAA,CAAc,QAAA,CC1CrB,IAAMM,EAAAA,CAAmBhK,aAAAA,CAAiD,MAAS,CAAA,CAU5E,SAASiK,EAAAA,CAAU,CACxB,IAAA,CAAAvD,EAAO,QAAA,CACP,YAAA,CAAAtJ,CAAAA,CACA,KAAA,CAAAxE,CAAAA,CACA,aAAA,CAAAqI,CAAAA,CACA,SAAA,CAAA5K,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAmB,CACjB,GAAM,CAACgH,CAAAA,CAAeC,CAAgB,CAAA,CAAIlD,QAAAA,CACxC6C,CAAAA,GAAiBsJ,CAAAA,GAAS,UAAA,CAAa,EAAC,CAAI,EAAA,CAC9C,CAAA,CAEM5I,CAAAA,CAAelF,CAAAA,GAAU,MAAA,CAAYA,CAAAA,CAAQ4E,CAAAA,CAE7CiE,EAAqByI,CAAAA,EAAsB,CAC/C,IAAIlN,CAAAA,CAEJ,GAAI0J,CAAAA,GAAS,UAAA,CAAY,CACvB,IAAMyD,CAAAA,CAAa,KAAA,CAAM,OAAA,CAAQrM,CAAY,CAAA,CAAIA,CAAAA,CAAe,EAAC,CAC7DqM,CAAAA,CAAW,QAAA,CAASD,CAAS,CAAA,CAC/BlN,CAAAA,CAAWmN,CAAAA,CAAW,MAAA,CAAQC,CAAAA,EAAMA,CAAAA,GAAMF,CAAS,CAAA,CAEnDlN,CAAAA,CAAW,CAAC,GAAGmN,CAAAA,CAAYD,CAAS,EAExC,CAAA,KACElN,CAAAA,CAAWc,CAAAA,GAAiBoM,CAAAA,CAAY,EAAA,CAAKA,CAAAA,CAG3CtR,CAAAA,GAAU,MAAA,EACZ6E,CAAAA,CAAiBT,CAAQ,CAAA,CAG3BiE,CAAAA,GAAgBjE,CAAe,EACjC,CAAA,CAEA,OACErG,GAAAA,CAACqT,EAAAA,CAAiB,QAAA,CAAjB,CACC,KAAA,CAAO,CAAE,KAAA,CAAOlM,CAAAA,CAAc,aAAA,CAAe2D,CAAAA,CAAmB,IAAA,CAAAiF,CAAK,CAAA,CAErE,QAAA,CAAA/P,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7C,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAGA,IAAMiU,EAAAA,CAAuBrK,aAAAA,CAAkD,CAAE,KAAA,CAAO,EAAA,CAAI,MAAA,CAAQ,KAAM,CAAC,CAAA,CAOpG,SAASsK,EAAAA,CAAc,CAAE,SAAA,CAAAjU,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAxC,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAuB,CAC1F,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWuJ,EAAgB,CAAA,CACrC1M,CAAAA,CAAS,KAAA,CAAM,OAAA,CAAQkD,CAAAA,EAAS,KAAK,CAAA,CACvCA,CAAAA,EAAS,KAAA,CAAM,QAAA,CAAS5H,CAAK,CAAA,CAC7B4H,CAAAA,EAAS,KAAA,GAAU5H,CAAAA,CAEvB,OACEjC,GAAAA,CAAC0T,EAAAA,CAAqB,QAAA,CAArB,CAA8B,KAAA,CAAO,CAAE,KAAA,CAAAzR,CAAAA,CAAO,MAAA,CAAQ,CAAC,CAAC0E,CAAO,CAAA,CAC9D,QAAA,CAAA3G,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,oIAAA,CACAwH,CAAAA,EAAU,oEAAA,CACVjH,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAASmU,EAAAA,CAAiB,CAAE,SAAA,CAAAlU,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA0B,CACzF,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWuJ,EAAgB,CAAA,CACrC,CAAE,KAAA,CAAApR,CAAAA,CAAO,MAAA,CAAA0E,CAAO,CAAA,CAAImD,UAAAA,CAAW4J,EAAoB,CAAA,CAEzD,OACE3T,IAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM8J,CAAAA,EAAS,aAAA,CAAc5H,CAAK,CAAA,CAC3C,eAAA,CAAe0E,CAAAA,CACf,eAAA,CAAe,CAAA,kBAAA,EAAqB1E,CAAK,CAAA,CAAA,CACzC,EAAA,CAAI,CAAA,kBAAA,EAAqBA,CAAK,CAAA,CAAA,CAC9B,SAAA,CAAW9C,EACT,qLAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAJ,CAAAA,CACDO,GAAAA,CAAC6T,WAAAA,CAAA,CACC,SAAA,CAAW1U,CAAAA,CACT,qFAAA,CACAwH,CAAAA,EAAU,0CACZ,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAMO,SAASmN,EAAAA,CAAiB,CAAE,SAAA,CAAApU,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA0B,CACzF,GAAM,CAAE,OAAA8G,CAAAA,CAAQ,KAAA,CAAA1E,CAAM,CAAA,CAAI6H,UAAAA,CAAW4J,EAAoB,CAAA,CAEzD,OAAK/M,CAAAA,CAGH3G,GAAAA,CAAC,KAAA,CAAA,CACC,EAAA,CAAI,CAAA,kBAAA,EAAqBiC,CAAK,CAAA,CAAA,CAC9B,IAAA,CAAK,SACL,iBAAA,CAAiB,CAAA,kBAAA,EAAqBA,CAAK,CAAA,CAAA,CAC3C,SAAA,CAAW9C,CAAAA,CACT,6GAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CAdkB,IAgBtB,CChJA,IAAMsU,EAAAA,CAAc1K,aAAAA,CAA4C,MAAS,CAAA,CASlE,SAAS2K,EAAAA,CAAK,CACnB,YAAA,CAAAvN,CAAAA,CACA,KAAA,CAAAxE,CAAAA,CACA,aAAA,CAAAqI,CAAAA,CACA,SAAA,CAAA5K,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAc,CACZ,GAAM,CAACgH,CAAAA,CAAeC,CAAgB,CAAA,CAAIlD,QAAAA,CAAS6C,CAAY,CAAA,CAEzDqE,CAAAA,CAAqBzE,CAAAA,EAAqB,CAC1CpE,CAAAA,GAAU,MAAA,EACZ6E,CAAAA,CAAiBT,CAAQ,CAAA,CAE3BiE,CAAAA,GAAgBjE,CAAQ,EAC1B,CAAA,CAEMc,CAAAA,CAAelF,CAAAA,GAAU,MAAA,CAAYA,CAAAA,CAAQ4E,CAAAA,CAEnD,OACE7G,GAAAA,CAAC+T,EAAAA,CAAY,QAAA,CAAZ,CAAqB,KAAA,CAAO,CAAE,KAAA,CAAO5M,EAAc,aAAA,CAAe2D,CAAkB,CAAA,CACnF,QAAA,CAAA9K,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,QAAA,CAAUO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC1C,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAASwU,EAAAA,CAAS,CAAE,SAAA,CAAAvU,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAkB,CACzE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,KAAK,SAAA,CACL,SAAA,CAAWb,CAAAA,CACT,gIAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAOO,SAASyU,EAAAA,CAAY,CAAE,SAAA,CAAAxU,EAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAxC,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAqB,CACtF,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWiK,EAAW,CAAA,CACtC,GAAI,CAAClK,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA,CAEpE,IAAMmC,CAAAA,CAAWnC,CAAAA,CAAQ,KAAA,GAAU5H,CAAAA,CAEnC,OACEjC,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,KAAA,CACL,eAAA,CAAegM,CAAAA,CACf,eAAA,CAAe,CAAA,aAAA,EAAgB/J,CAAK,CAAA,CAAA,CACpC,EAAA,CAAI,CAAA,aAAA,EAAgBA,CAAK,CAAA,CAAA,CACzB,OAAA,CAAS,IAAM4H,CAAAA,CAAQ,aAAA,CAAc5H,CAAK,CAAA,CAC1C,UAAW9C,CAAAA,CACT,4VAAA,CACA6M,CAAAA,CACI,6FAAA,CACA,wFAAA,CACJtM,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAOO,SAAS0U,EAAAA,CAAY,CAAE,SAAA,CAAAzU,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAxC,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAqB,CACtF,IAAMgK,CAAAA,CAAUC,UAAAA,CAAWiK,EAAW,CAAA,CACtC,GAAI,CAAClK,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA,CAEpE,OAAIA,CAAAA,CAAQ,KAAA,GAAU5H,CAAAA,CAAc,IAAA,CAGlCjC,GAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,EAAA,CAAI,CAAA,aAAA,EAAgBiC,CAAK,CAAA,CAAA,CACzB,iBAAA,CAAiB,CAAA,aAAA,EAAgBA,CAAK,CAAA,CAAA,CACtC,QAAA,CAAU,CAAA,CACV,SAAA,CAAW9C,CAAAA,CACT,gIAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,SAAAJ,CAAAA,CACH,CAEJ,CCpHO,IAAM2U,EAAAA,CAAU5U,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,oFAAA,CACA,8BACA,uCAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAIa4U,EAAAA,CAAgB7U,WAAAA,CAAM,UAAA,CACjC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,0EAAA,CAA4EO,CAAS,CAAA,CAClG,GAAGG,EAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAIa6U,EAAAA,CAAiB9U,WAAAA,CAAM,UAAA,CAClC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,4CAAA,CAA8CO,CAAS,CAAA,CACpE,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAIa8U,GAAgB/U,WAAAA,CAAM,UAAA,CACjC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,kDAAA,CAAoDO,CAAS,CAAA,CAC1E,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAQa+U,EAAAA,CAAchV,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,UAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,MAAA,CAAAgV,CAAAA,CAAQ,IAAA,CAAAzS,CAAAA,CAAM,KAAA,CAAA0S,CAAAA,CAAO,GAAG7U,CAAM,CAAA,CAAGC,CAAAA,GAErDC,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKD,EACL,SAAA,CAAWX,CAAAA,CACT,4FAAA,CACA,wFAAA,CACAsV,CAAAA,CACI,gEAAA,CACA,kCAAA,CACJ/U,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAmC,CAAAA,EAAQhC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,EAAG,0CAAA,CAA4CsV,CAAAA,CAAS,+BAAA,CAAkC,kCAAkC,CAAA,CAAI,QAAA,CAAAzS,CAAAA,CAAK,CAAA,CAC/JhC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kBAAA,CAAoB,QAAA,CAAAP,CAAAA,CAAS,CAAA,CAC5CiV,CAAAA,EACC1U,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uJAAA,CACb,QAAA,CAAA0U,CAAAA,CACH,CAAA,CAAA,CAEJ,CAGN,CAAA,CAMaC,EAAAA,CAAenV,WAAAA,CAAM,UAAA,CAChC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,SAAAD,CAAAA,CAAU,KAAA,CAAA+F,CAAAA,CAAO,GAAG3F,CAAM,CAAA,CAAGC,CAAAA,GAEvCC,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKD,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,MAAA,CAAQO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAClD,QAAA,CAAA,CAAA2F,CAAAA,EACCxF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2FAAA,CACZ,QAAA,CAAAwF,CAAAA,CACH,CAAA,CAEFxF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CAAa,QAAA,CAAAP,EAAS,CAAA,CAAA,CACvC,CAGN,ECvHA,IAAMmV,EAAAA,CAAkBrU,GAAAA,CACtB,yNAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,EAAA,CACT,KAAA,CAAO,+CACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAQasU,CAAAA,CAAUrV,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,OAAA,CAAAe,EAAS,OAAA,CAAAI,CAAAA,CAAU,KAAA,CAAO,GAAGhB,CAAM,CAAA,CAAGC,CAAAA,GAGhDE,GAAAA,CAFWa,CAAAA,CAAUZ,EAAAA,CAAO,KAAA,CAE3B,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGyV,GAAgB,CAAE,OAAA,CAAAnU,CAAAA,CAAS,SAAA,CAAAf,CAAU,CAAC,CAAC,CAAA,CACpD,GAAGG,CAAAA,CACN,CAGN,EAEAgV,CAAAA,CAAQ,WAAA,CAAc,SAAA,CCzBtB,IAAMC,EAAAA,CAAkB,CACtB,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,kBACJ,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,KAAA,CAAO,kBAAA,CACP,IAAA,CAAM,YACR,CAAA,CAEO,SAASC,EAAAA,CAAO,CACrB,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,EAAC,CACT,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAxV,CAAAA,CACA,QAAA,CAAAyV,CAAAA,CAAW,IACb,CAAA,CAAgB,CACd,GAAM,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAIzR,SAAS,KAAK,CAAA,CAC5C,CAAC0R,CAAAA,CAAkBC,CAAmB,CAAA,CAAI3R,QAAAA,CAAS,KAAK,CAAA,CAE9D,OAAAI,SAAAA,CAAU,IAAM,CACd,IAAMwR,CAAAA,CAAe,IAAM,CACzBH,CAAAA,CAAc,MAAA,CAAO,OAAA,CAAU,EAAE,EACnC,CAAA,CACA,OAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUG,CAAY,CAAA,CACvC,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,CAChE,CAAA,CAAG,EAAE,CAAA,CAGHxV,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,uEAAA,CACAiW,CAAAA,CAAa,MAAA,CAAS,MAAA,CACtB1V,CACF,CAAA,CAEA,QAAA,CAAAK,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,qCAAA,CAAuC2V,EAAAA,CAAgBK,CAAQ,CAAC,CAAA,CACjF,QAAA,CAAA,CAAApV,IAAAA,CAAC8U,CAAAA,CAAA,CACC,SAAA,CAAW1V,CAAAA,CACT,yEAAA,CACAiW,CAAAA,CACI,yFACA,kGACN,CAAA,CAGA,QAAA,CAAA,CAAApV,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAAgV,CAAAA,EAAQhV,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oCAAA,CAAqC,QAAA,CAAA,OAAA,CAAK,CAAA,CACrE,CAAA,CAGAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACZ,QAAA,CAAAiV,CAAAA,CAAM,GAAA,CAAKQ,CAAAA,EACVzV,GAAAA,CAAC,GAAA,CAAA,CAEC,IAAA,CAAMyV,CAAAA,CAAK,IAAA,CACX,SAAA,CAAU,kHAAA,CAET,QAAA,CAAAA,EAAK,KAAA,CAAA,CAJDA,CAAAA,CAAK,KAKZ,CACD,CAAA,CACH,CAAA,CAGA1V,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACZ,QAAA,CAAAkV,CAAAA,CACH,CAAA,CAEAlV,GAAAA,CAAC,QAAA,CAAA,CACC,SAAA,CAAU,2HAAA,CACV,OAAA,CAAS,IAAMuV,CAAAA,CAAoB,CAACD,CAAgB,CAAA,CAEnD,QAAA,CAAAA,CAAAA,CAAmBtV,GAAAA,CAAC0V,CAAAA,CAAA,CAAE,IAAA,CAAM,EAAA,CAAI,CAAA,CAAK1V,GAAAA,CAAC2V,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACxD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGA3V,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAmW,CAAAA,CACI,qCAAA,CACA,uDACN,CAAA,CAEA,QAAA,CAAAvV,IAAAA,CAAC8U,CAAAA,CAAA,CAAQ,SAAA,CAAU,sGAAA,CAChB,QAAA,CAAA,CAAAI,CAAAA,CAAM,GAAA,CAAKQ,CAAAA,EACVzV,GAAAA,CAAC,KAEC,IAAA,CAAMyV,CAAAA,CAAK,IAAA,CACX,SAAA,CAAU,oLAAA,CACV,OAAA,CAAS,IAAMF,CAAAA,CAAoB,KAAK,CAAA,CAEvC,QAAA,CAAAE,CAAAA,CAAK,KAAA,CAAA,CALDA,CAAAA,CAAK,KAMZ,CACD,EACDzV,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wEAAA,CACZ,QAAA,CAAAkV,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CC9GA,IAAMU,EAAAA,CAAsBvM,aAAAA,CAAoD,MAAS,CAAA,CAMlF,SAASwM,EAAAA,CAAa,CAAE,QAAA,CAAApW,CAAS,EAAsB,CAC5D,GAAM,CAACkH,CAAAA,CAAQC,CAAS,CAAA,CAAIhD,QAAAA,CAAS,KAAK,CAAA,CACpCmE,CAAAA,CAAa7G,MAAAA,CAAoB,IAAI,CAAA,CAE3C,OACElB,GAAAA,CAAC4V,EAAAA,CAAoB,QAAA,CAApB,CAA6B,KAAA,CAAO,CAAE,MAAA,CAAAjP,CAAAA,CAAQ,SAAA,CAAAC,CAAAA,CAAW,UAAA,CAAAmB,CAAW,CAAA,CACnE,QAAA,CAAA/H,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAAA,CACZ,SAAAP,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAASqW,EAAAA,CAAoB,CAAE,SAAA,CAAApW,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA6B,CAC/F,IAAMgK,CAAAA,CAAUC,UAAAA,CAAW8L,EAAmB,CAAA,CAC9C,GAAI,CAAC/L,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,sDAAsD,CAAA,CAEpF,IAAMzD,CAAAA,CAAehF,CAAAA,EAAwB,CAC3CyI,EAAQ,SAAA,CAAU,CAACA,CAAAA,CAAQ,MAAM,CAAA,CACjChK,CAAAA,CAAM,OAAA,GAAUuB,CAAQ,EAC1B,CAAA,CAEA,OACEpB,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAK6J,CAAAA,CAAQ,UAAA,CACb,KAAK,QAAA,CACL,eAAA,CAAc,MAAA,CACd,eAAA,CAAeA,CAAAA,CAAQ,MAAA,CAAS,MAAA,CAAS,OAAA,CACzC,OAAA,CAASzD,CAAAA,CACT,SAAA,CAAWjH,CAAAA,CAAG,yCAAA,CAA2CO,CAAS,CAAA,CACjE,GAAGG,EAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAQO,SAASsW,EAAAA,CAAoB,CAAE,SAAA,CAAArW,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,KAAA,CAAAyI,CAAAA,CAAQ,OAAA,CAAS,IAAA,CAAAD,CAAAA,CAAO,QAAA,CAAU,GAAGpI,CAAM,CAAA,CAA6B,CACjI,IAAMgK,CAAAA,CAAUC,UAAAA,CAAW8L,EAAmB,CAAA,CAC9C,GAAI,CAAC/L,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,sDAAsD,CAAA,CAEpF,IAAM7B,CAAAA,CAAa9G,MAAAA,CAAuB,IAAI,CAAA,CACxC,CAAE,QAAA,CAAAmH,CAAAA,CAAU,YAAA,CAAAE,CAAa,CAAA,CAAIT,EAAAA,CAAY+B,CAAAA,CAAQ,UAAA,CAAY7B,CAAAA,CAAY,CAC7E,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ2B,CAAAA,CAAQ,MAClB,CAAC,CAAA,CAgDD,GA9CA7F,SAAAA,CAAU,IAAM,CACd,GAAI6F,CAAAA,CAAQ,OAAQ,CAClB,IAAMG,CAAAA,CAAsB5I,CAAAA,EAAkB,CAE1C4G,CAAAA,CAAW,OAAA,EACX,CAACA,CAAAA,CAAW,OAAA,CAAQ,QAAA,CAAS5G,CAAAA,CAAE,MAAc,CAAA,EAC7CyI,CAAAA,CAAQ,UAAA,CAAW,OAAA,EACnB,CAACA,CAAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,QAAA,CAASzI,CAAAA,CAAE,MAAc,CAAA,EAErDyI,CAAAA,CAAQ,SAAA,CAAU,KAAK,EAE3B,CAAA,CAEMlC,CAAAA,CAAiBvG,CAAAA,EAAqB,CAM1C,GALIA,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACZyI,CAAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,CACvBA,CAAAA,CAAQ,UAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAAA,CAGhCzI,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAeA,EAAE,GAAA,GAAQ,SAAA,CAAW,CAChDA,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAMwJ,CAAAA,CAAQ5C,CAAAA,CAAW,OAAA,EAAS,gBAAA,CAAiB,mBAAmB,CAAA,CACtE,GAAI,CAAC4C,CAAAA,CAAM,OAAQ,OAEnB,IAAMoL,CAAAA,CAAe,KAAA,CAAM,IAAA,CAAKpL,CAAK,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAS,aAA4B,CAAA,CAChFqL,CAAAA,CAAY,CAAA,CAEZ7U,CAAAA,CAAE,GAAA,GAAQ,WAAA,CACZ6U,CAAAA,CAAAA,CAAaD,CAAAA,CAAe,CAAA,EAAKpL,CAAAA,CAAM,MAAA,CAEvCqL,CAAAA,CAAAA,CAAaD,CAAAA,CAAe,CAAA,CAAIpL,CAAAA,CAAM,MAAA,EAAUA,CAAAA,CAAM,MAAA,CAGxDA,CAAAA,CAAMqL,CAAS,CAAA,EAAG,KAAA,GACpB,CACF,CAAA,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAajM,CAAkB,CAAA,CACzD,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWrC,CAAa,CAAA,CAC3C,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaqC,CAAkB,CAAA,CAC5D,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWrC,CAAa,EACvD,CACF,CACF,CAAA,CAAG,CAACkC,CAAAA,CAAQ,MAAA,CAAQA,CAAAA,CAAQ,SAAA,CAAWA,EAAQ,UAAU,CAAC,CAAA,CAEtD,CAACA,CAAAA,CAAQ,MAAA,CAAQ,OAAO,IAAA,CAE5B,IAAMI,CAAAA,CAAqB,IACrBhC,CAAAA,GAAS,QAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,UAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,WAAA,CACrB,YAAA,CAELD,CAAAA,GAAS,KAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,aAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,cAAA,CACrB,eAAA,CAELD,CAAAA,GAAS,MAAA,CACPC,CAAAA,GAAU,QAAgB,WAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,cAAA,CACrB,cAAA,CAELD,CAAAA,GAAS,OAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,UAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,aAAA,CACrB,aAAA,CAEF,eAAA,CAGT,OAAOgC,aACLlK,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKgI,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,kBAAA,CAAiB,UAAA,CACjB,KAAA,CAAO,CACL,GAAA,CAAKK,CAAAA,CAAS,GAAA,CACd,IAAA,CAAMA,CAAAA,CAAS,IAAA,CACf,gBAAiB4B,CAAAA,EACnB,CAAA,CACA,SAAA,CAAW9K,CAAAA,CACT,8KAAA,CACAoJ,CAAAA,CAAe,2CAAA,CAA8C,WAAA,CAC7D7I,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACA,QAAA,CAAS,IACX,CACF,CAMO,SAASyW,EAAAA,CAAiB,CAAE,SAAA,CAAAxW,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA0B,CACzF,IAAMgK,EAAUC,UAAAA,CAAW8L,EAAmB,CAAA,CAO9C,OACE5V,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,UAAA,CACL,OAAA,CATiBoB,CAAAA,EAAwB,CAC3CyI,CAAAA,EAAS,SAAA,CAAU,KAAK,CAAA,CACxBhK,CAAAA,CAAM,OAAA,GAAUuB,CAAQ,EAC1B,CAAA,CAOI,SAAA,CAAWjC,CAAAA,CACT,2HAAA,CACA,kCAAA,CACA,wFAAA,CACA,wFAAA,CACA,gEAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS0W,EAAAA,CAAkB,CAAE,SAAA,CAAAzW,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACzG,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,iEAAA,CAAmEO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACnG,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS2W,EAAAA,CAAsB,CAAE,UAAA1W,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAyC,CACnG,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,kDAAA,CAAoDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAElG,CC7LO,SAASwW,EAAAA,CAAS,CACvB,IAAA,CAAA7P,CAAAA,CACA,WAAA,CAAA8K,CAAAA,CACA,SAAA,CAAAgF,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,UAAA7W,CAAAA,CACA,IAAA,CAAAuI,CAAAA,CAAO,KAAA,CACP,KAAA,CAAAC,CAAAA,CAAQ,OACV,CAAA,CAAkB,CAChB,OACEnI,IAAAA,CAAC8V,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA7V,GAAAA,CAAC8V,EAAAA,CAAA,CAAoB,SAAA,CAAW3W,CAAAA,CAAG,qBAAA,CAAuBO,CAAS,CAAA,CACjE,QAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6LAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC+S,EAAAA,CAAA,CAAO,GAAA,CAAKuD,EAAW,QAAA,CAAUC,CAAAA,EAAkB/P,CAAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAG,IAAA,CAAK,IAAA,CAAK,CAAA,CAC9EzG,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mDAAA,CAAqD,QAAA,CAAAwG,CAAAA,CAAK,CAAA,CACzE8K,CAAAA,EAAetR,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CAAgD,QAAA,CAAAsR,CAAAA,CAAY,CAAA,CAAA,CAC9F,CAAA,CACAtR,GAAAA,CAACwW,QAAAA,CAAA,CAAS,SAAA,CAAU,kHAAA,CAAmH,CAAA,CAAA,CACzI,CAAA,CACF,CAAA,CACAzW,IAAAA,CAACgW,EAAAA,CAAA,CAAoB,SAAA,CAAU,MAAA,CAAO,KAAA,CAAO7N,CAAAA,CAAO,IAAA,CAAMD,CAAAA,CACxD,QAAA,CAAA,CAAAjI,GAAAA,CAACmW,EAAAA,CAAA,CAAkB,QAAA,CAAA,YAAA,CAAU,CAAA,CAC7BnW,GAAAA,CAACoW,EAAAA,CAAA,EAAsB,CAAA,CACvBrW,IAAAA,CAACmW,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAlW,GAAAA,CAACyW,IAAAA,CAAA,CAAK,SAAA,CAAU,eAAe,CAAA,CAC/BzW,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,SAAA,CAAO,CAAA,CAAA,CACf,CAAA,CACAD,IAAAA,CAACmW,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAlW,GAAAA,CAACwW,QAAAA,CAAA,CAAS,SAAA,CAAU,cAAA,CAAe,CAAA,CACnCxW,IAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,CAAA,CACAA,GAAAA,CAACoW,EAAAA,CAAA,EAAsB,CAAA,CACvBrW,IAAAA,CAACmW,EAAAA,CAAA,CAAiB,SAAA,CAAU,mCAAA,CAC1B,QAAA,CAAA,CAAAlW,GAAAA,CAAC0W,MAAAA,CAAA,CAAO,SAAA,CAAU,cAAA,CAAe,CAAA,CACjC1W,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,SAAA,CAAO,CAAA,CAAA,CACf,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC5DA,IAAM2W,EAAAA,CAAanX,WAAAA,CAAM,UAAA,CAKvB,CAAC,CAAE,GAAGK,CAAM,CAAA,CAAGC,CAAAA,GAAQE,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,EAAK,YAAA,CAAW,YAAA,CAAc,GAAGD,CAAAA,CAAO,CAAE,EAC7E8W,EAAAA,CAAW,WAAA,CAAc,YAAA,CAEzB,IAAMC,EAAAA,CAAiBpX,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,qGAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CACD,EACD+W,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAiBrX,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,kCAAA,CAAoCO,CAAS,CAAA,CAC1D,GAAGG,CAAAA,CACN,CACD,EACDgX,EAAAA,CAAe,WAAA,CAAc,gBAAA,KAEvBC,EAAAA,CAAiBtX,WAAAA,CAAM,UAAA,CAK3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAExBE,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,EAAG,6DAAA,CAA+DO,CAAS,CAAA,CACrF,GAAGG,CAAAA,CACN,CAEH,EACDiX,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAiBvX,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,UAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,eAAA,CAAc,MAAA,CACd,cAAA,CAAa,MAAA,CACb,SAAA,CAAWX,CAAAA,CAAG,2CAAA,CAA6CO,CAAS,CAAA,CACnE,GAAGG,CAAAA,CACN,CACD,EACDkX,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAsB,CAAC,CAC3B,QAAA,CAAAvX,EACA,SAAA,CAAAC,CAAAA,CACA,GAAGG,CACL,CAAA,GACEG,GAAAA,CAAC,IAAA,CAAA,CACC,IAAA,CAAK,cAAA,CACL,aAAA,CAAY,MAAA,CACZ,SAAA,CAAWb,CAAAA,CAAG,kBAAA,CAAoBO,CAAS,CAAA,CAC1C,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,EACCO,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,OAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,SAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,eAAA,CAAgB,CAAA,CAC1B,CAAA,CAEJ,EAEFgX,EAAAA,CAAoB,WAAA,CAAc,qBAAA,CAElC,IAAMC,EAAAA,CAAqB,CAAC,CAC1B,SAAA,CAAAvX,CAAAA,CACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAAC,MAAA,CAAA,CACC,IAAA,CAAK,eACL,aAAA,CAAY,MAAA,CACZ,SAAA,CAAWZ,CAAAA,CAAG,0CAAA,CAA4CO,CAAS,CAAA,CAClE,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,OAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,SAAA,CAEV,QAAA,CAAA,CAAAC,IAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,CAC/B,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,QAAA,CAAA,MAAA,CAAI,GAChC,EAEFiX,EAAAA,CAAmB,WAAA,CAAc,oBAAA,CC7HjC,IAAMC,EAAAA,CAAa,CAAC,CAAE,SAAA,CAAAxX,CAAAA,CAAW,GAAGG,CAAM,CAAA,GACxCG,GAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,YAAA,CACL,YAAA,CAAW,YAAA,CACX,SAAA,CAAWb,CAAAA,CAAG,oCAAA,CAAsCO,CAAS,CAAA,CAC5D,GAAGG,CAAAA,CACN,EAEFqX,EAAAA,CAAW,WAAA,CAAc,YAAA,CAEzB,IAAMC,EAAAA,CAAoB3X,WAAAA,CAAM,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,kCAAA,CAAoCO,CAAS,CAAA,CAC1D,GAAGG,CAAAA,CACN,CACD,EACDsX,EAAAA,CAAkB,WAAA,CAAc,oBAEhC,IAAMC,EAAAA,CAAiB5X,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CAAG,GAAA,CAAKF,CAAAA,CAAK,UAAWX,CAAAA,CAAG,EAAA,CAAIO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CACxD,EACDuX,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAM7B,IAAMC,EAAAA,CAAiB,CAAC,CACtB,SAAA,CAAA3X,EACA,QAAA,CAAAsM,CAAAA,CACA,GAAGnM,CACL,CAAA,GACEG,GAAAA,CAAC,GAAA,CAAA,CACC,cAAA,CAAcgM,CAAAA,CAAW,MAAA,CAAS,MAAA,CAClC,SAAA,CAAW7M,CAAAA,CACT,mGAAA,CACA,wFAAA,CACA6M,CAAAA,CAAW,gEAAA,CAAmE,kCAAA,CAC9EtM,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,EAEFwX,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAqB,CAAC,CAC1B,SAAA,CAAA5X,CAAAA,CACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAACsX,EAAAA,CAAA,CACC,YAAA,CAAW,qBAAA,CACX,SAAA,CAAWlY,CAAAA,CAAG,qBAAA,CAAuBO,CAAS,CAAA,CAC7C,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,QACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,SAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,gBAAA,CAAiB,CAAA,CAC3B,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,EAEFsX,EAAAA,CAAmB,WAAA,CAAc,oBAAA,CAEjC,IAAMC,EAAAA,CAAiB,CAAC,CACtB,SAAA,CAAA7X,CAAAA,CACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAACsX,EAAAA,CAAA,CACC,YAAA,CAAW,kBACX,SAAA,CAAWlY,CAAAA,CAAG,qBAAA,CAAuBO,CAAS,CAAA,CAC7C,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,MAAA,CAAI,CAAA,CACVA,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,MAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,UAEV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,eAAA,CAAgB,CAAA,CAC1B,CAAA,CAAA,CACF,EAEFuX,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAqB,CAAC,CAC1B,SAAA,CAAA9X,CAAAA,CACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAW,IAAA,CACX,SAAA,CAAWZ,CAAAA,CAAG,0CAAA,CAA4CO,CAAS,CAAA,CAClE,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAE,KAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,SAAA,CAEV,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,UAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,CAC/B,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,QAAA,CAAA,YAAA,CAAU,CAAA,CAAA,CACtC,EAEFwX,EAAAA,CAAmB,WAAA,CAAc,oBAAA,CC/H1B,SAASC,EAAAA,CAAM,CAAE,MAAA,CAAA9Q,CAAAA,CAAQ,OAAA,CAAA+Q,EAAS,QAAA,CAAAjY,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAe,CAC1E,IAAMiY,CAAAA,CAAYzW,MAAAA,CAA0B,IAAI,CAAA,CAEhD,OAAA8C,SAAAA,CAAU,IAAM,CACd,IAAM4T,EAASD,CAAAA,CAAU,OAAA,CACpBC,CAAAA,GAEDjR,CAAAA,CACGiR,CAAAA,CAAO,IAAA,GACVA,CAAAA,CAAO,SAAA,EAAU,CACjB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,CAG7BA,CAAAA,CAAO,IAAA,GACTA,CAAAA,CAAO,KAAA,EAAM,CACb,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,OAAA,CAAA,EAGrC,CAAA,CAAG,CAACjR,CAAM,CAAC,CAAA,CAEX3C,SAAAA,CAAU,IAAM,CACd,IAAM4T,CAAAA,CAASD,CAAAA,CAAU,OAAA,CACzB,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAgBzW,CAAAA,EAAa,CACjCA,CAAAA,CAAE,cAAA,EAAe,CACjBsW,CAAAA,GACF,CAAA,CAEA,OAAAE,CAAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUC,CAAY,CAAA,CACvC,IAAMD,CAAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUC,CAAY,CAChE,CAAA,CAAG,CAACH,CAAO,CAAC,CAAA,CAQLxN,YAAAA,CACLlK,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAK2X,CAAAA,CACL,OAAA,CATyBvW,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWuW,CAAAA,CAAU,OAAA,EACzBD,CAAAA,GAEJ,CAAA,CAMI,SAAA,CAAWvY,CAAAA,CACT,sIAAA,CACA,iCAAA,CACAO,CACF,CAAA,CAEA,QAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,kLAAA,CACA,mEACF,CAAA,CAEC,QAAA,CAAA,CAAAM,CAAAA,CACDM,KAAC,QAAA,CAAA,CACC,OAAA,CAAS2X,CAAAA,CACT,SAAA,CAAU,oNAAA,CAEV,QAAA,CAAA,CAAA3X,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,+BAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,GAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CACpCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CACtC,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,QAAA,CAAA,OAAA,CAAK,CAAA,CAAA,CACjC,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CACF,CAEO,SAAS8X,GAAY,CAAE,SAAA,CAAApY,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAAyC,CACzF,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,yDAAA,CAA2DO,CAAS,CAAA,CACpF,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAASsY,EAAAA,CAAY,CAAE,SAAA,CAAArY,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAAyC,CACzF,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,oEAAA,CAAsEO,CAAS,CAAA,CAC/F,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAASuY,EAAAA,CAAW,CAAE,SAAA,CAAAtY,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAA6C,CAC5F,OACEO,GAAAA,CAAC6C,EAAAA,CAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,SAAA,CAAW1D,CAAAA,CAAG,mDAAA,CAAqDO,CAAS,CAAA,CAC1F,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAASwY,GAAiB,CAAE,SAAA,CAAAvY,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAA+C,CACpG,OACEO,GAAAA,CAACyC,CAAAA,CAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAWtD,CAAAA,CAAG,SAAA,CAAWO,CAAS,CAAA,CACrD,QAAA,CAAAD,CAAAA,CACH,CAEJ,CCvGO,SAASyY,EAAAA,CAAO,CAAE,MAAA,CAAAvR,CAAAA,CAAQ,OAAA,CAAA+Q,CAAAA,CAAS,QAAA,CAAAjY,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAgB,CAC5E,IAAMiY,CAAAA,CAAYzW,MAAAA,CAA0B,IAAI,CAAA,CAEhD,OAAA8C,SAAAA,CAAU,IAAM,CACd,IAAM4T,CAAAA,CAASD,CAAAA,CAAU,OAAA,CACpBC,CAAAA,GAEDjR,EACGiR,CAAAA,CAAO,IAAA,EACVA,CAAAA,CAAO,SAAA,EAAU,CAGfA,CAAAA,CAAO,IAAA,EACTA,CAAAA,CAAO,KAAA,EAAM,EAGnB,CAAA,CAAG,CAACjR,CAAM,CAAC,CAAA,CAEX3C,SAAAA,CAAU,IAAM,CACd,IAAM4T,CAAAA,CAASD,CAAAA,CAAU,OAAA,CACzB,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAgBzW,CAAAA,EAAa,CACjCA,CAAAA,CAAE,cAAA,GACFsW,CAAAA,GACF,CAAA,CAEA,OAAAE,CAAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUC,CAAY,CAAA,CACvC,IAAMD,CAAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUC,CAAY,CAChE,CAAA,CAAG,CAACH,CAAO,CAAC,CAAA,CAQLxN,YAAAA,CACLlK,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAK2X,CAAAA,CACL,OAAA,CATyBvW,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWuW,CAAAA,CAAU,OAAA,EACzBD,IAEJ,CAAA,CAMI,SAAA,CAAWvY,CAAAA,CACT,sFAAA,CACA,gDAAA,CACAO,CACF,CAAA,CAEA,QAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,kLAAA,CACA,mEACF,CAAA,CAEC,UAAAM,CAAAA,CACDM,IAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS2X,CAAAA,CACT,SAAA,CAAU,oNAAA,CAEV,QAAA,CAAA,CAAA3X,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,+BAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CACpCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,KAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CACtC,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,QAAA,CAAA,OAAA,CAAK,CAAA,CAAA,CACjC,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CACF,CAEO,SAASmY,EAAAA,CAAa,CAAE,SAAA,CAAAzY,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAAyC,CAC1F,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,yDAAA,CAA2DO,CAAS,CAAA,CACpF,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAAS2Y,EAAAA,CAAa,CAAE,SAAA,CAAA1Y,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAAyC,CAC1F,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,oEAAA,CAAsEO,CAAS,CAAA,CAC/F,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAAS4Y,EAAAA,CAAY,CAAE,SAAA,CAAA3Y,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAA6C,CAC7F,OACEO,GAAAA,CAAC6C,EAAAA,CAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,SAAA,CAAW1D,CAAAA,CAAG,mDAAA,CAAqDO,CAAS,CAAA,CAC1F,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAAS6Y,EAAAA,CAAkB,CAAE,SAAA,CAAA5Y,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAA+C,CACrG,OACEO,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAWb,CAAAA,CAAG,0CAAA,CAA4CO,CAAS,EACnE,QAAA,CAAAD,CAAAA,CACH,CAEJ,CClGO,SAAS8Y,EAAAA,CAAO,CACrB,MAAA,CAAA5R,CAAAA,CACA,OAAA,CAAA+Q,CAAAA,CACA,QAAA,CAAArP,CAAAA,CAAW,OAAA,CACX,QAAA,CAAA5I,CAAAA,CACA,SAAA,CAAAC,CACF,CAAA,CAAgB,CACd,GAAM,CAACmM,CAAAA,CAAW2M,CAAY,CAAA,CAAI5U,QAAAA,CAAS,KAAK,CAAA,CAC1C,CAAC6U,CAAAA,CAAcC,CAAe,CAAA,CAAI9U,QAAAA,CAAS,KAAK,CAAA,CAChD+U,CAAAA,CAAazX,MAAAA,CAAuB,IAAI,CAAA,CAE9C8C,SAAAA,CAAU,IAAM,CACd,GAAI2C,CAAAA,CACF+R,CAAAA,CAAgB,IAAI,CAAA,CAEpB,qBAAA,CAAsB,IAAM,CAC1B,sBAAsB,IAAM,CAC1BF,CAAAA,CAAa,IAAI,EACnB,CAAC,EACH,CAAC,CAAA,CACD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,KAC1B,CACLA,CAAAA,CAAa,KAAK,CAAA,CAClB,IAAMhH,CAAAA,CAAQ,UAAA,CAAW,IAAM,CAC7BkH,CAAAA,CAAgB,KAAK,CAAA,CACrB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QACjC,CAAA,CAAG,GAAG,CAAA,CACN,OAAO,IAAM,YAAA,CAAalH,CAAK,CACjC,CACF,CAAA,CAAG,CAAC7K,CAAM,CAAC,CAAA,CAEX3C,SAAAA,CAAU,IAAM,CACd,IAAM4U,EAAgBxX,CAAAA,EAAqB,CACrCA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUsW,CAAAA,GAC1B,CAAA,CAEA,OAAI/Q,CAAAA,EACF,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWiS,CAAY,CAAA,CAG5C,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAY,EACtD,CACF,CAAA,CAAG,CAACjS,CAAAA,CAAQ+Q,CAAO,CAAC,CAAA,CAEpB,IAAMmB,CAAAA,CAAuBzX,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWuX,CAAAA,CAAW,OAAA,EAC1BjB,CAAAA,GAEJ,CAAA,CAEA,GAAI,CAACe,CAAAA,CAAc,OAAO,IAAA,CAE1B,IAAMK,CAAAA,CAAkB,CACtB,IAAA,CAAM,wCACN,KAAA,CAAO,wCAAA,CACP,MAAA,CAAQ,4DACV,CAAA,CAEMC,CAAAA,CAAmB,CACvB,IAAA,CAAMlN,CAAAA,CAAY,eAAA,CAAkB,mBAAA,CACpC,KAAA,CAAOA,CAAAA,CAAY,eAAA,CAAkB,kBAAA,CACrC,MAAA,CAAQA,CAAAA,CAAY,eAAA,CAAkB,kBACxC,CAAA,CAEA,OAAO3B,YAAAA,CACLlK,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK2Y,CAAAA,CACL,OAAA,CAASE,CAAAA,CACT,SAAA,CAAW1Z,CAAAA,CACT,sFAAA,CACA0M,CAAAA,CAAY,cAAgB,WAC9B,CAAA,CACA,IAAA,CAAK,QAAA,CACL,YAAA,CAAW,MAAA,CAEX,QAAA,CAAA7L,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,uIAAA,CACA2Z,CAAAA,CAAgBzQ,CAAQ,CAAA,CACxB0Q,CAAAA,CAAiB1Q,CAAQ,CAAA,CACzB3I,CACF,CAAA,CAEC,QAAA,CAAAD,CAAAA,CACH,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CACF,CAEO,SAASuZ,EAAAA,CAAa,CAAE,SAAA,CAAAtZ,EAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACpG,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,yDAAA,CAA2DO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC3F,SAAAJ,CAAAA,CACH,CAEJ,CAEO,SAASwZ,EAAAA,CAAa,CAAE,SAAA,CAAAvZ,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACpG,OACEG,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,4EAAA,CAA8EO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC9G,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAASyZ,EAAAA,CAAY,CAAE,SAAA,CAAAxZ,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA6C,CACvG,OACEG,GAAAA,CAAC6C,EAAAA,CAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,SAAA,CAAW1D,CAAAA,CAAG,mDAAA,CAAqDO,CAAS,EAAI,GAAGG,CAAAA,CACjG,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS0Z,EAAAA,CAAkB,CAAE,SAAA,CAAAzZ,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA+C,CAC/G,OACEG,GAAAA,CAACyC,CAAAA,CAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAWtD,CAAAA,CAAG,SAAA,CAAWO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC5D,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CCxHO,SAAS2Z,EAAAA,CAAQ,CACtB,OAAA,CAAAtU,CAAAA,CACA,QAAA,CAAArF,CAAAA,CACA,QAAA,CAAA4I,CAAAA,CAAW,KAAA,CACX,KAAA,CAAAhE,CAAAA,CAAQ,GAAA,CACR,UAAA3E,CACF,CAAA,CAAiB,CACf,GAAM,CAACmM,CAAAA,CAAW2M,CAAY,CAAA,CAAI5U,QAAAA,CAAS,KAAK,CAAA,CAC1CyV,CAAAA,CAAanY,MAAAA,CAA6C,IAAI,CAAA,CAC9D6G,CAAAA,CAAa7G,OAAuB,IAAI,CAAA,CACxC8G,CAAAA,CAAa9G,MAAAA,CAAuB,IAAI,CAAA,CAExC,CAAE,QAAA,CAAUoY,CAAAA,CAAkB,YAAA,CAAA/Q,CAAa,CAAA,CAAIT,EAAAA,CAAYC,CAAAA,CAAYC,CAAAA,CAAY,CACvF,KAAMK,CAAAA,CACN,KAAA,CAAO,QAAA,CACP,UAAA,CAAY,CAAA,CACZ,MAAA,CAAQwD,CACV,CAAC,CAAA,CAEK0N,CAAAA,CAAc,IAAM,CACpBF,CAAAA,CAAW,OAAA,EAAS,YAAA,CAAaA,CAAAA,CAAW,OAAO,CAAA,CACvDA,CAAAA,CAAW,OAAA,CAAU,UAAA,CAAW,IAAMb,CAAAA,CAAa,IAAI,CAAA,CAAGnU,CAAK,EACjE,CAAA,CAEMmV,CAAAA,CAAc,IAAM,CACpBH,CAAAA,CAAW,SAAS,YAAA,CAAaA,CAAAA,CAAW,OAAO,CAAA,CACvDb,CAAAA,CAAa,KAAK,EACpB,CAAA,CAEAxU,SAAAA,CAAU,IACD,IAAM,CACPqV,CAAAA,CAAW,OAAA,EAAS,YAAA,CAAaA,CAAAA,CAAW,OAAO,EACzD,CAAA,CACC,EAAE,CAAA,CAEL,IAAMI,CAAAA,CAAmB,CACvB,GAAA,CAAK,wBAAA,CACL,MAAA,CAAQ,qBAAA,CACR,IAAA,CAAM,uBAAA,CACN,KAAA,CAAO,sBACT,CAAA,CAEA,OACE1Z,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKgI,CAAAA,CACL,SAAA,CAAU,sBAAA,CACV,YAAA,CAAcwR,CAAAA,CACd,YAAA,CAAcC,CAAAA,CACd,OAAA,CAASD,CAAAA,CACT,MAAA,CAAQC,CAAAA,CAEP,QAAA,CAAA,CAAA/Z,CAAAA,CACAoM,CAAAA,EAAa3B,YAAAA,CACZlK,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKgI,CAAAA,CACL,IAAA,CAAK,SAAA,CACL,KAAA,CAAO,CACL,GAAA,CAAKsR,CAAAA,CAAiB,GAAA,CACtB,IAAA,CAAMA,EAAiB,IACzB,CAAA,CACA,SAAA,CAAWna,CAAAA,CACT,qMAAA,CACA,cAAA,CACAoJ,CAAAA,CAAe,gCAAA,CAAmC,WAAA,CAClDkR,CAAAA,CAAiBpR,CAAQ,CAAA,CACzB3I,CACF,CAAA,CAEC,QAAA,CAAAoF,CAAAA,CACH,EACA,QAAA,CAAS,IACX,CAAA,CAAA,CACF,CAEJ,CC7EO,SAAS4U,EAAAA,CAAQ,CAAE,QAAA,CAAAja,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAkB,CAC7D,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iHAAA,CACb,QAAA,CAAAA,GAAAA,CAACoK,EAAAA,CAAA,CAAS,UAAA,CAAY,KAAA,CAAQ,GAAGvK,CAAAA,CAC9B,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAEO,SAASka,EAAAA,CAAc,CAC5B,QAAA,CAAAla,CAAAA,CACA,IAAA,CAAA8J,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,GAAG3J,CACL,CAAA,CAAuB,CACrB,IAAM8Y,CAAAA,CAAazX,MAAAA,CAAuB,IAAI,CAAA,CAE9C8C,SAAAA,CAAU,IAAM,CACd,IAAM4U,CAAAA,CAAgBxX,CAAAA,EAAqB,CACrCA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUoI,CAAAA,CAAa,KAAK,EAC5C,EAEA,OAAID,CAAAA,GACF,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWqP,CAAY,CAAA,CACjD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,CAG1B,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAY,CAAA,CACpD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QACjC,CACF,CAAA,CAAG,CAACrP,CAAAA,CAAMC,CAAY,CAAC,CAAA,CAEvB,IAAMqP,EAAuBzX,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWuX,CAAAA,CAAW,OAAA,EAC1BnP,CAAAA,CAAa,KAAK,EAEtB,CAAA,CAEA,OAAKD,CAAAA,CAEEW,YAAAA,CACLlK,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK2Y,EACL,OAAA,CAASE,CAAAA,CACT,SAAA,CAAU,2HAAA,CAEV,QAAA,CAAA7Y,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0KAAA,CACb,QAAA,CAAAA,GAAAA,CAACoK,EAAAA,CAAA,CAAS,UAAA,CAAY,KAAA,CAAQ,GAAGvK,EAC9B,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACF,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CAAA,CAfkB,IAgBpB,CAEO,SAASma,EAAAA,CAAa,CAAE,SAAA,CAAAla,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAgD,CACjG,OACEE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,oBAAA,CAAmB,EAAA,CACvG,QAAA,CAAA,CAAAC,GAAAA,CAAC6Z,MAAAA,CAAA,CAAO,SAAA,CAAU,kCAAA,CAAmC,EACrD7Z,GAAAA,CAACwL,EAAAA,CAAA,CACC,SAAA,CAAWrM,CAAAA,CACT,2OAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAEO,SAASia,EAAAA,CAAY,CAAE,SAAA,CAAApa,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAyC,CACzF,OACEG,GAAAA,CAACyL,EAAAA,CAAA,CACC,SAAA,CAAWtM,CAAAA,CAAG,qDAAA,CAAuDO,CAAS,CAAA,CAC7E,GAAGG,EACN,CAEJ,CAEO,SAASka,EAAAA,CAAala,CAAAA,CAA6C,CACxE,OAAOG,GAAAA,CAAC0L,EAAAA,CAAA,CAAc,SAAA,CAAU,0BAAA,CAA4B,GAAG7L,CAAAA,CAAO,CACxE,CAEO,SAASma,EAAAA,CAAa,CAC3B,QAAA,CAAAva,CAAAA,CACA,OAAA,CAAAwa,CAAAA,CACA,SAAA,CAAAva,CAAAA,CACA,GAAGG,CACL,CAAA,CAAyE,CACvE,OACEE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG,mDAAA,CAAqDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACrF,QAAA,CAAA,CAAAoa,CAAAA,EACCja,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kEAAA,CACZ,QAAA,CAAAia,CAAAA,CACH,CAAA,CAEDxa,CAAAA,CAAAA,CACH,CAEJ,CAEO,SAASya,EAAAA,CAAY,CAC1B,SAAA,CAAAxa,CAAAA,CACA,GAAGG,CACL,CAAA,CAA8C,CAC5C,OACEG,GAAAA,CAAC2L,EAAAA,CAAA,CACC,SAAA,CAAWxM,CAAAA,CACT,yTACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,CAEO,SAASsa,EAAAA,CAAgB,CAAE,SAAA,CAAAza,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAA0C,CAC9F,OACEG,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,kEAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,CC1IO,SAASua,IAAW,CACzB,IAAMvQ,CAAAA,CAAUC,UAAAA,CAAW2H,EAAY,CAAA,CACvC,GAAI,CAAC5H,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,8CAA8C,CAAA,CAEhE,OAAOA,CACT,CCPO,SAASwQ,EAAAA,CAASC,CAAAA,CAAyB,CAAA,CAAG,CACnD,GAAM,CAACC,CAAAA,CAASC,CAAU,CAAA,CAAI5W,QAAAA,CAAS0W,CAAc,CAAA,CAC/C,CAACtO,CAAAA,CAAUyO,CAAW,CAAA,CAAI7W,QAAAA,CAAS,KAAK,CAAA,CACxC8W,CAAAA,CAAcxZ,MAAAA,CAAY,IAAI,CAAA,CAE9ByZ,CAAAA,CAAQjS,WAAAA,CAAY,IAAM,CACzBsD,CAAAA,GACHyO,CAAAA,CAAY,IAAI,CAAA,CAChBC,CAAAA,CAAY,OAAA,CAAU,WAAA,CAAY,IAAM,CACtCF,CAAAA,CAAY5S,GAASA,CAAAA,CAAO,CAAC,EAC/B,CAAA,CAAG,GAAI,CAAA,EAEX,CAAA,CAAG,CAACoE,CAAQ,CAAC,CAAA,CAEP4O,CAAAA,CAAQlS,WAAAA,CAAY,IAAM,CAC1BsD,CAAAA,EAAY0O,EAAY,OAAA,GAC1B,aAAA,CAAcA,CAAAA,CAAY,OAAO,CAAA,CACjCD,CAAAA,CAAY,KAAK,CAAA,EAErB,CAAA,CAAG,CAACzO,CAAQ,CAAC,CAAA,CAEP6O,CAAAA,CAAQnS,WAAAA,CAAY,IAAM,CAC1BgS,CAAAA,CAAY,OAAA,EACd,aAAA,CAAcA,CAAAA,CAAY,OAAO,CAAA,CAEnCD,CAAAA,CAAY,KAAK,CAAA,CACjBD,CAAAA,CAAW,CAAC,EACd,CAAA,CAAG,EAAE,CAAA,CAEL,OAAAxW,SAAAA,CAAU,IACD,IAAM,CACP0W,CAAAA,CAAY,OAAA,EACd,aAAA,CAAcA,CAAAA,CAAY,OAAO,EAErC,CAAA,CACC,EAAE,CAAA,CAYE,CACL,QAAAH,CAAAA,CACA,QAAA,CAAAvO,CAAAA,CACA,KAAA,CAAA2O,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,aAAA,CAAA,CAhBkBC,CAAAA,EAAyB,CAC3C,IAAMtL,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAMsL,CAAAA,CAAe,IAAI,CAAA,CACtCpL,CAAAA,CAAU,IAAA,CAAK,KAAA,CAAOoL,CAAAA,CAAe,IAAA,CAAQ,EAAE,CAAA,CAC/CC,CAAAA,CAAOD,CAAAA,CAAe,EAAA,CAC5B,OAAO,CAACtL,CAAAA,CAAOE,EAASqL,CAAI,CAAA,CACzB,GAAA,CAAKtH,CAAAA,EAAOA,CAAAA,CAAI,EAAA,CAAK,GAAA,CAAMA,CAAAA,CAAIA,CAAE,CAAA,CACjC,MAAA,CAAO,CAACA,CAAAA,CAAG/E,CAAAA,GAAM+E,CAAAA,GAAM,IAAA,EAAQ/E,CAAAA,CAAI,CAAC,CAAA,CACpC,IAAA,CAAK,GAAG,CACb,CAAA,EAQ4B6L,CAAO,CACnC,CACF,CClDO,SAASS,EAAAA,CACdC,CAAAA,CACA,CACE,SAAA,CAAAC,CAAAA,CAAY,CAAA,CACZ,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,iBAAA,CAAAC,CAAAA,CAAoB,KACtB,EAA4B,EAAC,CACU,CACvC,GAAM,CAAClX,CAAAA,CAAOmX,CAAQ,CAAA,CAAI1X,QAAAA,EAAoC,CAExD2X,CAAAA,CAASpX,CAAAA,EAAO,cAAA,EAAkBkX,CAAAA,CAElCG,CAAAA,CAAc,CAAC,CAACrX,CAAK,CAAA,GAAyC,CAClEmX,CAAAA,CAASnX,CAAK,EAChB,CAAA,CAEA,OAAAH,SAAAA,CAAU,IAAM,CACd,IAAM3D,CAAAA,CAAO4a,CAAAA,EAAY,OAAA,CAGzB,GAAI,CAFiB,CAAC,CAAC,MAAA,CAAO,oBAAA,EAETM,CAAAA,EAAU,CAAClb,CAAAA,CAAM,OAEtC,IAAMob,CAAAA,CAAiB,CAAE,SAAA,CAAAP,CAAAA,CAAW,IAAA,CAAAC,CAAAA,CAAM,WAAAC,CAAW,CAAA,CAC/ClX,CAAAA,CAAW,IAAI,oBAAA,CAAqBsX,CAAAA,CAAaC,CAAc,CAAA,CAErE,OAAAvX,CAAAA,CAAS,OAAA,CAAQ7D,CAAI,CAAA,CAEd,IAAM6D,CAAAA,CAAS,UAAA,EACxB,CAAA,CAAG,CAAC+W,CAAAA,CAAYC,CAAAA,CAAWC,CAAAA,CAAMC,CAAAA,CAAYG,CAAM,CAAC,CAAA,CAE7CpX,CACT,CC/BO,SAASuX,EAAAA,CAA2C,CACzD,aAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CACF,CAAA,CAAsB,CACpB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIlY,QAAAA,CAAY+X,CAAa,CAAA,CAC/C,CAACI,CAAAA,CAAQC,CAAS,CAAA,CAAIpY,QAAAA,CAA2C,EAAE,CAAA,CACnE,CAACqY,CAAAA,CAAcC,CAAe,CAAA,CAAItY,QAAAA,CAAS,KAAK,EAEhDuY,CAAAA,CAAezT,WAAAA,CACnBtH,CAAAA,EACG,CACH,GAAM,CAAE,IAAA,CAAAoF,CAAAA,CAAM,KAAA,CAAAvE,CAAAA,CAAO,IAAA,CAAA8N,CAAK,CAAA,CAAI3O,CAAAA,CAAE,MAAA,CAC1B4O,CAAAA,CAAMD,IAAS,UAAA,CAAc3O,CAAAA,CAAE,MAAA,CAA4B,OAAA,CAAUa,CAAAA,CAE3E6Z,CAAAA,CAAWlU,CAAAA,GAAU,CAAE,GAAGA,CAAAA,CAAM,CAACpB,CAAI,EAAGwJ,CAAI,CAAA,CAAE,CAAA,CAG1C+L,EAAOvV,CAAe,CAAA,EACxBwV,CAAAA,CAAWpU,CAAAA,GAAU,CAAE,GAAGA,CAAAA,CAAM,CAACpB,CAAI,EAAG,EAAG,CAAA,CAAE,EAEjD,CAAA,CAAG,CAACuV,CAAM,CAAC,CAAA,CAELK,CAAAA,CAAe1T,WAAAA,CAAY,MAAOtH,CAAAA,EAAkC,CACxEA,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAMib,CAAAA,CAAOjb,CAAAA,CAAE,aAAA,CAEf,GAAI,CAACib,EAAK,aAAA,EAAc,CAAG,CACzB,IAAMC,CAAAA,CAA8C,EAAC,CACrD,KAAA,CAAM,IAAA,CAAKD,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAASpY,CAAAA,EAAY,CAC7C,IAAMsY,CAAAA,CAAQtY,CAAAA,CACVsY,CAAAA,CAAM,IAAA,EAAQ,CAACA,CAAAA,CAAM,QAAA,CAAS,KAAA,GAChCD,CAAAA,CAAUC,CAAAA,CAAM,IAAe,CAAA,CAAIA,CAAAA,CAAM,iBAAA,EAE7C,CAAC,CAAA,CACDP,EAAUM,CAAS,CAAA,CACnB,MACF,CAEAJ,CAAAA,CAAgB,IAAI,CAAA,CACpB,GAAI,CACF,MAAMN,CAAAA,CAASC,CAAM,EACvB,CAAA,OAAE,CACAK,CAAAA,CAAgB,KAAK,EACvB,CACF,CAAA,CAAG,CAACL,CAAAA,CAAQD,CAAQ,CAAC,CAAA,CAEfY,CAAAA,CAAW9T,WAAAA,CAAalC,CAAAA,GAAmB,CAC/C,IAAA,CAAMA,CAAAA,CACN,KAAA,CAAOqV,EAAOrV,CAAI,CAAA,CAClB,QAAA,CAAU2V,CAAAA,CACV,KAAA,CAAOJ,CAAAA,CAAOvV,CAAI,CACpB,CAAA,CAAA,CAAI,CAACqV,CAAAA,CAAQE,CAAAA,CAAQI,CAAY,CAAC,CAAA,CAElC,OAAO,CACL,MAAA,CAAAN,CAAAA,CACA,MAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,QAAA,CAAAI,CAAAA,CACA,SAAA,CAAAV,CAAAA,CACA,SAAA,CAAAE,CACF,CACF,CClEA,IAAMS,EAAAA,CAA0C,CAC9C,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,KAAA,CAAO,IACT,CAAA,CAEO,SAASC,EAAAA,CAAcC,CAAAA,CAAwB,CACpD,GAAM,CAACC,CAAAA,CAASC,CAAU,CAAA,CAAIjZ,SAAS,KAAK,CAAA,CAE5C,OAAAI,SAAAA,CAAU,IAAM,CACd,IAAM8Y,CAAAA,CAAQ,MAAA,CAAO,UAAA,CAAWH,CAAK,CAAA,CACrCE,CAAAA,CAAWC,CAAAA,CAAM,OAAO,CAAA,CAExB,IAAMC,CAAAA,CAAW,IAAMF,CAAAA,CAAWC,CAAAA,CAAM,OAAO,CAAA,CAC/C,OAAAA,CAAAA,CAAM,gBAAA,CAAiB,QAAA,CAAUC,CAAQ,CAAA,CAClC,IAAMD,CAAAA,CAAM,mBAAA,CAAoB,SAAUC,CAAQ,CAC3D,CAAA,CAAG,CAACJ,CAAK,CAAC,CAAA,CAEHC,CACT,CAEO,SAASI,EAAAA,CAAcC,CAAAA,CAAiC,CAC7D,OAAOP,EAAAA,CAAc,CAAA,YAAA,EAAeD,EAAAA,CAAYQ,CAAU,CAAC,CAAA,GAAA,CAAK,CAClE,CAOO,SAASC,EAAAA,CAAkBpd,CAAAA,CAA4C,CAC5E,GAAM,CAACY,CAAAA,CAAMyc,CAAO,CAAA,CAAIvZ,QAAAA,CAAwB,CAAE,KAAA,CAAO,CAAA,CAAG,MAAA,CAAQ,CAAE,CAAC,CAAA,CAEvE,OAAAsF,eAAAA,CAAgB,IAAM,CACpB,GAAI,CAACpJ,CAAAA,CAAI,OAAA,CAAS,OAElB,IAAMoE,EAAW,IAAI,cAAA,CAAgBkZ,CAAAA,EAAY,CAC/C,IAAA,IAAWjZ,CAAAA,IAASiZ,CAAAA,CAClBD,CAAAA,CAAQ,CACN,KAAA,CAAOhZ,CAAAA,CAAM,WAAA,CAAY,KAAA,CACzB,MAAA,CAAQA,CAAAA,CAAM,WAAA,CAAY,MAC5B,CAAC,EAEL,CAAC,CAAA,CAED,OAAAD,CAAAA,CAAS,OAAA,CAAQpE,CAAAA,CAAI,OAAO,CAAA,CACrB,IAAMoE,CAAAA,CAAS,UAAA,EACxB,CAAA,CAAG,CAACpE,CAAG,CAAC,CAAA,CAEDY,CACT,CChDO,SAAS2c,EAAAA,EAA0B,CACxC,GAAM,CAACxB,CAAAA,CAAQC,CAAS,CAAA,CAAIlY,QAAAA,CAAuB,CACjD,OAAA,CAAS,CAAA,CACT,OAAA,CAAS,CAAA,CACT,eAAA,CAAiB,CAAA,CACjB,eAAA,CAAiB,CACnB,CAAC,CAAA,CAEK4R,CAAAA,CAAe9M,WAAAA,CAAY,IAAM,CACrC,IAAMnH,CAAAA,CAAI,MAAA,CAAO,OAAA,CACXC,CAAAA,CAAI,MAAA,CAAO,OAAA,CAEXgL,CAAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,WAAA,CAAc,QAAA,CAAS,gBAAgB,WAAA,CACxE8Q,CAAAA,CAAS,QAAA,CAAS,eAAA,CAAgB,YAAA,CAAe,QAAA,CAAS,eAAA,CAAgB,YAAA,CAEhFxB,CAAAA,CAAU,CACR,OAAA,CAASva,CAAAA,CACT,OAAA,CAASC,CAAAA,CACT,eAAA,CAAiBgL,CAAAA,CAAQ,CAAA,CAAIjL,CAAAA,CAAIiL,CAAAA,CAAQ,CAAA,CACzC,eAAA,CAAiB8Q,CAAAA,CAAS,CAAA,CAAI9b,CAAAA,CAAI8b,CAAAA,CAAS,CAC7C,CAAC,EACH,CAAA,CAAG,EAAE,CAAA,CAEL,OAAAtZ,SAAAA,CAAU,KACR,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUwR,CAAAA,CAAc,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CAE1D,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,GAC7D,CAACA,CAAY,CAAC,CAAA,CAEVqG,CACT,CC7BO,SAAS0B,EAAAA,CAAe,CAC7B,SAAA,CAAA7d,CAAAA,CACA,KAAA,CAAAoC,CAAAA,CAAQ,cACR,MAAA,CAAAwb,CAAAA,CAAS,CAAA,CACT,QAAA,CAAAjV,CAAAA,CAAW,KAAA,CACX,GAAGxI,CACL,CAAA,CAAwB,CACtB,GAAM,CAAE,eAAA,CAAA2d,CAAgB,CAAA,CAAIH,EAAAA,EAAU,CAEtC,OACErd,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,yDAAA,CACAkJ,CAAAA,GAAa,KAAA,CAAQ,OAAA,CAAU,UAAA,CAC/B3I,CACF,CAAA,CACA,KAAA,CAAO,CAAE,MAAA,CAAA4d,CAAO,CAAA,CACf,GAAGzd,CAAAA,CAEJ,QAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CAAG,4CAAA,CAA8C2C,CAAK,CAAA,CACjE,KAAA,CAAO,CACL,KAAA,CAAO,CAAA,EAAG0b,CAAAA,CAAkB,GAAG,CAAA,CAAA,CAAA,CAC/B,SAAA,CAAWA,CAAAA,CAAkB,CAAA,CAAI,CAAA,SAAA,EAAY1b,CAAAA,CAAM,OAAA,CAAQ,KAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAK,MAClF,CAAA,CACF,CAAA,CACF,CAEJ,CClCA,IAAM2b,EAAAA,CAAgBld,GAAAA,CACpB,4LAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,wGAAA,CACT,OAAA,CAAS,wGAAA,CACT,OAAA,CAAS,4HAAA,CACT,OAAA,CAAS,gHAAA,CACT,MAAA,CAAQ,0GAAA,CACR,IAAA,CAAM,oGAAA,CACN,OAAA,CAAS,oEACX,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAQamd,EAAAA,CAAQle,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAAe,CAAAA,CAAS,GAAGZ,CAAM,CAAA,CAAGC,CAAAA,GAE/BE,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGse,EAAAA,CAAc,CAAE,OAAA,CAAAhd,CAAQ,CAAC,EAAGf,CAAS,CAAA,CAClD,GAAGG,CAAAA,CACN,CAGN,EAEA6d,EAAAA,CAAM,WAAA,CAAc,OAAA,CCnCb,IAAMC,EAAAA,CAAUne,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,WAAA,CAAA6P,CAAAA,CAAc,YAAA,CAAc,SAAA,CAAA3P,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAElDE,GAAAA,CAAC,IAAA,CAAA,CACC,IAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,uCAAA,CACA,CACE,aAAA,CAAekQ,CAAAA,GAAgB,YAAA,CAC/B,aAAA,CAAeA,CAAAA,GAAgB,UACjC,CAAA,CACA3P,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAGN,EAEA8d,EAAAA,CAAQ,WAAA,CAAc,SAAA,CCnBf,IAAMC,EAAAA,CAAMpe,WAAAA,CAAM,UAAA,CACvB,CAAC,CAAE,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,8JAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEAme,EAAAA,CAAI,WAAA,CAAc,KAAA,CCZX,IAAMC,EAAAA,CAAare,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,IAAA,CAAAwC,CAAAA,CAAM,KAAA,CAAAyC,CAAAA,CAAO,WAAA,CAAA6M,CAAAA,CAAa,MAAA,CAAAwM,CAAAA,CAAQ,SAAA,CAAApe,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAExDE,GAAAA,CAAC6U,CAAAA,CAAA,CACC,GAAA,CAAK/U,CAAAA,CACL,SAAA,CAAWX,EAAG,iBAAA,CAAmBO,CAAS,CAAA,CACzC,GAAGG,CAAAA,CAEJ,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4GAAA,CACZ,QAAA,CAAAgC,CAAAA,EAAQhC,GAAAA,CAAC+d,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CACrC,CAAA,CACA/d,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAoC,QAAA,CAAAyE,CAAAA,CAAM,CAAA,CACxD6M,CAAAA,CAActR,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CAAyB,QAAA,CAAAsR,CAAAA,CAAY,CAAA,CAAS,IAAA,CAC3EwM,CAAAA,CAAS9d,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CAA4B,QAAA,CAAA8d,CAAAA,CAAO,CAAA,CAAS,IAAA,CAAA,CACvE,CAAA,CACF,CAGN,EAEAD,EAAAA,CAAW,WAAA,CAAc,YAAA,CC1BlB,SAASG,EAAAA,CAAS,CAAE,SAAA,CAAAte,CAAAA,CAAW,OAAA,CAAAe,CAAAA,CAAU,UAAW,GAAGZ,CAAM,CAAA,CAAkB,CACpF,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,gDAAA,CACAsB,CAAAA,GAAY,QAAA,EAAY,cAAA,CACxBA,CAAAA,GAAY,SAAA,EAAa,aAAA,CACzBA,CAAAA,GAAY,MAAA,EAAU,oBAAA,CACtBf,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,CCZqBL,WAAAA,CAAM,aAAA,CAAwC,IAAI,CAAA,KAQ1Dye,EAAAA,CAAQze,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,gBAAA,CAAAwe,CAAAA,CAAkB,OAAA,CAAAC,CAAAA,CAAU,KAAA,CAAO,UAAAC,CAAAA,CAAW,GAAGve,CAAM,CAAA,CAAGC,CAAAA,GACtEE,GAAAA,CAACoP,EAAAA,CAAA,CACC,SAAA,CAAWjQ,CAAAA,CAAG,QAAA,CAAUgf,CAAAA,EAAW,oCAAA,CAAsCD,CAAgB,CAAA,CACzF,KAAA,CAAO,CAAE,SAAA,CAAAE,CAAU,CAAA,CACnB,WAAA,CAAaA,CAAAA,CAAY,MAAA,CAAS,YAAA,CAClC,aAAA,CAAc,IAAA,CAEd,QAAA,CAAApe,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,yCAAA,CAA2CO,CAAS,CAAA,CACjE,GAAGG,CAAAA,CACN,CAAA,CACF,CAEJ,EACAoe,EAAAA,CAAM,WAAA,CAAc,OAAA,CAEb,IAAMI,EAAAA,CAAc7e,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GACxBE,GAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,+BAAA,CAAiCO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAE3F,EACAwe,EAAAA,CAAY,WAAA,CAAc,aAAA,CAEnB,IAAMC,EAAAA,CAAY9e,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,EAAGC,CAAAA,GACxBE,GAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,4BAAA,CAA8BO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAExF,EACAye,EAAAA,CAAU,WAAA,CAAc,WAAA,CAOjB,IAAMC,EAAAA,CAAW/e,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,SAAA,CAAA8e,CAAAA,CAAY,IAAA,CAAM,SAAA,CAAAC,CAAAA,CAAY,KAAA,CAAO,GAAG5e,CAAM,CAAA,CAAGC,CAAAA,GAC7DE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,kFAAA,CACAqf,CAAAA,EAAa,uBAAA,CACb9e,CACF,CAAA,CACA,KAAA,CAAO+e,CAAAA,CAAY,CACjB,kBAAmB,MAAA,CACnB,oBAAA,CAAsB,QACxB,CAAA,CAAI,MAAA,CACH,GAAG5e,CAAAA,CACN,CAEJ,EACA0e,EAAAA,CAAS,WAAA,CAAc,UAAA,CAEhB,IAAMG,EAAAA,CAAYlf,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GACxBE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,mHAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,EACA6e,EAAAA,CAAU,WAAA,CAAc,WAAA,CAEjB,IAAMC,EAAAA,CAAYnf,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GACxBE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,gFAAA,CAAkFO,CAAS,CAAA,CACxG,GAAGG,CAAAA,CACN,CAEJ,EACA8e,EAAAA,CAAU,WAAA,CAAc,WAAA,CCtEjB,SAASC,EAAAA,CAA6C,CAC3D,IAAA,CAAAzM,CAAAA,CACA,OAAA,CAAA0M,CAAAA,CACA,iBAAA,CAAAC,CAAAA,CAAoB,WAAA,CACpB,UAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAAtf,CAAAA,CACA,SAAA,CAAA0e,CAAAA,CACA,OAAA,CAAAD,CAAAA,CAAU,IACZ,CAAA,CAAsB,CACpB,GAAM,CAAC3T,CAAAA,CAAQyU,CAAS,CAAA,CAAIrb,QAAAA,CAAS,EAAE,CAAA,CACjC,CAACsb,CAAAA,CAAYC,CAAa,CAAA,CAAIvb,QAAAA,CAAsE,CACxG,GAAA,CAAK,EAAA,CACL,SAAA,CAAW,IACb,CAAC,CAAA,CAGKwb,EAAgBlU,OAAAA,CAAQ,IAAM,CAClC,IAAImU,CAAAA,CAAW,CAAC,GAAGlN,CAAI,CAAA,CAGvB,OAAI3H,CAAAA,EAAUuU,CAAAA,GACZM,CAAAA,CAAWA,CAAAA,CAAS,MAAA,CAAOjU,CAAAA,EACzB2T,EAAW,IAAA,CAAKO,CAAAA,EACd,MAAA,CAAOlU,CAAAA,CAAKkU,CAAG,CAAA,EAAK,EAAE,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS9U,CAAAA,CAAO,WAAA,EAAa,CACrE,CACF,CAAA,CAAA,CAIE0U,CAAAA,CAAW,GAAA,EAAOA,CAAAA,CAAW,SAAA,EAC/BG,CAAAA,CAAS,IAAA,CAAK,CAACE,CAAAA,CAAG,CAAA,GAAM,CACtB,IAAMC,CAAAA,CAASD,CAAAA,CAAEL,CAAAA,CAAW,GAAc,EACpCO,CAAAA,CAAS,CAAA,CAAEP,CAAAA,CAAW,GAAc,CAAA,CAE1C,OAA4BM,CAAAA,EAAW,IAAA,EAAQC,CAAAA,GAAW,MAAA,EAAaA,CAAAA,GAAW,IAAA,CAAa,CAAA,CAC3FD,CAAAA,CAASC,CAAAA,CAAeP,CAAAA,CAAW,SAAA,GAAc,KAAA,CAAQ,EAAA,CAAK,CAAA,CAC9DM,CAAAA,CAASC,CAAAA,CAAeP,CAAAA,CAAW,SAAA,GAAc,KAAA,CAAQ,CAAA,CAAI,EAAA,CAC1D,CACT,CAAC,CAAA,CAGIG,CACT,CAAA,CAAG,CAAClN,CAAAA,CAAM3H,CAAAA,CAAQuU,CAAAA,CAAYG,CAAU,CAAC,CAAA,CAEnCQ,CAAAA,CAAcJ,CAAAA,EAA0B,CAC5CH,CAAAA,CAAcvX,CAAAA,GAAS,CACrB,GAAA,CAAA0X,CAAAA,CACA,SAAA,CAAW1X,CAAAA,CAAK,GAAA,GAAQ0X,CAAAA,EAAO1X,CAAAA,CAAK,SAAA,GAAc,KAAA,CAAQ,MAAA,CAAS,KACrE,CAAA,CAAE,EACJ,CAAA,CAEA,OACE7H,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACtC,QAAA,CAAA,CAAAqf,CAAAA,EACC/e,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mBAAA,CACb,QAAA,CAAAA,GAAAA,CAACsF,EAAAA,CAAA,CACC,WAAA,CAAawZ,CAAAA,CACb,KAAA,CAAOtU,CAAAA,CACP,QAAA,CAAWpJ,GAAM6d,CAAAA,CAAU7d,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACzC,QAAA,CAAUpB,GAAAA,CAAC6Z,MAAAA,CAAA,CAAO,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACtD,CAAA,CACF,CAAA,CAGF9Z,IAAAA,CAACke,EAAAA,CAAA,CAAM,OAAA,CAASE,CAAAA,CAAS,SAAA,CAAWC,CAAAA,CAClC,QAAA,CAAA,CAAApe,GAAAA,CAACqe,EAAAA,CAAA,CACC,QAAA,CAAAre,GAAAA,CAACue,EAAAA,CAAA,CACE,QAAA,CAAAM,CAAAA,CAAQ,GAAA,CAAKc,CAAAA,EACZ3f,GAAAA,CAAC0e,EAAAA,CAAA,CAEC,SAAA,CAAWvf,CAAAA,CAAGwgB,CAAAA,CAAI,QAAA,EAAY,kEAAA,CAAoEA,CAAAA,CAAI,SAAS,CAAA,CAC/G,OAAA,CAAS,IAAMA,CAAAA,CAAI,QAAA,EAAYD,CAAAA,CAAWC,EAAI,GAAG,CAAA,CAEjD,QAAA,CAAA5f,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAA,CAAA4f,CAAAA,CAAI,MAAA,CACJA,CAAAA,CAAI,QAAA,EACH3f,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CACb,QAAA,CAAAkf,CAAAA,CAAW,GAAA,GAAQS,CAAAA,CAAI,GAAA,CACtBT,CAAAA,CAAW,SAAA,GAAc,KAAA,CAAQlf,GAAAA,CAAC4f,OAAAA,CAAA,CAAQ,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAK5f,GAAAA,CAAC6f,SAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAE9H7f,GAAAA,CAAC8f,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,CAAA,CAErC,CAAA,CAAA,CAEJ,CAAA,CAAA,CAfK,MAAA,CAAOH,CAAAA,CAAI,GAAG,CAgBrB,CACD,CAAA,CACH,CAAA,CACF,CAAA,CACA5f,IAAAA,CAACue,EAAAA,CAAA,CACE,QAAA,CAAA,CAAAc,CAAAA,CAAc,GAAA,CAAI,CAAChU,CAAAA,CAAM2U,CAAAA,GACxB/f,GAAAA,CAACue,EAAAA,CAAA,CAEC,OAAA,CAAS,IAAMS,CAAAA,GAAa5T,CAAI,CAAA,CAChC,SAAA,CAAWjM,CAAAA,CAAG6f,CAAAA,EAAc,8DAA8D,CAAA,CAEzF,QAAA,CAAAH,CAAAA,CAAQ,GAAA,CAAKc,CAAAA,EACZ3f,GAAAA,CAAC2e,EAAAA,CAAA,CAAgC,SAAA,CAAWgB,EAAI,SAAA,CAC7C,QAAA,CAAAA,CAAAA,CAAI,MAAA,CAASA,CAAAA,CAAI,MAAA,CAAOvU,CAAI,CAAA,CAAKA,CAAAA,CAAKuU,CAAAA,CAAI,GAAc,CAAA,CAAA,CAD3C,MAAA,CAAOA,CAAAA,CAAI,GAAG,CAE9B,CACD,CAAA,CAAA,CARII,CASP,CACD,CAAA,CACAX,CAAAA,CAAc,MAAA,GAAW,CAAA,EACxBpf,GAAAA,CAACue,EAAAA,CAAA,CACC,QAAA,CAAAxe,IAAAA,CAAC4e,EAAAA,CAAA,CAAU,OAAA,CAASE,CAAAA,CAAQ,MAAA,CAAQ,SAAA,CAAU,gCAAA,CAAiC,QAAA,CAAA,CAAA,wBAAA,CACtDrU,CAAAA,CAAO,GAAA,CAAA,CAChC,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CClIO,SAASwV,EAAAA,CAAe,CAAE,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAApB,CAAAA,CAAS,OAAA,CAAAqB,CAAAA,CAAS,QAAA,CAAAC,CAAS,CAAA,CAAwB,CACzF,GAAM,CAACjB,CAAAA,CAAYC,CAAa,CAAA,CAAIvb,QAAAA,CAA4B,IAAI,CAAA,CAC9D,CAACwc,CAAAA,CAAeC,CAAgB,CAAA,CAAIzc,QAAAA,CAAiC,EAAE,CAAA,CAEvE0c,CAAAA,CAAcpV,OAAAA,CAAQ,IACrBgU,CAAAA,CAEE,CAAC,GAAGe,CAAK,CAAA,CAAE,IAAA,CAAK,CAACV,CAAAA,CAAGgB,CAAAA,GAAM,CAC/B,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAtd,CAAU,CAAA,CAAIgc,CAAAA,CACzBuB,CAAAA,CAAa,CAAA,CAEjB,GAAID,CAAAA,GAAU,OAAA,CACZC,CAAAA,CAAalB,CAAAA,CAAE,KAAA,CAAM,aAAA,CAAcgB,CAAAA,CAAE,KAAK,CAAA,CAAA,KAAA,GACjCC,CAAAA,GAAU,UAAA,CAAY,CAC/B,IAAME,CAAAA,CAAgB,CAAE,MAAA,CAAQ,EAAG,IAAA,CAAM,CAAA,CAAG,MAAA,CAAQ,CAAA,CAAG,GAAA,CAAK,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACpEC,CAAAA,CAAQD,CAAAA,CAAcnB,CAAAA,CAAE,QAAsC,CAAA,EAAK,CAAA,CACnEqB,CAAAA,CAAQF,CAAAA,CAAcH,CAAAA,CAAE,QAAsC,CAAA,EAAK,CAAA,CACzEE,CAAAA,CAAaE,CAAAA,CAAQC,EACvB,CAAA,KAAWJ,CAAAA,GAAU,SAAA,GACnBC,CAAAA,CAAAA,CAAclB,CAAAA,CAAE,OAAA,EAAW,EAAA,EAAI,aAAA,CAAcgB,EAAE,OAAA,EAAW,EAAE,CAAA,CAAA,CAG9D,OAAOrd,CAAAA,GAAc,KAAA,CAAQud,CAAAA,CAAa,CAACA,CAC7C,CAAC,CAAA,CAlBuBR,CAAAA,CAmBvB,CAACA,CAAAA,CAAOf,CAAU,CAAC,CAAA,CAEhB2B,CAAAA,CAAwB3V,OAAAA,CAAQ,IAAM,CAC1C,IAAM4V,CAAAA,CAAuD,EAAC,CAE9D,GAAIZ,CAAAA,CACFI,CAAAA,CAAY,OAAA,CAAQS,CAAAA,EAAQ,CAC1B,IAAMC,EAAa,MAAA,CAAOD,CAAAA,CAAKb,CAAO,CAAA,EAAK,OAAO,CAAA,CAC7CY,CAAAA,CAAOE,CAAU,CAAA,GAAGF,CAAAA,CAAOE,CAAU,CAAA,CAAI,EAAC,CAAA,CAC/C,IAAMC,CAAAA,CAAQH,CAAAA,CAAOE,CAAU,CAAA,CAC1BC,CAAAA,CAAMF,CAAAA,CAAK,QAAQ,CAAA,GAAGE,CAAAA,CAAMF,CAAAA,CAAK,QAAQ,CAAA,CAAI,EAAC,CAAA,CACnDE,CAAAA,CAAMF,CAAAA,CAAK,QAAQ,EAAG,IAAA,CAAKA,CAAI,EACjC,CAAC,CAAA,CAAA,KACI,CACLD,CAAAA,CAAO,OAAA,CAAa,EAAC,CACrB,IAAMI,CAAAA,CAAeJ,CAAAA,CAAO,OAAA,CAC5BjC,CAAAA,CAAQ,OAAA,CAAQc,GAAO,CACrBuB,CAAAA,CAAavB,CAAAA,CAAI,EAAE,CAAA,CAAIW,CAAAA,CAAY,MAAA,CAAOtO,CAAAA,EAAKA,CAAAA,CAAE,QAAA,GAAa2N,CAAAA,CAAI,EAAE,EACtE,CAAC,EACH,CAEA,OAAOmB,CACT,CAAA,CAAG,CAACR,CAAAA,CAAazB,CAAAA,CAASqB,CAAO,CAAC,CAAA,CAE5BiB,CAAAA,CAAiBzY,WAAAA,CAAa0Y,CAAAA,EAAqB,CACvDf,CAAAA,CAAiBzY,CAAAA,GAAS,CACxB,GAAGA,CAAAA,CACH,CAACwZ,CAAQ,EAAA,CAAIxZ,CAAAA,CAAKwZ,CAAQ,CAAA,EAAKjB,CAAAA,EAAYA,CAC7C,CAAA,CAAE,EACJ,CAAA,CAAG,CAACA,CAAQ,CAAC,CAAA,CAEb,OAAO,CACL,qBAAA,CAAAU,CAAAA,CACA,UAAA,CAAA3B,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,aAAA,CAAAiB,CAAAA,CACA,cAAA,CAAAe,CAAAA,CACA,WAAA,CAAAb,CACF,CACF,CC3DO,SAASe,EAAAA,CAAqB,CACnC,KAAA,CAAApB,CAAAA,CACA,OAAA,CAAApB,CAAAA,CACA,eAAA,CAAAyC,CAAAA,CACA,WAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CACF,CAAA,CAA8B,CAC5B,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAIje,QAAAA,CAAwB,IAAI,CAAA,CAChE,CAACke,CAAAA,CAAiBC,CAAkB,CAAA,CAAIne,QAAAA,CAAwB,IAAI,CAAA,CACpE,CAACoe,CAAAA,CAAkBC,CAAmB,CAAA,CAAIre,QAAAA,CAAwB,IAAI,EACtE,CAACse,CAAAA,CAAgBC,CAAiB,CAAA,CAAIve,QAAAA,CAAwB,IAAI,CAAA,CAClE,CAACwe,CAAAA,CAAcC,CAAe,CAAA,CAAIze,QAAAA,CAA8B,IAAI,CAAA,CAEpE0e,CAAAA,CAAephB,MAAAA,CAAY,IAAI,CAAA,CAC/BqhB,CAAAA,CAAerhB,MAAAA,CAAwC,IAAI,CAAA,CAE3DshB,CAAAA,CAAkB,CAACphB,CAAAA,CAAoBsE,CAAAA,CAAYqK,CAAAA,GAA4B,CAC/EA,CAAAA,GAAS,MAAA,EACX8R,CAAAA,CAAiBnc,CAAE,CAAA,CACnBtE,EAAE,YAAA,CAAa,OAAA,CAAQ,QAAA,CAAUsE,CAAE,CAAA,CACnCgc,CAAAA,GAAkBhc,CAAE,CAAA,GAEpBqc,CAAAA,CAAmBrc,CAAE,CAAA,CACrBtE,CAAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,UAAA,CAAYsE,CAAE,CAAA,CAAA,CAEvCtE,CAAAA,CAAE,YAAA,CAAa,aAAA,CAAgB,OACjC,CAAA,CAEMqhB,CAAAA,CAAgB/Z,WAAAA,CAAY,IAAM,CAClCkZ,CAAAA,EACFD,CAAAA,GAAgBC,CAAa,CAAA,CAE/BC,CAAAA,CAAiB,IAAI,EACrBE,CAAAA,CAAmB,IAAI,CAAA,CACvBE,CAAAA,CAAoB,IAAI,CAAA,CACxBE,CAAAA,CAAkB,IAAI,CAAA,CACtBE,CAAAA,CAAgB,IAAI,EACtB,CAAA,CAAG,CAACT,CAAAA,CAAeD,CAAa,CAAC,CAAA,CAmHjC,OAAO,CACL,aAAA,CAAAC,CAAAA,CACA,eAAA,CAAAE,CAAAA,CACA,gBAAA,CAAAE,CAAAA,CACA,cAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,eAAA,CAAAI,CAAAA,CACA,cAAAC,CAAAA,CACA,cAAA,CAzHqB,CAACrhB,CAAAA,CAAoBggB,CAAAA,CAAkBsB,CAAAA,GAAoB,CAIhF,GAHAthB,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,YAAA,CAAa,UAAA,CAAa,MAAA,CAExB0gB,CAAAA,CAAiB,CACnBG,CAAAA,CAAoBb,CAAQ,CAAA,CAC5B,IAAM9f,CAAAA,CAAQF,CAAAA,CAAE,aAAA,CAA8B,qBAAA,EAAsB,CAC9DuhB,CAAAA,CAAWrhB,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,CAAA,CAC1C+gB,EAAgBjhB,CAAAA,CAAE,OAAA,CAAUuhB,CAAAA,CAAW,MAAA,CAAS,OAAO,EACzD,CAAA,KAAA,GACEV,CAAAA,CAAoBb,CAAQ,CAAA,CAExBsB,CAAAA,CAAQ,CACVP,CAAAA,CAAkBO,CAAM,CAAA,CACxB,IAAMphB,EAAQF,CAAAA,CAAE,aAAA,CAA8B,qBAAA,EAAsB,CAC9DuhB,CAAAA,CAAWrhB,CAAAA,CAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAC1C+gB,CAAAA,CAAgBjhB,CAAAA,CAAE,OAAA,CAAUuhB,CAAAA,CAAW,KAAA,CAAQ,QAAQ,EACzD,CAAA,KAAWvhB,CAAAA,CAAE,MAAA,GAAWA,CAAAA,CAAE,aAAA,GACxB+gB,CAAAA,CAAkB,IAAI,CAAA,CACtBE,CAAAA,CAAgB,IAAI,CAAA,EAG1B,CAAA,CAoGE,UAAA,CAlGiB,CAACjhB,CAAAA,CAAoBwhB,CAAAA,CAAoBC,CAAAA,GAAsB,CAChFzhB,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAMshB,CAAAA,CAASd,CAAAA,EAAiBxgB,CAAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA,CACzDggB,CAAAA,CAAWU,CAAAA,EAAmB1gB,CAAAA,CAAE,aAAa,OAAA,CAAQ,UAAU,CAAA,CAErE,GAAIggB,CAAAA,EAAYI,CAAAA,CACdA,CAAAA,CAAaJ,CAAAA,CAAUwB,CAAAA,CAAYR,CAAAA,GAAiB,OAAA,CAAU,OAAA,CAAU,MAAM,CAAA,CAAA,KAAA,GACrEM,CAAAA,EAAUnB,CAAAA,CAAY,CAE/B,GAAI,CADStB,CAAAA,CAAM,IAAA,CAAKjO,CAAAA,EAAKA,CAAAA,CAAE,EAAA,GAAO0Q,CAAM,CAAA,CACjC,OAAA,CAESpB,CAAAA,CAAgB,QAAA,CAASoB,CAAM,CAAA,CAC/CpB,CAAAA,CACA,CAACoB,CAAM,CAAA,EAEC,OAAA,CAAShd,CAAAA,EAAO,CAE1B,IAAMod,EAAAA,CADc7C,CAAAA,CAAM,IAAA,CAAKjO,EAAAA,EAAKA,EAAAA,CAAE,EAAA,GAAOtM,CAAE,CAAA,EACb,QAAA,EAAY,EAAA,CAC9C6b,CAAAA,CAAW7b,CAAAA,CAAIkd,CAAAA,CAAYC,CAAAA,CAAUT,CAAAA,GAAiB,QAAA,CAAW,QAAA,CAAW,KAAK,CAAA,CACjFX,CAAAA,GAAa/b,CAAAA,CAAIod,EAAAA,CAAcF,CAAAA,CAAY,CAAC,EAC9C,CAAC,EACH,CAEAH,CAAAA,GACF,CAAA,CA2EE,gBAAA,CAzEuB,CAACrhB,CAAAA,CAAqBsE,CAAAA,CAAYqK,CAAAA,GAA4B,CACrF,IAAMgT,CAAAA,CAAQ3hB,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CACpB2hB,IAELT,CAAAA,CAAa,OAAA,CAAU,UAAA,CAAW,IAAM,CAClCvS,CAAAA,GAAS,MAAA,EACX8R,CAAAA,CAAiBnc,CAAE,CAAA,CACnBgc,CAAAA,GAAkBhc,CAAE,CAAA,EAEpBqc,CAAAA,CAAmBrc,CAAE,CAAA,CAEvB6c,EAAa,OAAA,CAAU,CAAE,CAAA,CAAGQ,CAAAA,CAAM,OAAA,CAAS,CAAA,CAAGA,CAAAA,CAAM,OAAQ,EAC9D,CAAA,CAAG,GAAG,CAAA,EACR,CAAA,CA6DE,eAAA,CA3DuB3hB,CAAAA,EAAwB,CAC/C,GAAI,CAACwgB,CAAAA,EAAiB,CAACE,CAAAA,CAAiB,OACxC1gB,CAAAA,CAAE,cAAA,EAAe,CAEjB,IAAM2hB,CAAAA,CAAQ3hB,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CACzB,GAAI,CAAC2hB,CAAAA,CAAO,OAEZ,IAAMC,CAAAA,CAAS,QAAA,CAAS,gBAAA,CAAiBD,CAAAA,CAAM,OAAA,CAASA,CAAAA,CAAM,OAAO,CAAA,CACrE,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAWD,CAAAA,CAAO,OAAA,CAAQ,kBAAkB,CAAA,CAC5CE,CAAAA,CAASF,CAAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA,CAE9C,GAAIC,CAAAA,CAAU,CACZ,IAAM7B,CAAAA,CAAW6B,CAAAA,CAAS,aAAa,gBAAgB,CAAA,CAGvD,GAFAhB,CAAAA,CAAoBb,CAAQ,CAAA,CAExBU,CAAAA,CAAiB,CACnB,IAAMxgB,EAAAA,CAAO2hB,CAAAA,CAAS,qBAAA,EAAsB,CACtCN,CAAAA,CAAWrhB,EAAAA,CAAK,IAAA,CAAOA,EAAAA,CAAK,KAAA,CAAQ,CAAA,CAC1C+gB,CAAAA,CAAgBU,CAAAA,CAAM,OAAA,CAAUJ,CAAAA,CAAW,MAAA,CAAS,OAAO,EAC7D,CAAA,KAAA,GAAWO,CAAAA,CAAQ,CACjB,IAAMR,EAAAA,CAASQ,CAAAA,CAAO,aAAa,cAAc,CAAA,CACjDf,CAAAA,CAAkBO,EAAM,CAAA,CACxB,IAAMphB,CAAAA,CAAO4hB,CAAAA,CAAO,qBAAA,EAAsB,CACpCP,EAAAA,CAAWrhB,CAAAA,CAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAC1C+gB,EAAgBU,CAAAA,CAAM,OAAA,CAAUJ,EAAAA,CAAW,KAAA,CAAQ,QAAQ,EAC7D,CACF,CACF,CAAA,CA+BE,cAAA,CA7BsBvhB,CAAAA,EAAwB,CAE9C,GADA,YAAA,CAAakhB,CAAAA,CAAa,OAAO,EAC7BV,CAAAA,EAAiBE,CAAAA,CAAiB,CACpC,GAAIE,CAAAA,CAAkB,CACpB,IAAMU,CAAAA,CAASd,CAAAA,CACTR,CAAAA,CAAWU,CAAAA,CAEbV,CAAAA,EAAYI,CAAAA,CACdA,CAAAA,CAAaJ,CAAAA,CAAUY,CAAAA,CAAkBI,CAAAA,GAAiB,OAAA,CAAU,OAAA,CAAU,MAAM,CAAA,CAC3EM,CAAAA,EAAUnB,CAAAA,EACnBA,CAAAA,CAAWmB,CAAAA,CAAQV,CAAAA,CAAkBE,CAAAA,EAAkB,MAAA,CAAWE,CAAAA,GAAiB,QAAA,CAAW,QAAA,CAAW,KAAK,EAElH,CACAK,CAAAA,GACF,CACF,CAAA,CAeE,gBAAA,CAAAZ,CACF,CACF,CCtLO,SAASsB,EAAAA,EAAuB,CACrC,GAAM,CAACC,CAAAA,CAAiBC,CAAkB,CAAA,CAAIzf,QAAAA,CAAS,KAAK,CAAA,CACtD,CAAC0f,CAAAA,CAAQC,CAAS,CAAA,CAAI3f,QAAAA,CAAS,CAAC,EAChC,CAAC4f,CAAAA,CAAYC,CAAa,CAAA,CAAI7f,QAAAA,CAAS,CAAC,CAAA,CACxC8f,CAAAA,CAAWxiB,MAAAA,CAAuB,IAAI,CAAA,CA0B5C,OAAO,CACL,QAAA,CAAAwiB,CAAAA,CACA,eAAA,CAAAN,CAAAA,CACA,oBAAA,CA3B4BhiB,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,QAAQ,CAAA,EACzCA,CAAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,oBAAoB,CAAA,EACrDA,CAAAA,CAAE,MAAA,CAAuB,QAAQ,UAAU,CAAA,GAEhDiiB,CAAAA,CAAmB,IAAI,CAAA,CACvBE,CAAAA,CAAUniB,CAAAA,CAAE,KAAA,EAASsiB,CAAAA,CAAS,OAAA,EAAS,UAAA,EAAc,CAAA,CAAE,CAAA,CACvDD,CAAAA,CAAcC,CAAAA,CAAS,OAAA,EAAS,YAAc,CAAC,CAAA,EACjD,CAAA,CAoBE,oBAAA,CAlB4BtiB,CAAAA,EAAwB,CACpD,GAAI,CAACgiB,CAAAA,CAAiB,OACtBhiB,CAAAA,CAAE,cAAA,EAAe,CAEjB,IAAMuiB,CAAAA,CAAAA,CADIviB,CAAAA,CAAE,OAASsiB,CAAAA,CAAS,OAAA,EAAS,UAAA,EAAc,CAAA,CAAA,CACnCJ,CAAAA,EAAU,CAAA,CACxBI,CAAAA,CAAS,OAAA,GACXA,CAAAA,CAAS,OAAA,CAAQ,UAAA,CAAaF,CAAAA,CAAaG,CAAAA,EAE/C,CAAA,CAWE,kBAAA,CATyB,IAAM,CAC/BN,CAAAA,CAAmB,KAAK,EAC1B,CAQA,CACF,CChBO,IAAMO,EAAAA,CAAapkB,WAAAA,CAAM,IAAA,CAAK,CAAC,CACpC,IAAA,CAAAuhB,CAAAA,CACA,QAAA,CAAAK,CAAAA,CACA,eAAA,CAAAE,CAAAA,CACA,iBAAA,CAAAuC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,qBAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CACF,CAAA,GAAuB,CACrB,GAAIA,CAAAA,CAAY,OAAOpkB,GAAAA,CAAAqkB,QAAAA,CAAA,CAAG,QAAA,CAAAD,CAAAA,CAAWrD,CAAI,CAAA,CAAE,CAAA,CAE3C,IAAMuD,CAAAA,CAAoBC,CAAAA,EAAsB,CAC9C,OAAQA,CAAAA,EACN,KAAK,QAAA,CAAU,OAAO,QAAA,CACtB,KAAK,MAAA,CAAQ,OAAO,UACpB,KAAK,QAAA,CAAU,OAAO,MAAA,CACtB,KAAK,KAAA,CAAO,OAAO,SAAA,CACnB,QAAS,OAAO,SAClB,CACF,CAAA,CAEMzY,CAAAA,CAAawV,CAAAA,CAAgB,QAAA,CAASP,EAAK,EAAE,CAAA,CAEnD,OACE/gB,GAAAA,CAAC6U,CAAAA,CAAA,CACC,OAAA,CAAUzT,CAAAA,EAAM4iB,CAAAA,GAAc5iB,CAAAA,CAAG2f,CAAI,CAAA,CACrC,SAAA,CAAW5hB,CAAAA,CACT,gHAAA,CACA4hB,CAAAA,CAAK,SAAA,EAAaA,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAS,CAAA,EAAK,qCAAA,CAC/CjV,CAAAA,EAAc,4CAAA,CACdiY,CACF,CAAA,CAEA,QAAA,CAAAhkB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAAA,CACZ,QAAA,CAAA,CAAA+jB,CAAAA,EACC9jB,GAAAA,CAAC6F,EAAAA,CAAA,CACC,OAAA,CAASiG,CAAAA,CACT,QAAA,CAAW1K,CAAAA,EAAM,CAEf,IAAMojB,CAAAA,CADUpjB,CAAAA,CAAE,MAAA,CAAO,OAAA,CAErB,CAAC,GAAGkgB,CAAAA,CAAiBP,CAAAA,CAAK,EAAE,CAAA,CAC5BO,CAAAA,CAAgB,MAAA,CAAO5b,CAAAA,EAAMA,IAAOqb,CAAAA,CAAK,EAAE,CAAA,CAC/CkD,CAAAA,GAAwBO,CAAY,EACtC,CAAA,CACA,OAAA,CAAUpjB,CAAAA,EAAMA,CAAAA,CAAE,eAAA,EAAgB,CAClC,SAAA,CAAU,MAAA,CACZ,CAAA,CAED2f,CAAAA,CAAK,SAAA,EAAaA,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAS,CAAA,EACzC/gB,GAAAA,CAACykB,IAAAA,CAAA,CAAK,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAE3DzkB,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAWtD,CAAAA,CACf,yFACA4hB,CAAAA,CAAK,SAAA,EAAaA,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAS,CAAA,EAAK,iBACjD,CAAA,CACG,QAAA,CAAAA,CAAAA,CAAK,KAAA,CACR,CAAA,CAAA,CACF,CAAA,CACAhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACZ,QAAA,CAAA,CAAAmkB,CAAAA,EACClkB,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAUoB,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClB8iB,CAAAA,CAAanD,CAAAA,CAAK,EAAE,EACtB,CAAA,CACA,SAAA,CAAU,wFAEV,QAAA,CAAA/gB,GAAAA,CAAC0kB,MAAAA,CAAA,CAAO,SAAA,CAAU,aAAA,CAAc,CAAA,CAClC,CAAA,CAEF1kB,GAAAA,CAAC2kB,YAAAA,CAAA,CAAa,SAAA,CAAU,0FAAA,CAA2F,CAAA,CAAA,CACrH,CAAA,CAAA,CACF,CAAA,CAEC5D,CAAAA,CAAK,WAAA,EACJ/gB,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,oCAAA,CACb,QAAA,CAAAse,CAAAA,CAAK,WAAA,CACR,CAAA,CAGDA,CAAAA,CAAK,QAAA,GAAa,MAAA,EACjBhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,aAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kDAAA,CAAmD,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC3ED,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAiB,QAAA,CAAA,CAAAghB,CAAAA,CAAK,QAAA,CAAS,GAAA,CAAA,CAAC,CAAA,CAAA,CAClD,CAAA,CACA/gB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yDAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,gDAAA,CACV,MAAO,CAAE,KAAA,CAAO,CAAA,EAAG+gB,CAAAA,CAAK,QAAQ,CAAA,CAAA,CAAI,CAAA,CACtC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGFhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CACZ,QAAA,CAAA,CAAAghB,CAAAA,CAAK,QAAA,EACJ/gB,GAAAA,CAAC0d,EAAAA,CAAA,CAAM,OAAA,CAAS4G,CAAAA,CAAiBvD,CAAAA,CAAK,QAAQ,CAAA,CAAG,SAAA,CAAU,6CAAA,CACxD,QAAA,CAAAA,CAAAA,CAAK,QAAA,CACR,CAAA,CAEDA,CAAAA,CAAK,MAAM,GAAA,CAAI6D,CAAAA,EACd5kB,GAAAA,CAAC0d,EAAAA,CAAA,CAAgB,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,wDAAA,CAC1C,QAAA,CAAAkH,CAAAA,CAAAA,CADSA,CAEZ,CACD,CAAA,CAAA,CACH,CAAA,CAEA7kB,IAAAA,CAAC,OAAI,SAAA,CAAU,qEAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACZ,QAAA,CAAA,CAAAghB,CAAAA,CAAK,SAAA,GAAc,MAAA,EAClBhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CACd,oEAAA,CACA0kB,IAAsB9C,CAAAA,CAAK,EAAA,CAAK,8BAAA,CAAiC,iBACnE,CAAA,CACG,QAAA,CAAA,CAAA8C,CAAAA,GAAsB9C,CAAAA,CAAK,EAAA,CAC1B/gB,GAAAA,CAAC6kB,KAAAA,CAAA,CACC,SAAA,CAAU,iEAAA,CACV,OAAA,CAAUzjB,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClB+iB,CAAAA,GAAoBpD,CAAAA,CAAK,EAAE,EAC7B,CAAA,CACF,CAAA,CAEA/gB,GAAAA,CAAC8kB,IAAAA,CAAA,CACC,SAAA,CAAU,iEAAA,CACV,OAAA,CAAU1jB,GAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClB+iB,CAAAA,GAAoBpD,CAAAA,CAAK,EAAE,EAC7B,CAAA,CACF,CAAA,CAEFhhB,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA,IAAA,CAAK,KAAA,CAAMghB,CAAAA,CAAK,SAAA,CAAY,IAAI,CAAA,CAAE,IAAA,CAAG,IAAA,CAAK,KAAA,CAAOA,CAAAA,CAAK,SAAA,CAAY,IAAA,CAAQ,EAAE,CAAA,CAAE,GAAA,CAAA,CACjF,CAAA,CAAA,CACF,CAAA,CAEDA,CAAAA,CAAK,WAAa,MAAA,EACjBhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC+kB,aAAAA,CAAA,CAAc,SAAA,CAAU,SAAA,CAAU,CAAA,CAClChE,CAAAA,CAAK,QAAA,CAAA,CACR,CAAA,CAEDA,CAAAA,CAAK,WAAA,GAAgB,MAAA,EACpBhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACglB,SAAAA,CAAA,CAAU,SAAA,CAAU,SAAA,CAAU,CAAA,CAC9BjE,CAAAA,CAAK,WAAA,CAAA,CACR,CAAA,CAEDA,EAAK,OAAA,EACJhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACsQ,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAC1ByQ,CAAAA,CAAK,OAAA,CAAA,CACR,CAAA,CAAA,CAEJ,CAAA,CAECA,CAAAA,CAAK,QAAA,EACJ/gB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uIAAA,CACZ,QAAA,CAAA+gB,CAAAA,CAAK,QAAA,CAAS,MAAA,CACb/gB,GAAAA,CAAC,OAAI,GAAA,CAAK+gB,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAK,QAAA,CAAS,IAAA,CAAM,SAAA,CAAU,4BAAA,CAA6B,CAAA,CAEhGA,CAAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,CAExB,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAAC,CAAA,CAED6C,EAAAA,CAAW,WAAA,CAAc,YAAA,CC5JlB,IAAMqB,GAAsB,CAAC,CAClC,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,QAAA,CAAAlF,CAAAA,CACA,aAAA,CAAAyB,CAAAA,CACA,eAAA,CAAAE,CAAAA,CACA,cAAA,CAAAI,CAAAA,CACA,gBAAA,CAAAF,CAAAA,CACA,YAAA,CAAAI,CAAAA,CACA,gBAAA,CAAAkD,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,eAAA,CAAAjE,CAAAA,CACA,iBAAA,CAAAuC,CAAAA,CACA,eAAA,CAAArB,CAAAA,CACA,cAAAC,CAAAA,CACA,cAAA,CAAA+C,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,gBAAA,CAAA5Y,CAAAA,CACA,eAAA,CAAAE,CAAAA,CACA,cAAA,CAAAE,CAAAA,CACA,aAAA,CAAAtF,CAAAA,CACA,cAAA,CAAAwZ,CAAAA,CACA,iBAAA,CAAAuE,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,mBAAA,CAAAC,CAAAA,CACA,WAAA,CAAA7B,CAAAA,CACA,aAAA,CAAA8B,CAAAA,CACA,YAAA,CAAA5B,CAAAA,CACA,iBAAA,CAAAC,CAAAA,CACA,qBAAA,CAAAF,EACA,UAAA,CAAAG,CAAAA,CACA,UAAA,CAAAN,EAAAA,CACA,aAAA,CAAAC,CACF,CAAA,GAAgC,CAC9B,IAAMgC,EAAAA,CAAcZ,CAAAA,CAAUD,CAAAA,CAAO,EAAE,CAAA,EAAK,EAAC,CACvCc,GAAeD,EAAAA,CAAY,KAAA,CAAM,CAAA,CAAGV,CAAY,CAAA,CAChDY,EAAAA,CAAUF,EAAAA,CAAY,MAAA,CAASV,CAAAA,CAErC,OACEtlB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oCAAA,CAEZ,QAAA,CAAA,CAAAulB,CAAAA,GAAqB,GAAGF,CAAS,CAAA,CAAA,EAAIF,CAAAA,CAAO,EAAE,CAAA,CAAA,CAC7CnlB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+GAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAS,IAAA,CACT,SAAA,CAAU,6FAAA,CACV,WAAA,CAAY,eAAA,CACZ,KAAA,CAAOulB,CAAAA,CACP,QAAA,CAAWnkB,CAAAA,EAAMwkB,CAAAA,CAAiBxkB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAChD,SAAA,CAAYA,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,SAASukB,CAAAA,CAAeT,CAAAA,CAAO,EAAA,CAAIE,CAAS,CAAA,CACtDhkB,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUykB,CAAAA,CAAoB,IAAI,EAClD,CAAA,CACA,MAAA,CAAQ,IAAM,CACPN,CAAAA,CAAc,IAAA,EAAK,EAAGM,CAAAA,CAAoB,IAAI,EACrD,CAAA,CACF,CAAA,CACA9lB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,gDAAgD,QAAA,CAAA,qBAAA,CAAmB,CAAA,CACnF1C,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,SAAA,CAAU,4CAAA,CACV,OAAA,CAAS,IAAMqlB,CAAAA,CAAoB,IAAI,CAAA,CACxC,QAAA,CAAA,QAAA,CAED,CAAA,CACA7lB,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,SAAA,CACR,IAAA,CAAK,IAAA,CACL,SAAA,CAAU,yEAAA,CACV,QAAS,IAAMmlB,CAAAA,CAAeT,CAAAA,CAAO,EAAA,CAAIE,CAAS,CAAA,CACnD,QAAA,CAAA,UAAA,CAED,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEArlB,IAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAM2lB,CAAAA,CAAkBR,EAAO,EAAA,CAAIE,CAAS,CAAA,CACrD,SAAA,CAAU,qLAAA,CAEV,QAAA,CAAA,CAAAplB,GAAAA,CAACkmB,IAAAA,CAAA,CAAK,SAAA,CAAU,uEAAA,CAAwE,CAAA,CACxFlmB,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,4GAA4G,QAAA,CAAA,cAAA,CAE5H,CAAA,CAAA,CACF,CAAA,CAIF1C,IAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,YAAA,CAAY,CAAA,SAAA,EAAYmlB,CAAAA,CAAO,KAAK,CAAA,CAAA,CACpC,SAAA,CAAU,gFAAA,CAET,QAAA,CAAA,CAAAc,EAAAA,CAAa,GAAA,CAAKjF,CAAAA,EACjBhhB,IAAAA,CAACP,WAAAA,CAAM,QAAA,CAAN,CAEE,QAAA,CAAA,CAAAoiB,CAAAA,EAAiBM,CAAAA,GAAmBnB,CAAAA,CAAK,EAAA,EAAMqB,CAAAA,GAAiB,KAAA,EAASR,CAAAA,GAAkBb,CAAAA,CAAK,EAAA,EAC/F/gB,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CAAgD,CAAA,CAGjEA,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAS,IAAA,CACT,IAAA,CAAK,UAAA,CACL,YAAA,CAAY,CAAA,MAAA,EAAS+gB,CAAAA,CAAK,KAAK,CAAA,CAAA,CAC/B,WAAA,CAAc3f,EAAAA,EAAMohB,CAAAA,CAAgBphB,EAAAA,CAAG2f,CAAAA,CAAK,EAAA,CAAI,MAAM,CAAA,CACtD,SAAA,CAAW0B,CAAAA,CACX,UAAA,CAAarhB,EAAAA,EAAMokB,CAAAA,CAAepkB,EAAAA,CAAG8jB,CAAAA,CAAO,EAAA,CAAInE,CAAAA,CAAK,EAAE,CAAA,CACvD,MAAA,CAAS3f,EAAAA,EAAMqkB,CAAAA,CAAWrkB,EAAAA,CAAG8jB,CAAAA,CAAO,EAAA,CAAInE,CAAAA,CAAK,EAAE,CAAA,CAC/C,YAAA,CAAe3f,EAAAA,EAAMyL,CAAAA,CAAiBzL,EAAAA,CAAG2f,CAAAA,CAAK,EAAA,CAAI,MAAM,CAAA,CACxD,WAAA,CAAahU,CAAAA,CACb,UAAA,CAAYE,CAAAA,CACZ,SAAA,CAAY7L,EAAAA,EAAMuG,CAAAA,CAAcvG,EAAAA,CAAG2f,CAAAA,CAAK,EAAA,CAAImE,CAAAA,CAAO,EAAE,CAAA,CACrD,QAAA,CAAU,EACV,cAAA,CAAcnE,CAAAA,CAAK,EAAA,CACnB,SAAA,CAAW5hB,CAAAA,CACT,0CAAA,CACAyiB,CAAAA,GAAkBb,CAAAA,CAAK,EAAA,CAAK,qBAAA,CAAwB,uBAAA,CACpDmB,CAAAA,GAAmBnB,CAAAA,CAAK,EAAA,EAAMa,CAAAA,CAAgB,qCAAA,CAAwC,EACxF,CAAA,CAEA,QAAA,CAAA5hB,GAAAA,CAAC4jB,EAAAA,CAAA,CACC,IAAA,CAAM7C,CAAAA,CACN,QAAA,CAAUmE,CAAAA,CAAO,EAAA,CACjB,eAAA,CAAiB5D,CAAAA,CACjB,iBAAA,CAAmBuC,CAAAA,CACnB,UAAA,CAAYC,EAAAA,CACZ,cAAeC,CAAAA,CACf,WAAA,CAAaC,CAAAA,CACb,qBAAA,CAAuBC,CAAAA,CACvB,YAAA,CAAcC,CAAAA,CACd,iBAAA,CAAmBC,CAAAA,CACnB,UAAA,CAAYC,CAAAA,CACd,CAAA,CACF,CAAA,CAGCxC,CAAAA,EAAiBM,CAAAA,GAAmBnB,CAAAA,CAAK,EAAA,EAAMqB,CAAAA,GAAiB,QAAA,EAAYR,CAAAA,GAAkBb,CAAAA,CAAK,EAAA,EAClG/gB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CAAgD,CAAA,CAAA,CAAA,CA3C9C+gB,CAAAA,CAAK,EA6C1B,CACD,CAAA,CAGAkF,EAAAA,EACClmB,KAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMohB,CAAAA,CAAe+D,CAAAA,CAAO,EAAE,CAAA,CACvC,SAAA,CAAU,gGAAA,CAEV,QAAA,CAAA,CAAAllB,GAAAA,CAACkmB,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CAC1BnmB,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,6CAAA,CAA8C,QAAA,CAAA,CAAA,OAAA,CACtDgmB,EAAAA,CAAY,MAAA,CAASV,CAAAA,CAAa,aAAA,CAAA,CAC1C,CAAA,CAAA,CACF,CAAA,CAIDU,EAAAA,CAAY,MAAA,GAAW,CAAA,EAAK,CAACnE,CAAAA,EAC5B7hB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oHAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACmmB,UAAAA,CAAA,CAAW,SAAA,CAAU,cAAA,CAAe,CAAA,CACrCnmB,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,cAAA,CAAY,CAAA,CAAA,CACpD,CAAA,CAIDsjB,EAAAA,CAAY,MAAA,GAAW,CAAA,EAAKnE,CAAAA,EAC3B5hB,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,mIAAA,CACV,UAAA,CAAaoB,CAAAA,EAAMokB,CAAAA,CAAepkB,CAAAA,CAAG8jB,CAAAA,CAAO,EAAE,EAC9C,MAAA,CAAS9jB,CAAAA,EAAMqkB,CAAAA,CAAWrkB,CAAAA,CAAG8jB,CAAAA,CAAO,EAAE,CAAA,CAEtC,QAAA,CAAAllB,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,8DAAA,CAA+D,QAAA,CAAA,WAAA,CAAS,CAAA,CAC1F,CAAA,CAAA,CAEJ,GACF,CAEJ,CAAA,CCvMO,SAAS2jB,EAAAA,CAAO,CACrB,OAAA,CAAAvH,CAAAA,CACA,KAAA,CAAAoB,CAAAA,CACA,UAAA,CAAAsB,CAAAA,CACA,aAAAC,CAAAA,CACA,WAAA,CAAAwC,CAAAA,CACA,SAAA,CAAAqC,CAAAA,CACA,aAAA,CAAAP,CAAAA,CACA,YAAA,CAAA5B,CAAAA,CACA,cAAA,CAAAoC,CAAAA,CACA,UAAA,CAAA7E,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,qBAAA,CAAAsC,CAAAA,CACA,iBAAA,CAAAE,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAA1kB,CAAAA,CACA,eAAA,CAAA6mB,CAAAA,CACA,aAAA,CAAAxC,CAAAA,CACA,OAAA,CAAA7D,CAAAA,CACA,WAAA,CAAAsG,EAAc,MAAA,CACd,aAAA,CAAAC,CAAAA,CAAgB,IAAA,CAChB,YAAA,CAAAC,CAAAA,CAAe,IAAA,CACf,YAAA,CAAAC,CAAAA,CAAe,qBAAA,CACf,QAAA,CAAAxG,CAAAA,CAAW,EAAA,CACX,UAAA,CAAA2D,CAAAA,CAAa,KAAA,CACb,eAAA,CAAAxC,CAAAA,CAAkB,EAAC,CACnB,iBAAA,CAAAuC,CAAAA,CAAoB,IACtB,CAAA,CAAgB,CACd,GAAM,CAACyB,CAAAA,CAAkBO,CAAmB,CAAA,CAAIjiB,QAAAA,CAAwB,IAAI,EACtE,CAAC2hB,CAAAA,CAAeK,CAAgB,CAAA,CAAIhiB,QAAAA,CAAS,EAAE,CAAA,CAE/C,CACJ,qBAAA,CAAAid,CAAAA,CACA,UAAA,CAAA3B,CAAAA,CACA,aAAA,CAAAC,EAAAA,CACA,aAAA,CAAAiB,CAAAA,CACA,cAAA,CAAAe,EACF,CAAA,CAAInB,EAAAA,CAAe,CAAE,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAApB,CAAAA,CAAS,OAAA,CAAAqB,CAAAA,CAAS,QAAA,CAAAC,CAAS,CAAC,CAAA,CAElD,CACJ,cAAAyB,EAAAA,CACA,eAAA,CAAAE,EAAAA,CACA,gBAAA,CAAAE,CAAAA,CACA,cAAA,CAAAE,EAAAA,CACA,YAAA,CAAAE,EAAAA,CACA,eAAA,CAAAI,EAAAA,CACA,aAAA,CAAAC,EAAAA,CACA,cAAA,CAAA+C,EAAAA,CACA,UAAA,CAAAC,GACA,gBAAA,CAAA5Y,EAAAA,CACA,eAAA,CAAAE,EAAAA,CACA,cAAA,CAAAE,EAAAA,CACA,gBAAA,CAAA4U,EACF,CAAA,CAAIR,EAAAA,CAAqB,CACvB,KAAA,CAAApB,CAAAA,CACA,OAAA,CAAApB,CAAAA,CACA,eAAA,CAAAyC,EACA,UAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CACF,CAAC,CAAA,CAEK,CACJ,QAAA,CAAA+B,EAAAA,CACA,eAAA,CAAAN,EAAAA,CACA,oBAAA,CAAAwD,EAAAA,CACA,oBAAA,CAAAC,EAAAA,CACA,kBAAA,CAAAC,EACF,CAAA,CAAI3D,EAAAA,EAAqB,CAEnBuC,EAAAA,CAAoB,CAACtE,CAAAA,CAAkBgE,CAAAA,CAAoB,SAAA,GAAc,CAC7ES,EAAoB,CAAA,EAAGT,CAAS,CAAA,CAAA,EAAIhE,CAAQ,CAAA,CAAE,EAChD,CAAA,CAEMuE,EAAAA,CAAiB,CAACvE,CAAAA,CAAkBgE,CAAAA,CAAoB,SAAA,GAAc,CACtEG,CAAAA,CAAc,IAAA,EAAK,EAAKc,CAAAA,GAC1BA,CAAAA,CAAUjF,CAAAA,CAAUmE,CAAAA,CAAc,IAAA,EAAM,CAAA,CACxCK,CAAAA,CAAiB,EAAE,CAAA,CACnBC,CAAAA,CAAoB,IAAI,CAAA,EAE5B,CAAA,CAEMkB,EAAAA,CAA0Bre,WAAAA,CAAY,CAACtH,CAAAA,CAAqB2f,CAAAA,GAAqB,CACrF,GAAI+C,CAAAA,GAAe1iB,CAAAA,CAAE,OAAA,EAAWA,CAAAA,CAAE,OAAA,CAAA,CAAU,CAC1CA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAElB,IAAMojB,EAAAA,CADalD,CAAAA,CAAgB,QAAA,CAASP,CAAAA,CAAK,EAAE,CAAA,CAE/CO,CAAAA,CAAgB,MAAA,CAAO5b,CAAAA,EAAMA,CAAAA,GAAOqb,CAAAA,CAAK,EAAE,CAAA,CAC3C,CAAC,GAAGO,EAAiBP,CAAAA,CAAK,EAAE,CAAA,CAChCkD,CAAAA,GAAwBO,EAAY,EACtC,CAAA,KACER,CAAAA,GAAcjD,CAAI,EAEtB,CAAA,CAAG,CAAC+C,CAAAA,CAAYxC,CAAAA,CAAiB2C,CAAAA,CAAuBD,CAAW,CAAC,CAAA,CAE9Drc,EAAAA,CAAgB,CAACvG,CAAAA,CAAwBshB,CAAAA,CAAgBtB,CAAAA,GAAqB,CAalF,GAAA,CAZIhgB,CAAAA,CAAE,GAAA,GAAQ,GAAA,EAAOA,CAAAA,CAAE,GAAA,GAAQ,OAAA,IAC7BA,CAAAA,CAAE,cAAA,GACEwgB,EAAAA,GAAkBc,CAAAA,EAChBnB,CAAAA,EACFA,CAAAA,CAAWK,EAAAA,CAAeR,CAAQ,CAAA,CAEpCqB,EAAAA,EAAc,EAEdZ,EAAAA,CAAiBa,CAAM,CAAA,CAAA,CAIvBd,EAAAA,GAAkBc,CAAAA,CAAQ,CAC5B,IAAMsE,EAAAA,CAAWnI,CAAAA,CAAQ,SAAA,CAAUoI,EAAAA,EAAKA,EAAAA,CAAE,EAAA,GAAO7F,CAAQ,CAAA,CAErD8F,CAAAA,CAAY,EAAA,CACZC,EAAAA,CAAmB,SAAA,CAEvB,IAAA,GAAW,CAAC/B,EAAAA,CAAWD,EAAS,IAAK,MAAA,CAAO,OAAA,CAAQtE,CAAqB,CAAA,CAAG,CAE1E,IAAMd,EAAAA,CAAAA,CADaoF,EAAAA,CAAU/D,CAAQ,CAAA,EAAK,EAAC,EACpB,SAAA,CAAUpP,EAAAA,EAAKA,EAAAA,CAAE,EAAA,GAAO0Q,CAAM,CAAA,CACrD,GAAI3C,EAAAA,GAAQ,EAAA,CAAI,CACdmH,CAAAA,CAAYnH,EAAAA,CACZoH,EAAAA,CAAmB/B,EAAAA,CACnB,KACF,CACF,CAEA,IAAMW,EAAAA,CAAclF,CAAAA,CAAsBsG,EAAgB,CAAA,GAAI/F,CAAQ,CAAA,EAAK,EAAC,CAE5E,GAAIhgB,CAAAA,CAAE,GAAA,GAAQ,YAAA,EAAgB4lB,EAAAA,CAAWnI,CAAAA,CAAQ,MAAA,CAAS,CAAA,CACxD0C,CAAAA,GAAamB,CAAAA,CAAQ7D,CAAAA,CAAQmI,EAAAA,CAAW,CAAC,CAAA,CAAG,EAAE,CAAA,CAAA,KAAA,GACrC5lB,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAe4lB,EAAAA,CAAW,CAAA,CAC7CzF,CAAAA,GAAamB,CAAAA,CAAQ7D,CAAAA,CAAQmI,EAAAA,CAAW,CAAC,CAAA,CAAG,EAAE,CAAA,CAAA,KAAA,GACrC5lB,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAe8lB,CAAAA,CAAYnB,EAAAA,CAAY,MAAA,CAAS,CAAA,CAAG,CACtE,IAAMqB,EAAAA,CAAWrB,EAAAA,CAAYmB,CAAAA,CAAY,CAAC,CAAA,CACtCE,EAAAA,EAAU7F,IAAamB,CAAAA,CAAQtB,CAAAA,CAAUgG,EAAAA,CAAS,EAAA,CAAI,QAAQ,EACpE,CAAA,KAAA,GAAWhmB,CAAAA,CAAE,GAAA,GAAQ,SAAA,EAAa8lB,CAAAA,CAAY,CAAA,CAAG,CAC/C,IAAMG,EAAAA,CAAWtB,EAAAA,CAAYmB,EAAY,CAAC,CAAA,CACtCG,EAAAA,EAAU9F,CAAAA,GAAamB,CAAAA,CAAQtB,CAAAA,CAAUiG,EAAAA,CAAS,EAAA,CAAI,KAAK,EACjE,CACF,CACF,CAAA,CAEA,OACEtnB,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK2jB,EAAAA,CACL,IAAA,CAAK,MAAA,CACL,YAAA,CAAW,cAAA,CACX,WAAA,CAAakD,EAAAA,CACb,WAAA,CAAaC,EAAAA,CACb,SAAA,CAAWC,EAAAA,CACX,YAAA,CAAcA,EAAAA,CACd,SAAA,CAAW3nB,CAAAA,CACT,8HACAikB,EAAAA,CAAkB,iBAAA,CAAoB,aAAA,CACtC1jB,CACF,CAAA,CACA,KAAA,CAAO,CAAE,MAAA,CAAQ,OAAOinB,CAAAA,EAAiB,QAAA,CAAW,CAAA,EAAGA,CAAY,CAAA,EAAA,CAAA,CAAOA,CAAa,CAAA,CAGvF,QAAA,CAAA,CAAA3mB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wFAAA,CACZ,QAAA,CAAA6e,CAAAA,CAAQ,GAAA,CAAI,CAACqG,CAAAA,CAAQnF,CAAAA,GAAQ,CAC5B,IAAMgG,CAAAA,CAAc9F,CAAAA,CAAM,MAAA,CAAOjO,GAAKA,CAAAA,CAAE,QAAA,GAAakT,CAAAA,CAAO,EAAE,CAAA,CACxDoC,EAAAA,CAAcpC,CAAAA,CAAO,KAAA,EAASa,CAAAA,CAAY,MAAA,CAASb,CAAAA,CAAO,KAAA,CAEhE,OACEnlB,IAAAA,CAAC,KAAA,CAAA,CAEC,IAAA,CAAK,UAAA,CACL,YAAA,CAAY,CAAA,QAAA,EAAWmlB,CAAAA,CAAO,KAAK,CAAA,CAAA,CACnC,SAAA,CAAW/lB,CAAAA,CACT,6FAAA,CACAunB,CAAAA,EAAgB3G,CAAAA,CAAM,CAAA,EAAK,0BAC7B,CAAA,CACA,UAAA,CAAa3e,CAAAA,EAAMokB,GAAepkB,CAAAA,CAAG8jB,CAAAA,CAAO,EAAE,CAAA,CAC9C,MAAA,CAAS9jB,CAAAA,EAAMqkB,EAAAA,CAAWrkB,CAAAA,CAAG8jB,CAAAA,CAAO,EAAE,CAAA,CAEtC,QAAA,CAAA,CAAAnlB,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAS,IAAA,CACT,YAAcqB,CAAAA,EAAMohB,EAAAA,CAAgBphB,CAAAA,CAAG8jB,CAAAA,CAAO,EAAA,CAAI,QAAQ,CAAA,CAC1D,SAAA,CAAWzC,EAAAA,CACX,YAAA,CAAerhB,CAAAA,EAAMyL,EAAAA,CAAiBzL,CAAAA,CAAG8jB,CAAAA,CAAO,EAAA,CAAI,QAAQ,EAC5D,WAAA,CAAanY,EAAAA,CACb,UAAA,CAAYE,EAAAA,CACZ,SAAA,CAAU,2EAAA,CAEV,QAAA,CAAA,CAAAjN,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,4DAAA,CACV,KAAA,CAAO,CAAE,eAAA,CAAiBklB,CAAAA,CAAO,KAAA,EAAS,CAAA,MAAA,EAASsB,CAAW,CAAA,KAAA,CAAQ,CAAA,CACxE,CAAA,CACAxmB,GAAAA,CAAC6C,EAAAA,CAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,SAAA,CAAU,qEAAA,CACxB,QAAA,CAAAqiB,CAAAA,CAAO,KAAA,CACV,CAAA,CACCuB,GACC1mB,IAAAA,CAAC2d,EAAAA,CAAA,CACC,OAAA,CAAS4J,EAAAA,CAAc,QAAA,CAAW,SAAA,CAClC,SAAA,CAAWnoB,CAAAA,CACT,qDAAA,CACA,CAACmoB,EAAAA,EAAe,8CAClB,CAAA,CAEC,QAAA,CAAA,CAAAvB,CAAAA,CAAY,MAAA,CAAQb,CAAAA,CAAO,KAAA,CAAQ,CAAA,GAAA,EAAMA,CAAAA,CAAO,KAAK,CAAA,CAAA,CAAK,EAAA,CAAA,CAC7D,CAAA,CAEDoC,EAAAA,EACCtnB,GAAAA,CAACunB,aAAAA,CAAA,CAAc,SAAA,CAAU,0CAAA,CAA2C,CAAA,CAAA,CAExE,EACAxnB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gGAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,SAAA,CAAU,+EAAA,CACV,OAAA,CAAS,IAAMklB,EAAAA,CAAkBR,CAAAA,CAAO,EAAE,CAAA,CAE1C,QAAA,CAAAllB,GAAAA,CAACkmB,IAAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAc,CAAA,CAChC,CAAA,CAEAnmB,IAAAA,CAAC8V,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA7V,IAAC8V,EAAAA,CAAA,CAAoB,SAAA,CAAU,kIAAA,CAC7B,QAAA,CAAA9V,GAAAA,CAACwnB,cAAAA,CAAA,CAAe,SAAA,CAAU,aAAA,CAAc,CAAA,CAC1C,CAAA,CACAznB,IAAAA,CAACgW,EAAAA,CAAA,CAAoB,KAAA,CAAM,MAAM,SAAA,CAAU,gGAAA,CACzC,QAAA,CAAA,CAAA/V,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBAAA,CACb,QAAA,CAAAA,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,+DAAA,CAAgE,QAAA,CAAA,gBAAA,CAAc,CAAA,CAChG,CAAA,CAEA1C,KAACmW,EAAAA,CAAA,CACC,OAAA,CAAS,IAAMoQ,CAAAA,GAAiBpB,CAAAA,CAAO,EAAA,CAAI,UAAU,CAAA,CACrD,SAAA,CAAU,uFAAA,CAEV,QAAA,CAAA,CAAAllB,GAAAA,CAACwW,QAAAA,CAAA,CAAS,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,kBAAA,CAAA,CAClC,CAAA,CAEAxW,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6BAAA,CAA8B,CAAA,CAE7CA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBAAA,CACb,QAAA,CAAAA,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,+DAAA,CAAgE,QAAA,CAAA,YAAA,CAAU,CAAA,CAC5F,CAAA,CAEA1C,IAAAA,CAACmW,EAAAA,CAAA,CACC,OAAA,CAAS,IAAMiJ,EAAAA,CAAc,CAAE,KAAA,CAAO,OAAA,CAAS,SAAA,CAAWD,CAAAA,EAAY,KAAA,GAAU,OAAA,EAAWA,CAAAA,CAAW,SAAA,GAAc,KAAA,CAAQ,MAAA,CAAS,KAAM,CAAC,CAAA,CAC5I,SAAA,CAAW/f,CAAAA,CACT,wDAAA,CACA+f,CAAAA,EAAY,KAAA,GAAU,OAAA,CAAU,6BAAA,CAAgC,gCAClE,CAAA,CAEA,QAAA,CAAA,CAAAlf,GAAAA,CAACynB,OAAAA,CAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,gBAAA,CAC9BvI,CAAAA,EAAY,KAAA,GAAU,OAAA,EACrBlf,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oDAAA,CAAsD,QAAA,CAAAkf,CAAAA,CAAW,SAAA,CAAU,CAAA,CAAA,CAE/F,CAAA,CAEAnf,IAAAA,CAACmW,EAAAA,CAAA,CACC,OAAA,CAAS,IAAMiJ,EAAAA,CAAc,CAAE,KAAA,CAAO,UAAA,CAAY,SAAA,CAAWD,CAAAA,EAAY,QAAU,UAAA,EAAcA,CAAAA,CAAW,SAAA,GAAc,MAAA,CAAS,KAAA,CAAQ,MAAO,CAAC,CAAA,CACnJ,SAAA,CAAW/f,CAAAA,CACT,wDAAA,CACA+f,CAAAA,EAAY,KAAA,GAAU,UAAA,CAAa,6BAAA,CAAgC,gCACrE,EAEA,QAAA,CAAA,CAAAlf,GAAAA,CAAC8f,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,mBAAA,CAClCZ,CAAAA,EAAY,KAAA,GAAU,UAAA,EACrBlf,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oDAAA,CAAsD,QAAA,CAAAkf,EAAW,SAAA,CAAU,CAAA,CAAA,CAE/F,CAAA,CAEAnf,IAAAA,CAACmW,EAAAA,CAAA,CACC,OAAA,CAAS,IAAMiJ,EAAAA,CAAc,CAAE,KAAA,CAAO,SAAA,CAAW,SAAA,CAAWD,CAAAA,EAAY,KAAA,GAAU,SAAA,EAAaA,CAAAA,CAAW,SAAA,GAAc,KAAA,CAAQ,MAAA,CAAS,KAAM,CAAC,CAAA,CAChJ,SAAA,CAAW/f,CAAAA,CACT,wDAAA,CACA+f,CAAAA,EAAY,KAAA,GAAU,SAAA,CAAY,6BAAA,CAAgC,gCACpE,CAAA,CAEA,UAAAlf,GAAAA,CAAC0nB,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,eAAA,CACnCxI,CAAAA,EAAY,KAAA,GAAU,SAAA,EACrBlf,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oDAAA,CAAsD,QAAA,CAAAkf,CAAAA,CAAW,SAAA,CAAU,CAAA,CAAA,CAE/F,CAAA,CAEAlf,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6BAAA,CAA8B,CAAA,CAE7CD,IAAAA,CAACmW,EAAAA,CAAA,CAAiB,SAAA,CAAU,uFAAA,CAC1B,QAAA,CAAA,CAAAlW,GAAAA,CAAC2nB,OAAAA,CAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,oBAAA,CAAA,CACjC,CAAA,CAEA5nB,IAAAA,CAACmW,EAAAA,CAAA,CAAiB,SAAA,CAAU,sFAAA,CAC1B,QAAA,CAAA,CAAAlW,GAAAA,CAAC0kB,MAAAA,CAAA,CAAO,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,gBAAA,CAAA,CAChC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CA3HKQ,CAAAA,CAAO,EA4Hd,CAEJ,CAAC,CAAA,CACH,CAAA,CAGAllB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAA,CACZ,gBAAO,OAAA,CAAQ6gB,CAAqB,CAAA,CAAE,GAAA,CAAI,CAAC,CAACuE,CAAAA,CAAWD,CAAS,CAAA,GAC/DplB,IAAAA,CAAC,KAAA,CAAA,CAAoB,SAAA,CAAU,8BAAA,CAC5B,QAAA,CAAA,CAAAmgB,CAAAA,EACCngB,IAAAA,CAAC,OAAI,SAAA,CAAU,8GAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC0d,EAAAA,CAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,sFAAA,CAChC,QAAA,CAAA0H,CAAAA,CACH,CAAA,CACAplB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8BAA8B,CAAA,CAAA,CAC/C,CAAA,CAGFA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BAAA,CACZ,QAAA,CAAA6e,CAAAA,CAAQ,GAAA,CAAI,CAACqG,CAAAA,CAAQnF,EAAAA,GACtBhgB,IAAAA,CAACP,WAAAA,CAAM,QAAA,CAAN,CAEE,QAAA,CAAA,CAAAsiB,EAAAA,EAAmBE,CAAAA,GAAqBkD,CAAAA,CAAO,EAAA,EAAM9C,EAAAA,GAAiB,MAAA,EAAUN,EAAAA,GAAoBoD,CAAAA,CAAO,EAAA,EAC1GllB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kEAAA,CAAmE,CAAA,CAGpFA,GAAAA,CAAC,OAEC,gBAAA,CAAgBklB,CAAAA,CAAO,EAAA,CACvB,SAAA,CAAW/lB,CAAAA,CACT,sIAAA,CACAunB,CAAAA,EAAgB3G,EAAAA,CAAM,CAAA,EAAK,0BAAA,CAC3B+B,EAAAA,GAAoBoD,CAAAA,CAAO,EAAA,CAAK,YAAA,CAAe,aAAA,CAC/ClD,CAAAA,GAAqBkD,CAAAA,CAAO,EAAA,EAAMpD,EAAAA,CAAkB,eAAA,CAAkB,EAAA,CACtEoD,CAAAA,CAAO,KAAA,EAAA,CAAUC,CAAAA,CAAUD,CAAAA,CAAO,EAAE,CAAA,EAAK,EAAC,EAAG,MAAA,CAASA,CAAAA,CAAO,KAAA,EAAS,sDACtEqB,CACF,CAAA,CACA,UAAA,CAAanlB,CAAAA,EAAMokB,EAAAA,CAAepkB,CAAAA,CAAG8jB,CAAAA,CAAO,EAAE,CAAA,CAC9C,MAAA,CAAS9jB,CAAAA,EAAMqkB,EAAAA,CAAWrkB,CAAAA,CAAG8jB,CAAAA,CAAO,EAAE,CAAA,CAEtC,QAAA,CAAAllB,GAAAA,CAACilB,EAAAA,CAAA,CACC,MAAA,CAAQC,CAAAA,CACR,SAAA,CAAWC,CAAAA,CACX,SAAA,CAAWC,CAAAA,CACX,YAAA,CAAchF,CAAAA,CAAc8E,CAAAA,CAAO,EAAE,CAAA,EAAK/E,CAAAA,CAC1C,SAAUA,CAAAA,CACV,aAAA,CAAeyB,EAAAA,CACf,eAAA,CAAiBE,EAAAA,CACjB,cAAA,CAAgBI,EAAAA,CAChB,gBAAA,CAAkBF,CAAAA,CAClB,YAAA,CAAcI,EAAAA,CACd,gBAAA,CAAkBkD,CAAAA,CAClB,aAAA,CAAeC,CAAAA,CACf,eAAA,CAAiBjE,EACjB,iBAAA,CAAmBuC,CAAAA,CACnB,eAAA,CAAiBrB,EAAAA,CACjB,aAAA,CAAeC,EAAAA,CACf,cAAA,CAAgB+C,EAAAA,CAChB,UAAA,CAAYC,EAAAA,CACZ,gBAAA,CAAkB5Y,EAAAA,CAClB,eAAA,CAAiBE,EAAAA,CACjB,cAAA,CAAgBE,EAAAA,CAChB,cAAetF,EAAAA,CACf,cAAA,CAAgBwZ,EAAAA,CAChB,iBAAA,CAAmBuE,EAAAA,CACnB,cAAA,CAAgBC,EAAAA,CAChB,gBAAA,CAAkBC,CAAAA,CAClB,mBAAA,CAAqBC,CAAAA,CACrB,WAAA,CAAakB,EAAAA,CACb,aAAA,CAAejB,CAAAA,CACf,YAAA,CAAc5B,CAAAA,CACd,iBAAA,CAAmBC,CAAAA,CACnB,qBAAA,CAAuBF,CAAAA,CACvB,UAAA,CAAYG,CAAAA,CACZ,UAAA,CAAYN,CAAAA,CACZ,aAAA,CAAeC,CAAAA,CACjB,CAAA,CAAA,CAjDKmB,CAAAA,CAAO,EAkDd,CAAA,CAGCpD,EAAAA,EAAmBE,IAAqBkD,CAAAA,CAAO,EAAA,EAAM9C,EAAAA,GAAiB,OAAA,EAAWN,EAAAA,GAAoBoD,CAAAA,CAAO,EAAA,EAC3GllB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kEAAA,CAAmE,CAAA,CAAA,CAAA,CA7DjEklB,CAAAA,CAAO,EA+D5B,CACD,CAAA,CACH,CAAA,CAAA,CAAA,CA7EUE,CA8EZ,CACD,CAAA,CACD,CAAA,CAAA,CACF,CAEJ,CCzZA,IAAMwC,EAAAA,CAAmBrnB,GAAAA,CACvB,+HAAA,CACA,CACE,QAAA,CAAU,CACR,YAAA,CAAc,CACZ,IAAA,CAAM,gDAAA,CACN,KAAA,CAAO,mHACT,EACA,KAAA,CAAO,CACL,IAAA,CAAM,gDAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,YAAA,CAAc,KAAA,CACd,KAAA,CAAO,KACT,CACF,CACF,EAWasnB,EAAAA,CAAeroB,WAAAA,CAAM,UAAA,CAChC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,MAAA,CAAAooB,CAAAA,CAAQ,QAAA,CAAAC,CAAAA,CAAW,CAAA,CAAG,OAAA,CAAAC,CAAAA,CAAS,KAAA,CAAAxiB,CAAAA,CAAQ,eAAgB,WAAA,CAAA8L,CAAAA,CAAc,gCAAA,CAAkC,GAAGzR,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACvI,GAAM,CAACmoB,CAAAA,CAAcC,CAAe,CAAA,CAAItkB,QAAAA,CAAS,KAAK,CAAA,CAChD,CAACukB,CAAAA,CAAOC,CAAQ,CAAA,CAAIxkB,QAAAA,CAAiB,EAAE,CAAA,CACvC,CAACkC,CAAAA,CAAOuiB,CAAQ,CAAA,CAAIzkB,QAAAA,CAAwB,IAAI,CAAA,CAChD0kB,CAAAA,CAAW9oB,YAAM,MAAA,CAAyB,IAAI,CAAA,CAE9CgmB,CAAAA,CAAkBpkB,CAAAA,EAAuB,CAC7CA,CAAAA,CAAE,cAAA,EAAe,CACjB8mB,CAAAA,CAAgB,IAAI,EACtB,CAAA,CAEMK,CAAAA,CAAmBnnB,CAAAA,EAAuB,CAC9CA,CAAAA,CAAE,cAAA,EAAe,CACjB8mB,CAAAA,CAAgB,KAAK,EACvB,CAAA,CAEMM,CAAAA,CAAiBC,CAAAA,EACjBV,CAAAA,EAAYU,CAAAA,CAAS,MAAA,CAASV,CAAAA,EAChCM,CAAAA,CAAS,CAAA,IAAA,EAAON,CAAQ,gBAAgB,CAAA,CACjC,KAAA,EAELC,CAAAA,EACgBS,CAAAA,CAAS,IAAA,CAAKC,CAAAA,EAAKA,CAAAA,CAAE,IAAA,CAAOV,CAAO,CAAA,EAEnDK,CAAAA,CAAS,CAAA,oBAAA,EAAuBL,CAAAA,CAAU,IAAA,CAAO,IAAI,CAAA,GAAA,CAAK,CAAA,CACnD,KAAA,GAGXK,CAAAA,CAAS,IAAI,CAAA,CACN,IAAA,CAAA,CAGH5C,CAAAA,CAAcrkB,CAAAA,EAAuB,CACzCA,CAAAA,CAAE,cAAA,EAAe,CACjB8mB,CAAAA,CAAgB,KAAK,CAAA,CAErB,IAAMS,EAAe,KAAA,CAAM,IAAA,CAAKvnB,CAAAA,CAAE,YAAA,CAAa,KAAK,CAAA,CAChDonB,CAAAA,CAAcG,CAAY,CAAA,GAC5BP,CAAAA,CAASO,CAAY,CAAA,CACrBb,CAAAA,GAASa,CAAY,CAAA,EAEzB,CAAA,CAEMxM,EAAgB/a,CAAAA,EAA2C,CAC/D,GAAIA,CAAAA,CAAE,MAAA,CAAO,KAAA,CAAO,CAClB,IAAMwnB,CAAAA,CAAgB,KAAA,CAAM,IAAA,CAAKxnB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC3ConB,CAAAA,CAAcI,CAAa,CAAA,GAC7BR,CAAAA,CAASQ,CAAa,CAAA,CACtBd,CAAAA,GAASc,CAAa,CAAA,EAE1B,CACF,CAAA,CAEMC,CAAAA,CAAa,CAACvhB,CAAAA,CAAelG,CAAAA,GAAwB,CACzDA,CAAAA,CAAE,eAAA,EAAgB,CAClB,IAAM0nB,CAAAA,CAAWX,CAAAA,CAAM,MAAA,CAAO,CAAChd,CAAAA,CAAGuD,CAAAA,GAAMA,CAAAA,GAAMpH,CAAK,CAAA,CACnD8gB,CAAAA,CAASU,CAAQ,CAAA,CACjBhB,CAAAA,GAASgB,CAAQ,EACnB,CAAA,CAEA,OACE/oB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGyoB,EAAAA,CAAiB,CAAE,YAAA,CAAAK,CAAAA,CAAc,KAAA,CAAO,CAAC,CAACniB,CAAAA,CAAO,SAAA,CAAApG,CAAU,CAAC,CAAA,CAAG,oBAAoB,CAAA,CACjG,UAAA,CAAY8lB,CAAAA,CACZ,WAAA,CAAa+C,CAAAA,CACb,MAAA,CAAQ9C,EACR,OAAA,CAAS,IAAM6C,CAAAA,CAAS,OAAA,EAAS,KAAA,EAAM,CACtC,GAAGzoB,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKsoB,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,QAAA,CACV,QAAA,CAAUP,CAAAA,CAAW,CAAA,CACrB,QAAA,CAAU5L,CAAAA,CACZ,CAAA,CAEAnc,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDAAA,CACb,QAAA,CAAAA,GAAAA,CAAC+oB,MAAAA,CAAA,CAAO,SAAA,CAAU,2CAA2C,CAAA,CAC/D,CAAA,CACA/oB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACZ,QAAA,CAAAwF,CAAAA,CACH,CAAA,CACAxF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACZ,QAAA,CAAAsR,CAAAA,CACH,CAAA,CACCxL,GACC9F,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACZ,QAAA,CAAA8F,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAECqiB,CAAAA,CAAM,MAAA,CAAS,CAAA,EACdnoB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACZ,QAAA,CAAAmoB,EAAM,GAAA,CAAI,CAACa,CAAAA,CAAMta,CAAAA,GAChB3O,IAAAA,CAAC,KAAA,CAAA,CAAY,SAAA,CAAU,4HAAA,CACrB,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sFAAA,CACb,QAAA,CAAAA,GAAAA,CAACipB,IAAAA,CAAA,CAAS,SAAA,CAAU,0CAAA,CAA2C,CAAA,CACjE,CAAA,CACAlpB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,eAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAK,SAAA,CAAU,0EAAA,CAA4E,QAAA,CAAAgpB,CAAAA,CAAK,IAAA,CAAK,CAAA,CACtGjpB,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA6C,QAAA,CAAA,CAAA,CAAAipB,CAAAA,CAAK,IAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,KAAA,CAAA,CAAG,CAAA,CAAA,CAC/F,CAAA,CAAA,CACF,CAAA,CACAhpB,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAUoB,CAAAA,EAAMynB,CAAAA,CAAWna,CAAAA,CAAGtN,CAAC,CAAA,CAC/B,SAAA,CAAU,gGAAA,CAEV,QAAA,CAAApB,IAAC0V,CAAAA,CAAA,CAAE,SAAA,CAAU,SAAA,CAAU,CAAA,CACzB,CAAA,CAAA,CAAA,CAfQhH,CAgBV,CACD,CAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EACAmZ,EAAAA,CAAa,WAAA,CAAc,cAAA,CC1IpB,SAASqB,EAAAA,CAAgB,CAAE,MAAA,CAAAviB,CAAAA,CAAQ,OAAA,CAAA+Q,CAAAA,CAAS,OAAAyR,CAAAA,CAAQ,IAAA,CAAApI,CAAAA,CAAM,QAAA,CAAAK,CAAS,CAAA,CAAyB,CACjG,GAAM,CAAC3c,CAAAA,CAAO2kB,CAAQ,CAAA,CAAIxlB,QAAAA,CAAS,EAAE,CAAA,CAC/B,CAAC0N,EAAa+X,CAAc,CAAA,CAAIzlB,QAAAA,CAAS,EAAE,CAAA,CAC3C,CAAC2gB,CAAAA,CAAU+E,CAAW,CAAA,CAAI1lB,QAAAA,CAA+C,QAAQ,CAAA,CACjF,CAAC2lB,CAAAA,CAAMC,CAAO,CAAA,CAAI5lB,SAAmB,EAAE,CAAA,CACvC,CAAC6lB,CAAAA,CAAUC,CAAW,CAAA,CAAI9lB,QAAAA,CAAS,EAAE,CAAA,CAE3CI,SAAAA,CAAU,IAAM,CACV+c,CAAAA,EACFqI,CAAAA,CAASrI,CAAAA,CAAK,KAAA,EAAS,EAAE,CAAA,CACzBsI,CAAAA,CAAetI,CAAAA,CAAK,WAAA,EAAe,EAAE,CAAA,CACrCuI,CAAAA,CAAYvI,CAAAA,CAAK,QAAA,EAAY,QAAQ,CAAA,CACrCyI,CAAAA,CAAQzI,CAAAA,CAAK,IAAA,EAAQ,EAAE,CAAA,GAEvBqI,CAAAA,CAAS,EAAE,CAAA,CACXC,CAAAA,CAAe,EAAE,CAAA,CACjBC,CAAAA,CAAY,QAAQ,CAAA,CACpBE,CAAAA,CAAQ,EAAE,CAAA,EAEd,CAAA,CAAG,CAACzI,CAAAA,CAAMpa,CAAM,CAAC,CAAA,CAEjB,IAAMgjB,CAAAA,CAAa,IAAM,CAClBllB,CAAAA,CAAM,IAAA,EAAK,GAChB0kB,CAAAA,CAAO,CACL,GAAGpI,CAAAA,CACH,MAAAtc,CAAAA,CACA,WAAA,CAAA6M,CAAAA,CACA,QAAA,CAAAiT,CAAAA,CACA,IAAA,CAAAgF,CAAAA,CACA,QAAA,CAAUxI,CAAAA,EAAM,QAAA,EAAYK,CAC9B,CAAC,CAAA,CACD1J,CAAAA,EAAQ,EACV,CAAA,CAEMkS,CAAAA,CAAS,IAAM,CACfH,CAAAA,CAAS,IAAA,EAAK,EAAK,CAACF,CAAAA,CAAK,QAAA,CAASE,CAAAA,CAAS,IAAA,EAAM,CAAA,GACnDD,CAAAA,CAAQ,CAAC,GAAGD,EAAME,CAAAA,CAAS,IAAA,EAAM,CAAC,CAAA,CAClCC,CAAAA,CAAY,EAAE,CAAA,EAElB,CAAA,CAEMG,CAAAA,CAAaC,CAAAA,EAAwB,CACzCN,CAAAA,CAAQD,CAAAA,CAAK,MAAA,CAAOvX,CAAAA,EAAKA,IAAM8X,CAAW,CAAC,EAC7C,CAAA,CAEA,OACE/pB,IAAAA,CAAC0X,EAAAA,CAAA,CAAM,MAAA,CAAQ9Q,CAAAA,CAAQ,OAAA,CAAS+Q,CAAAA,CAC9B,QAAA,CAAA,CAAA1X,GAAAA,CAAC8X,EAAAA,CAAA,CACC,SAAA9X,GAAAA,CAACgY,EAAAA,CAAA,CAAY,QAAA,CAAA+I,CAAAA,CAAO,WAAA,CAAc,iBAAA,CAAkB,CAAA,CACtD,CAAA,CAEAhhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACmF,CAAAA,CAAA,CAAM,OAAA,CAAQ,YAAA,CAAa,QAAA,CAAA,OAAA,CAAK,CAAA,CACjCnF,GAAAA,CAACsF,EAAAA,CAAA,CACC,EAAA,CAAG,YAAA,CACH,WAAA,CAAY,yBACZ,KAAA,CAAOb,CAAAA,CACP,QAAA,CAAWrD,CAAAA,EAAMgoB,CAAAA,CAAShoB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxC,SAAA,CAAS,IAAA,CACX,CAAA,CAAA,CACF,CAAA,CAEArB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACmF,CAAAA,CAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAA,aAAA,CAAW,CAAA,CACtCnF,GAAAA,CAACuQ,EAAAA,CAAA,CACC,EAAA,CAAG,WAAA,CACH,WAAA,CAAY,qBAAA,CACZ,MAAOe,CAAAA,CACP,QAAA,CAAWlQ,CAAAA,EAAMioB,CAAAA,CAAejoB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,IAAA,CAAM,CAAA,CACR,CAAA,CAAA,CACF,CAAA,CAEArB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACmF,CAAAA,CAAA,CAAM,QAAA,CAAA,UAAA,CAAQ,CAAA,CACfnF,GAAAA,CAACuG,EAAAA,CAAA,CACC,OAAA,CAAS,CACP,CAAE,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAM,CAAA,CAC7B,CAAE,KAAA,CAAO,QAAA,CAAU,KAAA,CAAO,QAAS,CAAA,CACnC,CAAE,KAAA,CAAO,MAAA,CAAQ,KAAA,CAAO,MAAO,EAC/B,CAAE,KAAA,CAAO,QAAA,CAAU,KAAA,CAAO,QAAS,CACrC,CAAA,CACA,KAAA,CAAOge,CAAAA,CACP,QAAA,CAAWvU,CAAAA,EAAQsZ,CAAAA,CAAYtZ,CAAU,CAAA,CAC3C,CAAA,CAAA,CACF,CAAA,CAEAjQ,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACmF,CAAAA,CAAA,CAAM,QAAA,CAAA,MAAA,CAAI,CAAA,CACXpF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACsF,EAAAA,CAAA,CACC,WAAA,CAAY,YAAA,CACZ,KAAA,CAAOmkB,CAAAA,CACP,QAAA,CAAWroB,CAAAA,EAAMsoB,CAAAA,CAAYtoB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC3C,SAAA,CAAYA,CAAAA,EAAMA,CAAAA,CAAE,GAAA,GAAQ,UAAYA,CAAAA,CAAE,cAAA,EAAe,CAAGwoB,CAAAA,EAAO,CAAA,CACrE,CAAA,CACA5pB,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,OAAA,CAASopB,CAAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,QAAA,CAAA,KAAA,CAAG,CAAA,CAAA,CAC9D,CAAA,CACA5pB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CACZ,QAAA,CAAAupB,CAAAA,CAAK,GAAA,CAAI3E,CAAAA,EACR7kB,IAAAA,CAAC,MAAA,CAAA,CAAe,SAAA,CAAU,4GAAA,CACvB,QAAA,CAAA,CAAA6kB,CAAAA,CACD5kB,IAAC0V,CAAAA,CAAA,CAAE,IAAA,CAAM,EAAA,CAAI,SAAA,CAAU,iCAAA,CAAkC,OAAA,CAAS,IAAMmU,CAAAA,CAAUjF,CAAG,CAAA,CAAG,CAAA,CAAA,CAAA,CAF/EA,CAGX,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEA7kB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACmF,CAAAA,CAAA,CAAM,QAAA,CAAA,aAAA,CAAW,CAAA,CAClBnF,GAAAA,CAAC6nB,EAAAA,CAAA,CACC,MAAA,CAASM,GAAkB,OAAA,CAAQ,GAAA,CAAI,iBAAA,CAAmBA,CAAK,CAAA,CAC/D,SAAA,CAAU,+CAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEApoB,IAAAA,CAACgY,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA/X,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAASkX,CAAAA,CAAS,QAAA,CAAA,QAAA,CAAM,CAAA,CAChD1X,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,OAAA,CAASmpB,CAAAA,CAAY,QAAA,CAAU,CAACllB,CAAAA,CAAM,MAAK,CAClE,QAAA,CAAAsc,CAAAA,CAAO,cAAA,CAAiB,aAAA,CAC3B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC5HO,SAASgJ,GAAgB,CAC9B,cAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CAAkB,EAAC,CACnB,UAAA,CAAAC,CAAAA,CAAa,EAAC,CACd,eAAA,CAAAC,CAAAA,CAAkB,EAAC,CACnB,SAAA,CAAA1qB,CACF,CAAA,CAAyB,CACvB,GAAM,CAAC8K,CAAAA,CAAQyU,CAAS,CAAA,CAAIrb,QAAAA,CAAS,EAAE,CAAA,CACjC,CAACymB,CAAAA,CAAeC,CAAgB,EAAI1mB,QAAAA,CAAmC,EAAE,CAAA,CAEzE2mB,CAAAA,CAAe,CAACC,CAAAA,CAAkBvoB,CAAAA,GAAkB,CACxD,IAAMwoB,CAAAA,CAAUJ,CAAAA,CAAcG,CAAQ,CAAA,EAAK,EAAC,CACtCxf,CAAAA,CAAOyf,CAAAA,CAAQ,QAAA,CAASxoB,CAAK,CAAA,CAC/BwoB,CAAAA,CAAQ,MAAA,CAAOhX,CAAAA,EAAKA,CAAAA,GAAMxR,CAAK,CAAA,CAC/B,CAAC,GAAGwoB,CAAAA,CAASxoB,CAAK,CAAA,CAEhByoB,EAAa,CAAE,GAAGL,CAAAA,CAAe,CAACG,CAAQ,EAAGxf,CAAK,CAAA,CACpDA,CAAAA,CAAK,MAAA,GAAW,CAAA,EAAG,OAAO0f,CAAAA,CAAWF,CAAQ,CAAA,CAEjDF,CAAAA,CAAiBI,CAAU,CAAA,CAC3BT,CAAAA,GAAiBS,CAAU,EAC7B,CAAA,CAEMC,CAAAA,CAAe,IAAM,CACzBL,CAAAA,CAAiB,EAAE,CAAA,CACnBL,CAAAA,GAAiB,EAAE,EACrB,EAEMW,CAAAA,CAAc,MAAA,CAAO,MAAA,CAAOP,CAAa,CAAA,CAAE,IAAA,EAAK,CAAE,MAAA,CAExD,OACEtqB,IAAAA,CAAC8U,CAAAA,CAAA,CAAQ,SAAA,CAAW1V,CAAAA,CAAG,uCAAA,CAAyCO,CAAS,CAAA,CACvE,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC6Z,MAAAA,CAAA,CAAO,SAAA,CAAU,gEAAA,CAAiE,CAAA,CACnF7Z,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,OACL,WAAA,CAAY,iBAAA,CACZ,SAAA,CAAU,mLAAA,CACV,KAAA,CAAOwK,CAAAA,CACP,QAAA,CAAWpJ,CAAAA,EAAM,CACf6d,CAAAA,CAAU7d,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxB4oB,CAAAA,GAAiB5oB,CAAAA,CAAE,MAAA,CAAO,KAAK,EACjC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEArB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CAEb,QAAA,CAAA,CAAAC,GAAAA,CAAC6qB,EAAAA,CAAA,CACC,KAAA,CAAM,UAAA,CACN,QAASX,CAAAA,CACT,QAAA,CAAUG,CAAAA,CAAc,QAAA,EAAe,EAAC,CACxC,QAAA,CAAWra,CAAAA,EAAQua,CAAAA,CAAa,UAAA,CAAYva,CAAG,CAAA,CACjD,CAAA,CAGAhQ,GAAAA,CAAC6qB,EAAAA,CAAA,CACC,KAAA,CAAM,MAAA,CACN,OAAA,CAASV,CAAAA,CACT,QAAA,CAAUE,CAAAA,CAAc,IAAA,EAAW,EAAC,CACpC,QAAA,CAAWra,CAAAA,EAAQua,CAAAA,CAAa,MAAA,CAAQva,CAAG,CAAA,CAC7C,CAAA,CAEC4a,EAAc,CAAA,EACb7qB,IAAAA,CAACS,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,OAAA,CAASmqB,CAAAA,CACT,SAAA,CAAU,uDAAA,CAEV,QAAA,CAAA,CAAA3qB,GAAAA,CAAC0V,CAAAA,CAAA,CAAE,UAAU,aAAA,CAAc,CAAA,CAAE,gBAAA,CAC7B1V,GAAAA,CAAC0d,EAAAA,CAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,sCAAA,CAChC,QAAA,CAAAkN,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CAEA,SAASC,EAAAA,CAAc,CAAE,KAAA,CAAArlB,CAAAA,CAAO,OAAA,CAAA/B,CAAAA,CAAS,QAAA,CAAAkL,CAAAA,CAAU,QAAA,CAAAmc,CAAS,CAAA,CAKzD,CACD,OACE/qB,IAAAA,CAACuJ,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAvJ,IAAAA,CAAC6J,EAAAA,CAAA,CACC,SAAA,CAAWzK,CAAAA,CACT,mGAAA,CACAwP,CAAAA,CAAS,MAAA,CAAS,CAAA,CAAI,iDAAA,CAAoD,eAC5E,CAAA,CAEA,QAAA,CAAA,CAAA3O,GAAAA,CAAC+qB,OAAA,CAAO,SAAA,CAAU,aAAA,CAAc,CAAA,CAC/BvlB,CAAAA,CACAmJ,CAAAA,CAAS,MAAA,CAAS,CAAA,EACjB3O,GAAAA,CAAC0d,EAAAA,CAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,SAAA,CAAU,0DAAA,CAC7B,QAAA,CAAA/O,CAAAA,CAAS,MAAA,CACZ,CAAA,CAEF3O,GAAAA,CAAC6T,WAAAA,CAAA,CAAY,SAAA,CAAU,wBAAA,CAAyB,CAAA,CAAA,CAClD,CAAA,CACA7T,GAAAA,CAAC+J,EAAAA,CAAA,CAAe,SAAA,CAAU,kDAAA,CACxB,QAAA,CAAAhK,KAAC2Z,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA1Z,GAAAA,CAAC4Z,EAAAA,CAAA,CAAa,WAAA,CAAa,CAAA,OAAA,EAAUpU,CAAK,CAAA,GAAA,CAAA,CAAO,CAAA,CACjDxF,GAAAA,CAAC8Z,EAAAA,CAAA,CACC,QAAA,CAAA9Z,GAAAA,CAACga,EAAAA,CAAA,CACE,QAAA,CAAAvW,CAAAA,CAAQ,GAAA,CAAI4D,CAAAA,EACXtH,IAAAA,CAACma,EAAAA,CAAA,CAEC,KAAA,CAAO7S,CAAAA,CAAI,KAAA,CACX,QAAA,CAAU,IAAMyjB,CAAAA,CAASzjB,CAAAA,CAAI,KAAK,CAAA,CAClC,SAAA,CAAU,mCAAA,CAEV,QAAA,CAAA,CAAArH,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAqH,CAAAA,CAAI,KAAA,CAAM,CAAA,CAChBsH,CAAAA,CAAS,QAAA,CAAStH,CAAAA,CAAI,KAAK,CAAA,EAAKrH,GAAAA,CAACgrB,MAAA,CAAM,SAAA,CAAU,2BAAA,CAA4B,CAAA,CAAA,CAAA,CANzE3jB,CAAAA,CAAI,KAOX,CACD,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCvIO,SAAS4jB,EAAAA,CAAmB,CACjC,KAAA,CAAAhL,CAAAA,CACA,WAAA,CAAA+D,CAAAA,CACA,SAAA,CAAAkH,CAAAA,CACA,SAAA,CAAAxrB,CACF,CAAA,CAA4B,CAC1B,GAAM,CAAC6N,CAAAA,CAAaC,CAAc,EAAI5J,QAAAA,CAAS,IAAI,IAAM,CAAA,CAEnD2K,CAAAA,CAAc,CAACX,CAAAA,CAAcC,CAAAA,GAAkB,IAAI,IAAA,CAAKD,CAAAA,CAAMC,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAA,CAAE,OAAA,EAAQ,CACpFsd,CAAAA,CAAkB,CAACvd,CAAAA,CAAcC,CAAAA,GAAkB,IAAI,IAAA,CAAKD,CAAAA,CAAMC,CAAAA,CAAO,CAAC,CAAA,CAAE,MAAA,EAAO,CAEnFD,CAAAA,CAAOL,CAAAA,CAAY,WAAA,GACnBM,CAAAA,CAAQN,CAAAA,CAAY,QAAA,EAAS,CAC7B6d,CAAAA,CAAY7c,CAAAA,CAAYX,CAAAA,CAAMC,CAAK,CAAA,CACnCwd,CAAAA,CAAWF,CAAAA,CAAgBvd,CAAAA,CAAMC,CAAK,CAAA,CAEtCyd,CAAAA,CAAY,IAAM9d,CAAAA,CAAe,IAAI,IAAA,CAAKI,CAAAA,CAAMC,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAC,CAAA,CAC7D0d,CAAAA,CAAY,IAAM/d,CAAAA,CAAe,IAAI,IAAA,CAAKI,CAAAA,CAAMC,CAAAA,CAAQ,EAAG,CAAC,CAAC,CAAA,CAE7D2d,CAAAA,CAAa,CACjB,SAAA,CAAW,UAAA,CAAY,OAAA,CAAS,OAAA,CAAS,KAAA,CAAO,MAAA,CAChD,MAAA,CAAQ,QAAA,CAAU,WAAA,CAAa,SAAA,CAAW,UAAA,CAAY,UACxD,CAAA,CAEM/c,CAAAA,CAAO,EAAC,CAEd,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI2c,CAAAA,CAAU3c,CAAAA,EAAAA,CAC5BD,CAAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAGhB,IAAA,IAASC,CAAAA,CAAI,EAAGA,CAAAA,EAAK0c,CAAAA,CAAW1c,CAAAA,EAAAA,CAC9BD,CAAAA,CAAK,IAAA,CAAK,IAAI,IAAA,CAAKb,CAAAA,CAAMC,CAAAA,CAAOa,CAAC,CAAC,CAAA,CAGpC,IAAM+c,CAAAA,CAAmB1c,CAAAA,EAChBkR,CAAAA,CAAM,MAAA,CAAOc,CAAAA,EAAQ,CAC1B,GAAI,CAACA,CAAAA,CAAK,OAAA,CAAS,OAAO,MAAA,CAG1B,IAAM2K,CAAAA,CAAW,IAAI,IAAA,CAAK3K,CAAAA,CAAK,OAAO,CAAA,CACtC,GAAI,KAAA,CAAM2K,CAAAA,CAAS,OAAA,EAAS,CAAA,CAAG,CAE7B,IAAMC,CAAAA,CAAc,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CACrCzc,CAAAA,CAAI,IAAI,IAAA,CAAK,CAAA,EAAG6R,CAAAA,CAAK,OAAO,CAAA,CAAA,EAAI4K,CAAW,CAAA,CAAE,CAAA,CACnD,OAAOzc,CAAAA,CAAE,OAAA,EAAQ,GAAMH,CAAAA,CAAK,OAAA,EAAQ,EAC7BG,CAAAA,CAAE,QAAA,KAAeH,CAAAA,CAAK,QAAA,EAAS,EAC/BG,CAAAA,CAAE,WAAA,EAAY,GAAMH,CAAAA,CAAK,WAAA,EAClC,CACA,OAAO2c,CAAAA,CAAS,OAAA,EAAQ,GAAM3c,CAAAA,CAAK,OAAA,EAAQ,EACpC2c,CAAAA,CAAS,QAAA,EAAS,GAAM3c,CAAAA,CAAK,QAAA,EAAS,EACtC2c,CAAAA,CAAS,WAAA,EAAY,GAAM3c,CAAAA,CAAK,WAAA,EACzC,CAAC,CAAA,CAGH,OACEhP,KAAC8U,CAAAA,CAAA,CAAQ,SAAA,CAAW1V,CAAAA,CAAG,yCAAA,CAA2CO,CAAS,CAAA,CAEzE,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gEAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACb,QAAA,CAAA,CAAAA,IAAAA,CAAC0C,CAAAA,CAAA,CAAK,SAAA,CAAU,8BAAA,CAAgC,QAAA,CAAA,CAAA+oB,CAAAA,CAAW3d,CAAK,CAAA,CAAE,GAAA,CAAED,CAAAA,CAAAA,CAAK,CAAA,CACzE5N,GAAAA,CAACyC,CAAAA,CAAA,CAAK,UAAU,2DAAA,CAA4D,QAAA,CAAA,kBAAA,CAAgB,CAAA,CAAA,CAC9F,CAAA,CACA1C,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,OAAA,CAAS8qB,CAAAA,CAC3C,QAAA,CAAAtrB,GAAAA,CAAC4O,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,CAAA,CACnC,CAAA,CACA5O,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,KAAK,OAAA,CAAS,IAAMgN,CAAAA,CAAe,IAAI,IAAM,CAAA,CAAG,QAAA,CAAA,OAAA,CAE/E,CAAA,CACAxN,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,OAAA,CAAS+qB,CAAAA,CAC3C,QAAA,CAAAvrB,GAAAA,CAAC6O,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CACpC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGA7O,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2DAAA,CACZ,QAAA,CAAA,CAAC,MAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAK,CAAA,CAAE,GAAA,CAAIkO,CAAAA,EACrDlO,GAAAA,CAAC,KAAA,CAAA,CAAc,SAAA,CAAU,kBAAA,CACvB,QAAA,CAAAA,GAAAA,CAACyC,CAAAA,CAAA,CAAK,SAAA,CAAU,0DAAA,CAA4D,QAAA,CAAAyL,CAAAA,CAAI,CAAA,CAAA,CADxEA,CAEV,CACD,CAAA,CACH,CAAA,CAGAlO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sDAAA,CACZ,QAAA,CAAAyO,CAAAA,CAAK,IAAI,CAACM,CAAAA,CAAML,CAAAA,GAAM,CACrB,GAAI,CAACK,CAAAA,CAAM,OAAO/O,GAAAA,CAAC,KAAA,CAAA,CAAuB,SAAA,CAAU,kDAAA,CAAA,CAAxB,CAAA,MAAA,EAAS0O,CAAC,CAAA,CAAiE,CAAA,CAEvG,IAAMkd,CAAAA,CAAYH,CAAAA,CAAgB1c,CAAI,CAAA,CAChCX,CAAAA,CAAU,IAAI,IAAA,EAAK,CAAE,YAAA,EAAa,GAAMW,CAAAA,CAAK,YAAA,EAAa,CAEhE,OACEhP,IAAAA,CAAC,KAAA,CAAA,CAEC,UAAWZ,CAAAA,CACT,4GAAA,CACAiP,CAAAA,EAAW,oBACb,CAAA,CAEA,QAAA,CAAA,CAAArO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CACf,6FAAA,CACAiP,CAAAA,CAAU,wBAAA,CAA2B,sCACvC,CAAA,CACG,QAAA,CAAAW,CAAAA,CAAK,OAAA,EAAQ,CAChB,CAAA,CACA/O,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMkrB,CAAAA,GAAYnc,CAAI,CAAA,CAC/B,UAAU,sHAAA,CAEV,QAAA,CAAA/O,GAAAA,CAACkmB,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CAC5B,CAAA,CAAA,CACF,CAAA,CAEAlmB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAA4rB,CAAAA,CAAU,GAAA,CAAI7K,CAAAA,EACb/gB,GAAAA,CAAC,KAAA,CAAA,CAEC,OAAA,CAAS,IAAMgkB,CAAAA,GAAcjD,CAAI,CAAA,CACjC,SAAA,CAAW5hB,CAAAA,CACT,gFAAA,CACA4hB,CAAAA,CAAK,QAAA,GAAa,QAAA,CAAW,8CAAA,CAC7BA,EAAK,QAAA,GAAa,MAAA,CAAS,uDAAA,CAC3BA,CAAAA,CAAK,QAAA,GAAa,QAAA,CAAW,iDAAA,CAC7B,iDACF,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAK,KAAA,CAAA,CAVDA,CAAAA,CAAK,EAWZ,CACD,CAAA,CACH,CAAA,CAAA,CAAA,CArCKhS,CAAAA,CAAK,WAAA,EAsCZ,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,KCrJa8c,EAAAA,CAAOrsB,WAAAA,CAAM,UAAA,CAGxB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC6U,CAAAA,CAAA,CACC,GAAA,CAAK/U,CAAAA,CACL,UAAWJ,CAAAA,CACV,GAAGG,CAAAA,CACN,CACD,EACDgsB,EAAAA,CAAK,WAAA,CAAc,MAAA,CAEZ,IAAMC,EAAAA,CAAatsB,WAAAA,CAAM,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,+BAAA,CAAiCO,CAAS,CAAA,CACvD,GAAGG,CAAAA,CACN,CACD,EACDisB,EAAAA,CAAW,WAAA,CAAc,YAAA,CAElB,IAAMC,EAAAA,CAAYvsB,WAAAA,CAAM,UAAA,CAG7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,MACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,oDAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CACD,EACDksB,EAAAA,CAAU,WAAA,CAAc,WAAA,CAEjB,IAAMC,EAAAA,CAAkBxsB,WAAAA,CAAM,UAAA,CAGnC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,2CAA4CO,CAAS,CAAA,CAClE,GAAGG,CAAAA,CACN,CACD,EACDmsB,EAAAA,CAAgB,WAAA,CAAc,iBAAA,CAEvB,IAAMC,EAAAA,CAAczsB,WAAAA,CAAM,UAAA,CAG/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,UAAA,CAAYO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CACjE,EACDosB,EAAAA,CAAY,WAAA,CAAc,aAAA,CAEnB,IAAMC,EAAAA,CAAa1sB,WAAAA,CAAM,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,IAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,4BAAA,CAA8BO,CAAS,CAAA,CACpD,GAAGG,CAAAA,CACN,CACD,EACDqsB,EAAAA,CAAW,WAAA,CAAc,YAAA,CChElB,IAAMC,EAAAA,CAAQ3sB,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,kBAAA,CAAA6F,CAAAA,CAAoB,GAAA,CAAA0N,CAAAA,CAAK,GAAA,CAAAD,CAAAA,CAAK,QAAA,CAAAE,CAAAA,CAAU,MAAA,CAAAkZ,CAAAA,CAAQ,OAAA,CAAAC,CAAAA,CAAS,GAAGxsB,CAAM,EAAGC,CAAAA,GAAQ,CACzF,GAAM,CAACgB,CAAAA,CAAWwrB,CAAY,CAAA,CAAI1oB,QAAAA,CAAS,IAAI,CAAA,CACzC,CAACgC,CAAAA,CAAU2mB,CAAW,CAAA,CAAI3oB,QAAAA,CAAS,KAAK,CAAA,CAExC4oB,CAAAA,CAAcprB,CAAAA,EAAqD,CACvEkrB,CAAAA,CAAa,KAAK,CAAA,CAClBF,CAAAA,GAAShrB,CAAC,EACZ,CAAA,CAEMqrB,CAAAA,CAAerrB,CAAAA,EAAqD,CACxEkrB,CAAAA,CAAa,KAAK,EAClBC,CAAAA,CAAY,IAAI,CAAA,CAChBF,CAAAA,GAAUjrB,CAAC,EACb,CAAA,CAEA,OAAIwE,CAAAA,EAAYsN,CAAAA,CACPlT,GAAAA,CAAAqkB,QAAAA,CAAA,CAAG,QAAA,CAAAnR,CAAAA,CAAS,CAAA,CAInBnT,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,mHAAA,CAAqHoG,CAAkB,CAAA,CACvJ,QAAA,CAAA,CAAAzE,CAAAA,EACEd,GAAAA,CAACge,EAAAA,CAAA,CAAS,SAAA,CAAU,gCAAA,CAAiC,CAAA,CAExDhe,GAAAA,CAAC,OACC,GAAA,CAAKF,CAAAA,CACL,GAAA,CAAKkT,CAAAA,CACL,GAAA,CAAKC,CAAAA,CACL,MAAA,CAAQuZ,CAAAA,CACR,OAAA,CAASC,CAAAA,CACT,SAAA,CAAWttB,CAAAA,CACT,4DAAA,CACA2B,CAAAA,CAAY,WAAA,CAAc,aAAA,CAC1BpB,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAAA,CAAA,CACF,CAEJ,CACF,EACAssB,EAAAA,CAAM,WAAA,CAAc,OAAA,KC5CPO,EAAAA,CAAYltB,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,IAAA,CAAAgB,CAAAA,CAAO,IAAA,CAAM,GAAGb,CAAM,CAAA,CAAGC,CAAAA,GAUnCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,qBAAA,CAXJ,CACZ,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,IAAA,CAAM,YACR,EAK+CuB,CAAI,CAAA,CAAGhB,CAAS,CAAA,CAC1D,GAAGG,CAAAA,CACN,CAGN,EACA6sB,EAAAA,CAAU,WAAA,CAAc,WAAA,CCfjB,IAAMC,EAAAA,CAAQntB,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,SAAA,CAAAwD,CAAAA,CAAY,KAAA,CAAO,GAAA,CAAA0pB,CAAAA,CAAM,CAAA,CAAG,KAAA,CAAA1kB,EAAO,OAAA,CAAA2kB,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,GAAGltB,CAAM,CAAA,CAAGC,CAAAA,GAE/EE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,MAAA,CACA,CACE,UAAA,CAAY+D,CAAAA,GAAc,KAAA,CAC1B,UAAA,CAAYA,CAAAA,GAAc,KAAA,CAC1B,kBAAA,CAAoBA,CAAAA,GAAc,aAAA,CAClC,kBAAA,CAAoBA,CAAAA,GAAc,aAAA,CAClC,WAAA,CAAa4pB,CAAAA,CACb,cAAe5kB,CAAAA,GAAU,OAAA,CACzB,WAAA,CAAaA,CAAAA,GAAU,KAAA,CACvB,cAAA,CAAgBA,CAAAA,GAAU,QAAA,CAC1B,gBAAA,CAAkBA,CAAAA,GAAU,UAAA,CAC5B,eAAA,CAAiBA,CAAAA,GAAU,SAAA,CAC3B,eAAA,CAAiB2kB,CAAAA,GAAY,QAC7B,aAAA,CAAeA,CAAAA,GAAY,KAAA,CAC3B,gBAAA,CAAkBA,CAAAA,GAAY,QAAA,CAC9B,iBAAA,CAAmBA,CAAAA,GAAY,SAAA,CAC/B,gBAAA,CAAkBA,CAAAA,GAAY,QAAA,CAC9B,gBAAA,CAAkBA,CAAAA,GAAY,QAChC,CAAA,CACAntB,CACF,CAAA,CACA,KAAA,CAAO,CACH,GAAA,CAAK,OAAOktB,CAAAA,EAAQ,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAM,GAAI,CAAA,GAAA,CAAA,CAAQA,CAAAA,CACpD,GAAGG,CACP,CAAA,CACC,GAAGltB,CAAAA,CACN,CAGN,EACA8sB,EAAAA,CAAM,WAAA,CAAc,OAAA,CCnCb,IAAMK,EAAAA,CAAOxtB,WAAAA,CAAM,UAAA,CACxB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,IAAA,CAAAutB,CAAAA,CAAO,CAAA,CAAG,EAAA,CAAAC,CAAAA,CAAI,EAAA,CAAAC,CAAAA,CAAI,EAAA,CAAAC,CAAAA,CAAI,EAAA,CAAAC,CAAAA,CAAI,GAAA,CAAAT,CAAAA,CAAM,CAAA,CAAG,KAAA,CAAAG,CAAAA,CAAO,GAAGltB,CAAM,CAAA,CAAGC,CAAAA,GAEhEE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,MAAA,CACA+tB,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,CAAA,CAAA,CACxBC,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,CAAA,CAAA,CACxBC,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,CAAA,CAAA,CACxBC,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,CAAA,CAAA,CACxB3tB,CACF,CAAA,CACA,KAAA,CAAO,CACH,mBAAA,CAAqButB,CAAAA,CAAO,CAAA,OAAA,EAAUA,CAAI,CAAA,iBAAA,CAAA,CAAsB,MAAA,CAChE,GAAA,CAAK,OAAOL,CAAAA,EAAQ,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAM,GAAI,CAAA,GAAA,CAAA,CAAQA,CAAAA,CACpD,GAAGG,CACP,CAAA,CACC,GAAGltB,CAAAA,CACN,CAGN,EACAmtB,EAAAA,CAAK,WAAA,CAAc,MAAA,CCWZ,IAAMM,EAAAA,CAAa9tB,WAAAA,CAAM,UAAA,CAC9B,CAAC,CACC,OAAA,CAAAiB,CAAAA,CAAU,MAAA,CACV,KAAA,CAAA8sB,CAAAA,CAAQ,KAAA,CACR,YAAA,CAAAC,CAAAA,CACA,IAAA,CAAA9sB,CAAAA,CAAO,GACP,IAAA,CAAA+sB,CAAAA,CAAO,MAAA,CACP,OAAA,CAAAtqB,CAAAA,CAAU,KAAA,CACV,WAAA,CAAAuqB,CAAAA,CAAc,KAAA,CACd,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAjuB,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,KAAA,CAAAstB,CAAAA,CACA,GAAGltB,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,IAAMmH,CAAAA,CAAezH,WAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA,CAEtDA,WAAAA,CAAM,SAAA,CAAU,IAAM,CACpB,GAAI,CAACkuB,CAAAA,CAAa,OAElB,IAAM/gB,CAAAA,CAAmBvL,CAAAA,EAAkB,CACzC,IAAMC,CAAAA,CAAK4F,CAAAA,CAAa,OAAA,CACxB,GAAI,CAAC5F,CAAAA,CAAI,OACT,IAAMC,CAAAA,CAAOD,CAAAA,CAAG,qBAAA,EAAsB,CAChCE,CAAAA,CAAIH,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,IAAA,CACrBE,CAAAA,CAAIJ,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BD,CAAAA,CAAG,KAAA,CAAM,YAAY,WAAA,CAAa,CAAA,EAAGE,CAAC,CAAA,EAAA,CAAI,CAAA,CAC1CF,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,WAAA,CAAa,CAAA,EAAGG,CAAC,CAAA,EAAA,CAAI,EAC5C,CAAA,CAEA,OAAA,MAAA,CAAO,gBAAA,CAAiB,WAAA,CAAamL,CAAe,CAAA,CAC7C,IAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,CAAaA,CAAe,CACtE,CAAA,CAAG,CAAC+gB,CAAW,CAAC,CAAA,CAEhB,IAAME,CAAAA,CAAqB,IAA2B,CACpD,IAAMC,CAAAA,CAAiC,EAAC,CAGlCC,CAAAA,CAAiBN,CAAAA,EAAgB,8CAAA,CAEvC,OAAI/sB,CAAAA,GAAY,MAAA,CACP,CACL,GAAGotB,CAAAA,CACH,eAAA,CAAiB,CAAA,gBAAA,EAAmBC,CAAc,CAAA,sBAAA,CAAA,CAClD,cAAA,CAAgB,CAAA,EAAGptB,CAAI,CAAA,GAAA,EAAMA,CAAI,CAAA,EAAA,CAAA,CACjC,SAAA,CAAWgtB,CAAAA,CAAc,8FAAA,CAAiG,MAC5H,CAAA,CAEEjtB,CAAAA,GAAY,MAAA,CACP,CACL,GAAGotB,EACH,eAAA,CAAiB;AAAA,sCAAA,EACaC,CAAc,CAAA;AAAA,uCAAA,EACbA,CAAc,CAAA;AAAA,UAAA,CAAA,CAE7C,cAAA,CAAgB,CAAA,EAAGptB,CAAI,CAAA,GAAA,EAAMA,CAAI,CAAA,EAAA,CAAA,CACjC,SAAA,CAAWgtB,CAAAA,CAAc,8FAAA,CAAiG,MAC5H,CAAA,CAEEjtB,CAAAA,GAAY,UAAA,CACP,CACL,GAAGotB,CAAAA,CACH,UAAA,CAAYH,CAAAA,CACR,CAAA,yEAAA,EAA4EI,CAAc,CAAA,cAAA,CAAA,CAC1F,CAAA,kCAAA,EAAqCA,CAAc,CAAA,cAAA,CACzD,CAAA,CAEErtB,CAAAA,GAAY,OAAA,CACP,CACL,GAAGotB,CAAAA,CACH,UAAA,CAAY,sCAAsCC,CAAc,CAAA,sBAAA,CAClE,CAAA,CAEKD,CACT,CAAA,CAEME,CAAAA,CAAiCN,CAAAA,GAAS,MAAA,CAAS,CACvD,SAAA,CAAW,4DAAA,CACX,eAAA,CAAiB,4DACnB,CAAA,CAAI,EAAC,CAEL,OACE1tB,KAAC,KAAA,CAAA,CACC,GAAA,CAAMM,CAAAA,EAAS,CACTA,CAAAA,GACD4G,CAAAA,CAAwD,OAAA,CAAU5G,CAAAA,CAAAA,CAEjE,OAAOP,CAAAA,EAAQ,UAAA,CAAYA,CAAAA,CAAIO,CAAI,EAC9BP,CAAAA,GAAMA,CAAAA,CAAsD,OAAA,CAAUO,CAAAA,EACjF,EACA,SAAA,CAAWlB,CAAAA,CACT,iGAAA,CACA,KAAA,CACA,kFAAA,CACAwuB,CAAAA,EAAS,UAAA,CAAW,KAAK,EAAIA,CAAAA,CAAU,EAAA,CACvCjuB,CACF,CAAA,CACA,KAAA,CAAO,CACL,GAAGkuB,CAAAA,GACH,GAAGG,CAAAA,CACH,GAAGhB,CAAAA,CACH,eAAA,CAAiBY,CAAAA,EAAW,CAACA,CAAAA,CAAQ,WAAW,KAAK,CAAA,CAAIA,CAAAA,CAAU,MACrE,EACC,GAAG9tB,CAAAA,CAEH,QAAA,CAAA,CAAA0tB,CAAAA,EACCvtB,IAAC,KAAA,CAAA,CACC,SAAA,CAAU,iFAAA,CACV,KAAA,CAAO,CAAE,eAAA,CAAiB,CAAA,uTAAA,CAA0T,CAAA,CACtV,EAGDS,CAAAA,GAAY,OAAA,EACXV,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAI,SAAA,CAAU,mGAAA,CAAoG,CAAA,CACnHA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oGAAA,CAAqG,CAAA,CAAA,CACtH,EAGDS,CAAAA,GAAY,MAAA,EACXV,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CACd,0CAAA,CACAgE,CAAAA,EAAW,eACb,EACE,QAAA,CAAA,CAAAnD,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6EAAA,CAA8E,CAAA,CAC7FA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mFAAA,CAAoF,CAAA,CACnGA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8EAAA,CAA+E,CAAA,CAAA,CAChG,CAAA,CAEDP,GACH,CAEJ,CACF,EAEA6tB,EAAAA,CAAW,WAAA,CAAc,YAAA,CCtKzB,IAAMU,EAAAA,CAAmC,CACvC,KAAA,CAAO,QAAA,CACP,QAAA,CAAU,IAAM,IAClB,CAAA,CAEMC,EAAAA,CAAuB5kB,aAAAA,CAAkC2kB,EAAY,CAAA,CAEpE,SAASE,EAAAA,CAAc,CAC5B,SAAAzuB,CAAAA,CACA,YAAA,CAAA0uB,CAAAA,CAAe,QAAA,CACf,UAAA,CAAAC,CAAAA,CAAa,eAAA,CACb,GAAGvuB,CACL,CAAA,CAAuB,CACrB,GAAM,CAACwuB,EAAOC,CAAQ,CAAA,CAAI1qB,QAAAA,CACxB,IAAO,aAAa,OAAA,CAAQwqB,CAAU,CAAA,EAAeD,CACvD,CAAA,CAEAnqB,SAAAA,CAAU,IAAM,CACd,IAAMmX,CAAAA,CAAO,MAAA,CAAO,QAAA,CAAS,eAAA,CAI7B,GAFAA,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAS,MAAM,CAAA,CAEjCkT,CAAAA,GAAU,QAAA,CAAU,CACtB,IAAME,CAAAA,CAAa,MAAA,CAAO,WAAW,8BAA8B,CAAA,CAE7DC,CAAAA,CAAmB,IAAM,CAC7BrT,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAA,CAAS,MAAM,CAAA,CACrCA,CAAAA,CAAK,SAAA,CAAU,GAAA,CAAIoT,CAAAA,CAAW,OAAA,CAAU,MAAA,CAAS,OAAO,EAC1D,CAAA,CAEA,OAAAC,CAAAA,EAAiB,CAEjBD,CAAAA,CAAW,gBAAA,CAAiB,QAAA,CAAUC,CAAgB,EAC/C,IAAMD,CAAAA,CAAW,mBAAA,CAAoB,QAAA,CAAUC,CAAgB,CACxE,CAEArT,CAAAA,CAAK,UAAU,GAAA,CAAIkT,CAAK,EAC1B,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAMpsB,EAAQ,CACZ,KAAA,CAAAosB,CAAAA,CACA,QAAA,CAAWA,CAAAA,EAAiB,CAC1B,YAAA,CAAa,OAAA,CAAQD,EAAYC,CAAK,CAAA,CACtCC,CAAAA,CAASD,CAAK,EAChB,CACF,CAAA,CAEA,OACEruB,IAACiuB,EAAAA,CAAqB,QAAA,CAArB,CAA+B,GAAGpuB,CAAAA,CAAO,KAAA,CAAOoC,CAAAA,CAC9C,QAAA,CAAAxC,EACH,CAEJ,CAEO,IAAMgvB,EAAAA,CAAW,IAAM,CAC5B,IAAM5kB,CAAAA,CAAUC,WAAWmkB,EAAoB,CAAA,CAE/C,GAAIpkB,CAAAA,GAAY,MAAA,CACd,MAAM,IAAI,KAAA,CAAM,8CAA8C,CAAA,CAEhE,OAAOA,CACT,ECvEO,SAAS6kB,IAAc,CAC5B,GAAM,CAAE,QAAA,CAAAJ,EAAU,KAAA,CAAAD,CAAM,CAAA,CAAII,EAAAA,GAE5B,OACE1uB,IAAAA,CAACS,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,QAAS,IAAM8tB,CAAAA,CAASD,CAAAA,GAAU,OAAA,CAAU,MAAA,CAAS,OAAO,CAAA,CAE5D,QAAA,CAAA,CAAAruB,IAAC2uB,GAAAA,CAAA,CAAI,SAAA,CAAU,sFAAA,CAAuF,CAAA,CACtG3uB,GAAAA,CAAC4uB,IAAAA,CAAA,CAAK,UAAU,8FAAA,CAA+F,CAAA,CAC/G5uB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,SAAA,CAAU,QAAA,CAAA,cAAA,CAAY,CAAA,CAAA,CACxC,CAEJ,CCCA,IAAM6uB,GAAexlB,aAAAA,CAAkD,MAAS,CAAA,CAEzE,SAASylB,EAAAA,EAAoB,CAClC,IAAMjlB,CAAAA,CAAUC,WAAW+kB,EAAY,CAAA,CACvC,GAAI,CAAChlB,EAAS,MAAM,IAAI,KAAA,CAAM,uDAAuD,EACrF,OAAOA,CACT,CAGO,SAASklB,EAAAA,CAAU9sB,CAAAA,CAAekK,CAAAA,CAAamR,CAAAA,CAAgB,CACpE,OAAInR,CAAAA,GAAQ,CAAA,CAAU,CAAA,CACdlK,CAAAA,CAAQkK,CAAAA,CAAOmR,CACzB,CAWO,SAAS0R,EAAAA,CAAwB,CACtC,IAAA,CAAA7c,CAAAA,CACA,MAAA,CAAAmL,CAAAA,CAAS,GAAA,CACT,OAAA,CAAAvU,EAAU,CAAE,GAAA,CAAK,EAAA,CAAI,KAAA,CAAO,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAM,EAAG,CAAA,CACrD,SAAA,CAAArJ,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAA2B,CACzB,GAAM,CAACovB,CAAAA,CAAcC,CAAe,CAAA,CAAItrB,QAAAA,CAAwB,IAAI,CAAA,CAC9D,CAACurB,CAAAA,CAAgBC,CAAiB,CAAA,CAAIxrB,QAAAA,CAAS,CAAC,CAAA,CAChDqD,CAAAA,CAAezH,WAAAA,CAAM,OAAuB,IAAI,CAAA,CAGtDA,WAAAA,CAAM,SAAA,CAAU,IAAM,CACpB,GAAI,CAACyH,CAAAA,CAAa,QAAS,OAC3B,IAAM/C,CAAAA,CAAW,IAAI,cAAA,CAAgBkZ,CAAAA,EAAY,CAC3CA,CAAAA,CAAQ,CAAC,CAAA,EACXgS,CAAAA,CAAkBhS,CAAAA,CAAQ,CAAC,CAAA,CAAE,WAAA,CAAY,KAAK,EAElD,CAAC,CAAA,CACD,OAAAlZ,CAAAA,CAAS,OAAA,CAAQ+C,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAM/C,EAAS,UAAA,EACxB,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMmrB,CAAAA,CAAWnkB,OAAAA,CAAQ,IAChB,IAAA,CAAK,GAAA,CAAI,GAAGiH,CAAAA,CAAK,GAAA,CAAKjD,CAAAA,EAAMA,CAAAA,CAAE,KAAK,CAAC,CAAA,CAAI,GAAA,CAC9C,CAACiD,CAAI,CAAC,CAAA,CAET,OACEnS,GAAAA,CAAC6uB,GAAa,QAAA,CAAb,CACC,KAAA,CAAO,CACL,KAAA,CAAOM,CAAAA,CACP,MAAA,CAAA7R,CAAAA,CACA,KAAAnL,CAAAA,CACA,QAAA,CAAAkd,CAAAA,CACA,OAAA,CAAAtmB,EACA,YAAA,CAAAkmB,CAAAA,CACA,eAAA,CAAAC,CACF,EAEA,QAAA,CAAAlvB,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKiH,CAAAA,CACL,SAAA,CAAW9H,CAAAA,CAAG,6BAAA,CAA+BO,CAAS,CAAA,CACtD,KAAA,CAAO,CAAE,MAAA,CAAA4d,CAAO,CAAA,CACf,GAAGzd,CAAAA,CAEH,SAAAsvB,CAAAA,CAAiB,CAAA,EAChBnvB,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,MAAA,CACN,MAAA,CAAO,MAAA,CACP,QAAS,CAAA,IAAA,EAAOmvB,CAAc,CAAA,CAAA,EAAI7R,CAAM,CAAA,CAAA,CACxC,SAAA,CAAU,kBAAA,CAET,QAAA,CAAA7d,EACH,CAAA,CAEJ,CAAA,CACF,CAEJ,CAEO,SAAS6vB,EAAAA,CAAU,CAAE,KAAA,CAAAC,EAAQ,CAAE,CAAA,CAAuB,CAC3D,GAAM,CAAE,KAAA,CAAA/iB,CAAAA,CAAO,MAAA,CAAA8Q,EAAQ,OAAA,CAAAvU,CAAQ,CAAA,CAAI+lB,EAAAA,EAAS,CACtCU,CAAAA,CAAclS,CAAAA,CAASvU,CAAAA,CAAQ,IAAMA,CAAAA,CAAQ,MAAA,CAEnD,OACE/I,GAAAA,CAAC,KAAE,SAAA,CAAU,iCAAA,CACV,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQuvB,CAAAA,CAAQ,CAAE,CAAC,CAAA,CAAE,GAAA,CAAI,CAACpkB,CAAAA,CAAG,IAAM,CAC/C,IAAM3J,CAAAA,CAAIuH,CAAAA,CAAQ,GAAA,CAAOymB,CAAAA,CAAcD,CAAAA,CAAS,CAAA,CAChD,OACEvvB,GAAAA,CAAC,MAAA,CAAA,CAEC,EAAA,CAAI+I,CAAAA,CAAQ,IAAA,CACZ,EAAA,CAAIvH,CAAAA,CACJ,EAAA,CAAIgL,EAAQzD,CAAAA,CAAQ,KAAA,CACpB,EAAA,CAAIvH,CAAAA,CACJ,OAAO,cAAA,CACP,WAAA,CAAa,CAAA,CACb,eAAA,CAAgB,OAPX,CAQP,CAEJ,CAAC,CAAA,CACH,CAEJ,CAEO,SAASiuB,EAAAA,EAAa,CAC3B,GAAM,CAAE,KAAA,CAAAjjB,CAAAA,CAAO,MAAA,CAAA8Q,CAAAA,CAAQ,OAAA,CAAAvU,CAAAA,CAAS,KAAAoJ,CAAK,CAAA,CAAI2c,EAAAA,EAAS,CAE5CY,CAAAA,CAAAA,CADaljB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,EAAQ,KAAA,EACnBoJ,CAAAA,CAAK,MAAA,CAEpC,OACEnS,IAAC,GAAA,CAAA,CACE,QAAA,CAAAmS,CAAAA,CAAK,GAAA,CAAI,CAACwd,CAAAA,CAAOjhB,CAAAA,GAAM,CACtB,IAAMnN,CAAAA,CAAIwH,CAAAA,CAAQ,IAAA,CAAO2mB,CAAAA,CAAYhhB,EAAIghB,CAAAA,CAAY,CAAA,CAC/CluB,CAAAA,CAAI8b,CAAAA,CAASvU,CAAAA,CAAQ,MAAA,CAAS,EAAA,CACpC,OACE/I,IAAC,MAAA,CAAA,CAEC,CAAA,CAAGuB,CAAAA,CACH,CAAA,CAAGC,CAAAA,CACH,UAAA,CAAW,QAAA,CACX,SAAA,CAAU,uDAET,QAAA,CAAAmuB,CAAAA,CAAM,KAAA,CAAA,CANFjhB,CAOP,CAEJ,CAAC,CAAA,CACH,CAEJ,CAEO,SAASkhB,EAAAA,CAAa,CAC3B,aAAA,CAAAC,CACF,CAAA,CAEG,CACD,GAAM,CAAE,YAAA,CAAAZ,CAAAA,CAAc,IAAA,CAAA9c,CAAAA,CAAM,KAAA,CAAA3F,CAAAA,CAAO,OAAA,CAAAzD,CAAQ,EAAI+lB,EAAAA,EAAS,CAExD,GAAIG,CAAAA,GAAiB,IAAA,CAAM,OAAO,IAAA,CAGlC,IAAMS,GADaljB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,OACnBoJ,CAAAA,CAAK,MAAA,CAC9B5Q,CAAAA,CAAIwH,CAAAA,CAAQ,KAAO2mB,CAAAA,CAAYT,CAAAA,CAAeS,CAAAA,CAAY,CAAA,CAC1DC,CAAAA,CAAQxd,CAAAA,CAAK8c,CAAY,CAAA,CAE/B,GAAI,CAACU,CAAAA,CAAO,OAAO,IAAA,CAGnB,IAAM7qB,CAAAA,CAAU+qB,CAAAA,CAAgBA,CAAAA,CAAcF,CAAK,CAAA,CACjD5vB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kIAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,6CAAA,CAA+C,QAAA,CAAA2vB,CAAAA,CAAM,KAAA,CAAM,EAC1E5vB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAmC,oBAAQ4vB,CAAAA,CAAM,KAAA,CAAA,CAAM,CAAA,CAAA,CACxE,CAAA,CAGF,OACE3vB,GAAAA,CAAC,eAAA,CAAA,CACC,CAAA,CAAGuB,EAAI,EAAA,CACP,CAAA,CAAG,CAAA,CACH,KAAA,CAAO,GAAA,CACP,MAAA,CAAO,MAAA,CACP,SAAA,CAAU,uCAEV,QAAA,CAAAvB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAA,CACZ,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,4CAAA,CACX,QAAA,CAAA8E,CAAAA,CACJ,CAAA,CACH,EACF,CAEJ,CAEO,SAASgrB,EAAAA,EAAgB,CAC9B,OACE9vB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8JAAA,CACZ,QAAA,CAAA,CAAC,GAAG,KAAA,CAAM,EAAE,CAAC,CAAA,CAAE,GAAA,CAAI,CAACmL,CAAAA,CAAGuD,CAAAA,GACtB1O,GAAAA,CAAC,KAAA,CAAA,CAEC,UAAU,sDAAA,CACV,KAAA,CAAO,CAAE,MAAA,CAAQ,CAAA,EAAG,IAAA,CAAK,MAAA,EAAO,CAAI,GAAK,EAAE,CAAA,CAAA,CAAI,CAAA,CAAA,CAF1C0O,CAGP,CACD,CAAA,CACH,CAEJ,CCpMO,SAASqhB,EAAAA,CAAkB,CAChC,MAAAjuB,CAAAA,CAAQ,MAAA,CACR,UAAA,CAAAkuB,CAAAA,CAAa,KAAA,CACb,cAAA,CAAAC,CAAAA,CAAiB,CAAA,CACjB,aAAAC,CACF,CAAA,CAAqB,CACnB,GAAM,CAAE,KAAA,CAAA1jB,CAAAA,CAAO,MAAA,CAAA8Q,EAAQ,OAAA,CAAAvU,CAAAA,CAAS,IAAA,CAAAoJ,CAAAA,CAAM,SAAAkd,CAAAA,CAAU,eAAA,CAAAH,CAAAA,CAAiB,YAAA,CAAAD,CAAa,CAAA,CAAIH,EAAAA,EAAY,CACxFqB,CAAAA,CAAa3jB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,MAC5CymB,CAAAA,CAAclS,CAAAA,CAASvU,CAAAA,CAAQ,GAAA,CAAMA,CAAAA,CAAQ,MAAA,CAC7C2mB,CAAAA,CAAYS,CAAAA,CAAahe,EAAK,MAAA,CAC9Bie,CAAAA,CAAWV,CAAAA,CAAY,EAAA,CAEvBW,CAAAA,CAAS,CACb,IAAA,CAAM,2BAAA,CACN,OAAQ,+BAAA,CACR,OAAA,CAAS,8BAAA,CACT,KAAA,CAAO,+BACP,IAAA,CAAM,2BACR,CAAA,CAEA,OACEtwB,KAAC,GAAA,CAAA,CACE,QAAA,CAAA,CAAAoS,CAAAA,CAAK,GAAA,CAAI,CAACwd,CAAAA,CAAOjhB,CAAAA,GAAM,CACtB,IAAM4hB,CAAAA,CAAYvB,EAAAA,CAAUY,CAAAA,CAAM,KAAA,CAAON,CAAAA,CAAUG,CAAW,CAAA,CACxDjuB,CAAAA,CAAIwH,EAAQ,IAAA,CAAO2mB,CAAAA,CAAYhhB,CAAAA,CAAAA,CAAKghB,CAAAA,CAAYU,CAAAA,EAAY,CAAA,CAC5D5uB,CAAAA,CAAI8b,CAAAA,CAASvU,EAAQ,MAAA,CAASunB,CAAAA,CAC9BC,CAAAA,CAAYtB,CAAAA,GAAiBvgB,EAC7BrK,CAAAA,CAAQqK,CAAAA,CAAI,EAAA,CAAMuhB,CAAAA,CAExB,OACElwB,IAAAA,CAAC,GAAA,CAAA,CAEC,YAAA,CAAc,IAAMmvB,CAAAA,CAAgBxgB,CAAC,CAAA,CACrC,YAAA,CAAc,IAAMwgB,CAAAA,CAAgB,IAAI,CAAA,CACxC,OAAA,CAAS,IAAMgB,CAAAA,GAAeP,CAAK,CAAA,CACnC,UAAWxwB,CAAAA,CAAG,gBAAA,CAAkB+wB,CAAAA,EAAgB,gBAAgB,CAAA,CAGhE,QAAA,CAAA,CAAAlwB,GAAAA,CAAC,MAAA,CAAA,CACC,EAAG+I,CAAAA,CAAQ,IAAA,CAAO2mB,CAAAA,CAAYhhB,CAAAA,CAC9B,EAAG3F,CAAAA,CAAQ,GAAA,CACX,KAAA,CAAO2mB,CAAAA,CACP,OAAQF,CAAAA,CACR,IAAA,CAAK,aAAA,CACP,CAAA,CAGAxvB,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAGuB,CAAAA,CACH,EAAGC,CAAAA,CACH,KAAA,CAAO4uB,CAAAA,CACP,MAAA,CAAQE,CAAAA,CACR,EAAA,CAAI,CAAA,CACJ,SAAA,CAAWnxB,EACT,sCAAA,CACAoxB,CAAAA,CAAY,uBAAA,CAA0B,YACxC,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,UAAUjT,CAAAA,CAASvU,CAAAA,CAAQ,MAAM,CAAA,EAAA,CAAA,CAClD,UAAW,CAAA,2CAAA,EAA8C1E,CAAK,CAAA,WAAA,CAChE,CAAA,CAIF,EAGArE,GAAAA,CAAC,MAAA,CAAA,CACE,CAAA,CAAGuB,CAAAA,CACH,CAAA,CAAGC,CAAAA,CACH,KAAA,CAAO4uB,CAAAA,CACP,OAAQE,CAAAA,CACR,EAAA,CAAI,CAAA,CACJ,SAAA,CAAWnxB,CAAAA,CAAG,kBAAA,CAAoBkxB,CAAAA,CAAOvuB,CAAK,CAAC,CAAA,CAC/C,KAAA,CAAO,CACN,aAAA,CAAe,MAAA,CACf,eAAA,CAAiB,CAAA,OAAA,EAAUwb,CAAAA,CAASvU,EAAQ,MAAM,CAAA,EAAA,CAAA,CAClD,SAAA,CAAW,CAAA,2CAAA,EAA8C1E,CAAK,CAAA,WAAA,CAC/D,CAAA,CACH,CAAA,CAGC2rB,CAAAA,EACChwB,IAAC,MAAA,CAAA,CACC,CAAA,CAAGuB,CAAAA,CAAI6uB,CAAAA,CAAW,CAAA,CAClB,CAAA,CAAG5uB,CAAAA,CAAI,CAAA,CACP,WAAW,QAAA,CACX,IAAA,CAAK,OAAA,CACL,QAAA,CAAU,EAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,CACL,OAAA,CAAS,CAAA,CACT,SAAA,CAAW,CAAA,yBAAA,EAA4B6C,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAA,CAClD,UAAA,CAAY,2BACd,CAAA,CAEC,QAAA,CAAAsrB,CAAAA,CAAM,KAAA,CACT,IAlEGjhB,CAoEP,CAEJ,CAAC,CAAA,CACD1O,IAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CASN,GACJ,CAEJ,CClHO,SAASwwB,EAAAA,CAAmB,CACjC,KAAA,CAAA1uB,EAAQ,QAAA,CACR,UAAA,CAAAkuB,CAAAA,CAAa,KAAA,CACb,eAAAC,CAAAA,CAAiB,CAAA,CACjB,YAAA,CAAAC,CACF,EAAsB,CACpB,GAAM,CAAE,KAAA,CAAA1jB,EAAO,MAAA,CAAA8Q,CAAAA,CAAQ,QAAAvU,CAAAA,CAAS,IAAA,CAAAoJ,EAAM,QAAA,CAAAkd,CAAAA,CAAU,eAAA,CAAAH,CAAAA,CAAiB,aAAAD,CAAa,CAAA,CAAIH,EAAAA,EAAY,CACxFqB,EAAa3jB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,MAC5CymB,CAAAA,CAAclS,CAAAA,CAASvU,EAAQ,GAAA,CAAMA,CAAAA,CAAQ,OAC7C2mB,CAAAA,CAAYS,CAAAA,EAAche,CAAAA,CAAK,MAAA,CAAS,GAUxCkc,CAAAA,CARS,CACb,IAAA,CAAM,CAAE,OAAQ,SAAA,CAAW,IAAA,CAAM,wBAAyB,CAAA,CAC1D,OAAQ,CAAE,MAAA,CAAQ,UAAW,IAAA,CAAM,yBAA0B,EAC7D,OAAA,CAAS,CAAE,MAAA,CAAQ,SAAA,CAAW,KAAM,yBAA0B,CAAA,CAC9D,KAAA,CAAO,CAAE,OAAQ,SAAA,CAAW,IAAA,CAAM,yBAA0B,CAAA,CAC5D,KAAM,CAAE,MAAA,CAAQ,UAAW,IAAA,CAAM,wBAAyB,CAC5D,CAAA,CAEqBvsB,CAAK,CAAA,CAGpB2uB,CAAAA,CAASte,EAAK,GAAA,CAAI,CAACwd,CAAAA,CAAOjhB,CAAAA,GAAM,CACpC,IAAMnN,CAAAA,CAAIwH,CAAAA,CAAQ,IAAA,CAAO2mB,EAAYhhB,CAAAA,CAC/BlN,CAAAA,CAAI8b,EAASvU,CAAAA,CAAQ,MAAA,CAASgmB,GAAUY,CAAAA,CAAM,KAAA,CAAON,CAAAA,CAAUG,CAAW,EAChF,OAAO,CAAE,CAAA,CAAAjuB,CAAAA,CAAG,EAAAC,CAAAA,CAAG,IAAA,CAAMmuB,CAAM,CAC7B,CAAC,CAAA,CAGKe,CAAAA,CAAWD,EAAO,GAAA,CAAI,CAACE,EAAGjiB,CAAAA,GAAOA,CAAAA,GAAM,CAAA,CAAI,CAAA,EAAA,EAAKiiB,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAE,CAAC,GAAK,CAAA,EAAA,EAAKA,CAAAA,CAAE,CAAC,CAAA,CAAA,EAAIA,EAAE,CAAC,CAAA,CAAG,EAAE,IAAA,CAAK,GAAG,EAG3FC,CAAAA,CAAW;AAAA,IAAA,EACbF,CAAQ;AAAA,MAAA,EACNlkB,EAAQzD,CAAAA,CAAQ,KAAK,CAAA,CAAA,EAAIuU,CAAAA,CAASvU,EAAQ,MAAM;AAAA,MAAA,EAChDA,CAAAA,CAAQ,IAAI,CAAA,CAAA,EAAIuU,CAAAA,CAASvU,EAAQ,MAAM;AAAA;AAAA,EAAA,CAAA,CAI7C,OACEhJ,KAAC,GAAA,CAAA,CAEC,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CACC,CAAA,CAAG4wB,EACH,IAAA,CAAMvC,CAAAA,CAAM,KACZ,KAAA,CAAO,CACH,QAAS,CAAA,CACT,SAAA,CAAW,uBAAuB4B,CAAc,CAAA,UAAA,CACpD,CAAA,CACF,CAAA,CAGAjwB,GAAAA,CAAC,MAAA,CAAA,CACC,EAAG0wB,CAAAA,CACH,IAAA,CAAK,OACL,MAAA,CAAQrC,CAAAA,CAAM,OACd,WAAA,CAAa,CAAA,CACb,cAAc,OAAA,CACd,cAAA,CAAe,QACf,SAAA,CAAU,mBAAA,CACV,MAAO,CACH,eAAA,CAAiB,IACjB,gBAAA,CAAkB,GAAA,CAClB,SAAA,CAAW,CAAA,sBAAA,EAAyB4B,CAAc,CAAA,UAAA,CACtD,EACF,CAAA,CAGCQ,CAAAA,CAAO,IAAI,CAACE,CAAAA,CAAGjiB,IACd3O,IAAAA,CAAC,GAAA,CAAA,CAEG,aAAc,IAAMmvB,CAAAA,CAAgBxgB,CAAC,CAAA,CACrC,YAAA,CAAc,IAAMwgB,CAAAA,CAAgB,IAAI,EACxC,OAAA,CAAS,IAAMgB,CAAAA,GAAeS,CAAAA,CAAE,IAAI,CAAA,CACpC,UAAWxxB,CAAAA,CAAG,kBAAA,CAAoB+wB,GAAgB,gBAAgB,CAAA,CAGlE,UAAAlwB,GAAAA,CAAC,MAAA,CAAA,CACG,CAAA,CAAG2wB,CAAAA,CAAE,CAAA,CAAIjB,CAAAA,CAAY,EACrB,CAAA,CAAG3mB,CAAAA,CAAQ,IACX,KAAA,CAAO2mB,CAAAA,CACP,OAAQF,CAAAA,CACR,IAAA,CAAK,aAAA,CACT,CAAA,CAAA,CAGEP,CAAAA,GAAiBvgB,CAAAA,EAAKshB,IACpBjwB,IAAAA,CAAAskB,QAAAA,CAAA,CACK,QAAA,CAAA,CAAA4K,CAAAA,GAAiBvgB,GAChB1O,GAAAA,CAAC,MAAA,CAAA,CACG,GAAI2wB,CAAAA,CAAE,CAAA,CACN,GAAI5nB,CAAAA,CAAQ,GAAA,CACZ,GAAI4nB,CAAAA,CAAE,CAAA,CACN,GAAIrT,CAAAA,CAASvU,CAAAA,CAAQ,MAAA,CACrB,MAAA,CAAO,OAAA,CACP,WAAA,CAAa,EACb,eAAA,CAAgB,KAAA,CAChB,UAAU,YAAA,CACd,CAAA,CAEF/I,IAAC,QAAA,CAAA,CACG,EAAA,CAAI2wB,CAAAA,CAAE,CAAA,CACN,EAAA,CAAIA,CAAAA,CAAE,EACN,CAAA,CAAG1B,CAAAA,GAAiBvgB,EAAI,CAAA,CAAI,CAAA,CAC5B,KAAM2f,CAAAA,CAAM,MAAA,CACZ,MAAA,CAAO,OAAA,CACP,WAAA,CAAa,CAAA,CACb,MAAO,CACH,UAAA,CAAY,iBAChB,CAAA,CACJ,CAAA,CACC2B,GACChwB,GAAAA,CAAC,MAAA,CAAA,CACG,EAAG2wB,CAAAA,CAAE,CAAA,CACL,EAAGA,CAAAA,CAAE,CAAA,CAAI,GACT,UAAA,CAAW,QAAA,CACX,KAAK,OAAA,CACL,QAAA,CAAU,EAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,CACH,OAAA,CAAS,CAAA,CACT,UAAW,CAAA,yBAAA,EAA4BV,CAAAA,CAAiB,EAAIvhB,CAAAA,CAAI,EAAG,CAAA,UAAA,CAAA,CACnE,UAAA,CAAY,2BAChB,CAAA,CAEC,SAAAyD,CAAAA,CAAKzD,CAAC,GAAG,KAAA,CACd,CAAA,CAAA,CAEN,IA1DCA,CA4DT,CACD,CAAA,CAED1O,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAYN,CAAA,CAAA,CACJ,CAEJ,CCjJO,SAAS6wB,GAAmB,CACjC,KAAA,CAAA/uB,CAAAA,CAAQ,MAAA,CACR,UAAA,CAAAkuB,CAAAA,CAAa,MACb,cAAA,CAAAC,CAAAA,CAAiB,CAAA,CACjB,KAAA,CAAAa,CAAAA,CAAQ,QAAA,CACR,YAAAC,CAAAA,CAAc,CAAA,CACd,KAAA,CAAA7oB,CAAAA,CAAQ,MAAA,CACR,YAAA,CAAAgoB,CACF,CAAA,CAAsB,CACpB,GAAM,CAAE,KAAA,CAAA1jB,CAAAA,CAAO,OAAA8Q,CAAAA,CAAQ,OAAA,CAAAvU,CAAAA,CAAS,IAAA,CAAAoJ,CAAAA,CAAM,QAAA,CAAAkd,EAAU,eAAA,CAAAH,CAAAA,CAAiB,YAAA,CAAAD,CAAa,CAAA,CAAIH,EAAAA,GAC5EqB,CAAAA,CAAa3jB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,KAAA,CAC5CymB,EAAclS,CAAAA,CAASvU,CAAAA,CAAQ,GAAA,CAAMA,CAAAA,CAAQ,MAAA,CAG7C2mB,CAAAA,CAAYxnB,IAAU,QAAA,CACxBioB,CAAAA,CAAahe,CAAAA,CAAK,MAAA,CAClBge,CAAAA,EAAche,CAAAA,CAAK,OAAS,CAAA,CAAA,CAU1B6e,CAAAA,CARS,CACb,IAAA,CAAM,SAAA,CACN,MAAA,CAAQ,UACR,OAAA,CAAS,SAAA,CACT,KAAA,CAAO,SAAA,CACP,IAAA,CAAM,SACR,EAE2BlvB,CAAK,CAAA,CAG1B2uB,CAAAA,CAASte,CAAAA,CAAK,GAAA,CAAI,CAACwd,EAAOjhB,CAAAA,GAAM,CACpC,IAAInN,CAAAA,CACA2G,CAAAA,GAAU,QAAA,CAEZ3G,CAAAA,CAAIwH,CAAAA,CAAQ,IAAA,CAAO2mB,CAAAA,CAAYhhB,CAAAA,CAAIghB,CAAAA,CAAY,CAAA,CAG/CnuB,CAAAA,CAAIwH,EAAQ,IAAA,CAAO2mB,CAAAA,CAAYhhB,CAAAA,CAGjC,IAAMlN,CAAAA,CAAI8b,CAAAA,CAASvU,EAAQ,MAAA,CAASgmB,EAAAA,CAAUY,CAAAA,CAAM,KAAA,CAAON,CAAAA,CAAUG,CAAW,EAChF,OAAO,CAAE,CAAA,CAAAjuB,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,KAAMmuB,CAAM,CAC7B,CAAC,CAAA,CAGGzgB,CAAAA,CAAI,EAAA,CACR,GAAIuhB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAGlB,GAFAvhB,CAAAA,CAAI,CAAA,EAAA,EAAKuhB,EAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAO,CAAC,EAAG,CAAC,CAAA,CAAA,CAEjCK,CAAAA,GAAU,QAAA,CAQZ,IAAA,IAASpiB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI+hB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAG/hB,CAAAA,EAAAA,CAAK,CAC1C,IAAMuiB,EAAKR,CAAAA,CAAO/hB,CAAC,CAAA,CACbwiB,CAAAA,CAAKT,CAAAA,CAAO/hB,CAAAA,CAAI,CAAC,CAAA,CACjByiB,CAAAA,CAAOF,CAAAA,CAAG,CAAA,CAAA,CAAKC,CAAAA,CAAG,CAAA,CAAID,EAAG,CAAA,EAAK,CAAA,CAC9BG,CAAAA,CAAOH,CAAAA,CAAG,CAAA,CACVI,CAAAA,CAAOJ,EAAG,CAAA,CAAA,CAAKC,CAAAA,CAAG,CAAA,CAAID,CAAAA,CAAG,CAAA,EAAK,CAAA,CAC9BK,EAAOJ,CAAAA,CAAG,CAAA,CAChBhiB,CAAAA,EAAK,CAAA,GAAA,EAAMiiB,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,EAAA,EAAKC,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,EAAA,EAAKJ,CAAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,CAAC,CAAA,EAC3D,CAAA,KAAA,GACSJ,CAAAA,GAAU,MAAA,CACnB,IAAA,IAASpiB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI+hB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAG/hB,IAAK,CAC1C,IAAMuiB,CAAAA,CAAKR,CAAAA,CAAO/hB,CAAC,CAAA,CACbwiB,EAAKT,CAAAA,CAAO/hB,CAAAA,CAAI,CAAC,CAAA,CACvBQ,CAAAA,EAAK,CAAA,GAAA,EAAMgiB,EAAG,CAAC,CAAA,CAAA,EAAID,CAAAA,CAAG,CAAC,CAAA,GAAA,EAAMC,CAAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,CAAC,CAAA,EAC3C,CAAA,KAGA,IAAA,IAASxiB,EAAI,CAAA,CAAGA,CAAAA,CAAI+hB,CAAAA,CAAO,MAAA,CAAQ/hB,CAAAA,EAAAA,CACjCQ,CAAAA,EAAK,MAAMuhB,CAAAA,CAAO/hB,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI+hB,CAAAA,CAAO/hB,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAK7C,OACE3O,IAAAA,CAAC,GAAA,CAAA,CAEC,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAGkP,CAAAA,CACH,IAAA,CAAK,MAAA,CACL,MAAA,CAAQ8hB,EACR,WAAA,CAAaD,CAAAA,CACb,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,UAAU,mBAAA,CACV,KAAA,CAAO,CACH,eAAA,CAAiB,GAAA,CACjB,gBAAA,CAAkB,IAClB,SAAA,CAAW,CAAA,wBAAA,EAA2Bd,CAAc,CAAA,UAAA,CACxD,CAAA,CACF,CAAA,CAGCQ,EAAO,GAAA,CAAI,CAACE,CAAAA,CAAGjiB,CAAAA,GACd3O,IAAAA,CAAC,GAAA,CAAA,CAEG,aAAc,IAAMmvB,CAAAA,CAAgBxgB,CAAC,CAAA,CACrC,YAAA,CAAc,IAAMwgB,EAAgB,IAAI,CAAA,CACxC,OAAA,CAAS,IAAMgB,CAAAA,GAAeS,CAAAA,CAAE,IAAI,CAAA,CACpC,SAAA,CAAWxxB,CAAAA,CAAG,kBAAA,CAAoB+wB,CAAAA,EAAgB,gBAAgB,CAAA,CAGlE,QAAA,CAAA,CAAAlwB,GAAAA,CAAC,MAAA,CAAA,CACG,CAAA,CAAG2wB,CAAAA,CAAE,CAAA,CAAIjB,CAAAA,CAAY,EACrB,CAAA,CAAG3mB,CAAAA,CAAQ,GAAA,CACX,KAAA,CAAO2mB,CAAAA,CACP,MAAA,CAAQF,EACR,IAAA,CAAK,aAAA,CACT,CAAA,CAAA,CAGEP,CAAAA,GAAiBvgB,CAAAA,EAAKshB,CAAAA,GACpBjwB,KAAAskB,QAAAA,CAAA,CACK,QAAA,CAAA,CAAA4K,CAAAA,GAAiBvgB,CAAAA,EAChB1O,GAAAA,CAAC,QACG,EAAA,CAAI2wB,CAAAA,CAAE,CAAA,CACN,EAAA,CAAI5nB,CAAAA,CAAQ,GAAA,CACZ,GAAI4nB,CAAAA,CAAE,CAAA,CACN,EAAA,CAAIrT,CAAAA,CAASvU,CAAAA,CAAQ,MAAA,CACrB,OAAO,OAAA,CACP,WAAA,CAAa,CAAA,CACb,eAAA,CAAgB,KAAA,CAChB,SAAA,CAAU,aACd,CAAA,CAEF/I,GAAAA,CAAC,QAAA,CAAA,CACG,EAAA,CAAI2wB,CAAAA,CAAE,CAAA,CACN,EAAA,CAAIA,CAAAA,CAAE,CAAA,CACN,CAAA,CAAG1B,CAAAA,GAAiBvgB,CAAAA,CAAI,CAAA,CAAI,CAAA,CAC5B,KAAMsiB,CAAAA,CACN,MAAA,CAAO,OAAA,CACP,WAAA,CAAa,CAAA,CACb,KAAA,CAAO,CAAE,UAAA,CAAY,iBAAkB,CAAA,CAC3C,CAAA,CACChB,CAAAA,EACChwB,GAAAA,CAAC,QACG,CAAA,CAAG2wB,CAAAA,CAAE,CAAA,CACL,CAAA,CAAGA,CAAAA,CAAE,CAAA,CAAI,GACT,UAAA,CAAW,QAAA,CACX,IAAA,CAAK,OAAA,CACL,QAAA,CAAU,EAAA,CACV,WAAY,GAAA,CACZ,KAAA,CAAO,CACH,OAAA,CAAS,CAAA,CACT,SAAA,CAAW,4BAA4BV,CAAAA,CAAiB,CAAA,CAAIvhB,CAAAA,CAAI,EAAG,CAAA,UAAA,CAAA,CACnE,UAAA,CAAY,2BAChB,CAAA,CAEC,QAAA,CAAAyD,CAAAA,CAAKzD,CAAC,CAAA,EAAG,KAAA,CACd,CAAA,CAAA,CAEN,CAAA,CAAA,CAAA,CAxDCA,CA0DT,CACD,CAAA,CAED1O,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAQN,CAAA,CAAA,CACJ,CAEJ,CC9KO,SAASuxB,GAAkB,CAChC,WAAA,CAAAC,EAAc,CAAA,CACd,QAAA,CAAAC,EAAW,GAAA,CACX,UAAA,CAAAC,EAAa,KAAA,CACb,MAAA,CAAArB,EAAS,CAAC,SAAA,CAAW,UAAW,SAAA,CAAW,SAAA,CAAW,UAAW,SAAA,CAAW,SAAS,EACrF,YAAA,CAAAH,CACF,EAAqB,CACnB,GAAM,CAAE,KAAA,CAAA1jB,CAAAA,CAAO,MAAA,CAAA8Q,CAAAA,CAAQ,IAAA,CAAAnL,CAAAA,CAAM,gBAAA+c,CAAAA,CAAiB,YAAA,CAAAD,CAAa,CAAA,CAAIH,EAAAA,GAEzD6C,CAAAA,CAAS,IAAA,CAAK,IAAInlB,CAAAA,CAAO8Q,CAAM,EAAI,CAAA,CAAI,EAAA,CACvCsU,EAAUplB,CAAAA,CAAQ,CAAA,CAClBqlB,EAAUvU,CAAAA,CAAS,CAAA,CAEnBwU,CAAAA,CAAQ5mB,OAAAA,CAAQ,IAAMiH,CAAAA,CAAK,OAAO,CAAC4f,CAAAA,CAAKC,IAAQD,CAAAA,CAAMC,CAAAA,CAAI,MAAO,CAAC,CAAA,CAAG,CAAC7f,CAAI,CAAC,EAE7E8f,CAAAA,CAAe,CAAA,CAEbC,EAAS/f,CAAAA,CAAK,GAAA,CAAI,CAACwd,CAAAA,CAAOjhB,CAAAA,GAAM,CACpC,IAAMpC,CAAAA,CAAaqjB,CAAAA,CAAM,MAAQmC,CAAAA,CAC3BK,CAAAA,CAAQ7lB,EAAa,CAAA,CAAI,IAAA,CAAK,GAE9B8lB,CAAAA,CAAaH,CAAAA,CACbI,EAAWJ,CAAAA,CAAeE,CAAAA,CAEhC,OAAAF,CAAAA,EAAgBE,CAAAA,CAET,CACL,GAAGxC,CAAAA,CACH,WAAAyC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAOhC,CAAAA,CAAO3hB,CAAAA,CAAI2hB,EAAO,MAAM,CAAA,CAC/B,WAAA/jB,CACF,CACF,CAAC,CAAA,CAGKgmB,CAAAA,CAA2B,CAACC,CAAAA,CAAiBjwB,CAAAA,GAAc,CAC/D,IAAMf,CAAAA,CAAIqwB,EAAUtvB,CAAAA,CAAI,IAAA,CAAK,IAAIiwB,CAAO,CAAA,CAClC/wB,CAAAA,CAAIqwB,CAAAA,CAAUvvB,CAAAA,CAAI,IAAA,CAAK,IAAIiwB,CAAO,CAAA,CACxC,OAAO,CAAChxB,CAAAA,CAAGC,CAAC,CACd,CAAA,CAEA,OACEzB,IAAAA,CAAC,GAAA,CAAA,CACE,UAAAmyB,CAAAA,CAAO,GAAA,CAAI,CAACM,CAAAA,CAAO9jB,CAAAA,GAAM,CAGxB,IAAM+jB,CAAAA,CAAsBD,CAAAA,CAAM,UAAA,EAAcN,CAAAA,CAAO,MAAA,CAAS,EAAIT,CAAAA,CAAW,CAAA,CAAI,GAC7EiB,CAAAA,CAAoBF,CAAAA,CAAM,UAAYN,CAAAA,CAAO,MAAA,CAAS,EAAIT,CAAAA,CAAW,CAAA,CAAI,GAI/E,GAAIiB,CAAAA,EAAqBD,EAAqB,OAAO,IAAA,CAErD,GAAM,CAACnP,CAAAA,CAAQqP,CAAM,CAAA,CAAIL,CAAAA,CAAyBG,CAAAA,CAAqBd,CAAM,CAAA,CACvE,CAACiB,EAAMC,CAAI,CAAA,CAAIP,EAAyBI,CAAAA,CAAmBf,CAAM,EAEjEmB,CAAAA,CAAeJ,CAAAA,CAAoBD,EAAsB,IAAA,CAAK,EAAA,CAAK,EAAI,CAAA,CAGvEM,CAAAA,CAASpB,EAASH,CAAAA,CAClB,CAACwB,EAAaC,CAAW,CAAA,CAAIX,EAAyBI,CAAAA,CAAmBK,CAAM,EAC/E,CAACG,CAAAA,CAAWC,CAAS,CAAA,CAAIb,CAAAA,CAAyBG,EAAqBM,CAAM,CAAA,CAE7EK,EAAW,CACf,CAAA,EAAA,EAAK9P,CAAM,CAAA,CAAA,EAAIqP,CAAM,GACrB,CAAA,EAAA,EAAKhB,CAAM,CAAA,CAAA,EAAIA,CAAM,CAAA,GAAA,EAAMmB,CAAY,MAAMF,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,CAAA,CACzDrB,CAAAA,CAAc,EAAI,CAAA,EAAA,EAAKwB,CAAW,IAAIC,CAAW,CAAA,CAAA,CAAK,KAAKrB,CAAO,CAAA,CAAA,EAAIC,CAAO,CAAA,CAAA,CAC7EL,CAAAA,CAAc,EAAI,CAAA,EAAA,EAAKuB,CAAM,CAAA,CAAA,EAAIA,CAAM,CAAA,GAAA,EAAMD,CAAY,MAAMI,CAAS,CAAA,CAAA,EAAIC,CAAS,CAAA,CAAA,CAAK,EAAA,CAC1F,GACF,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAEJ5C,CAAAA,CAAYtB,IAAiBvgB,CAAAA,CAG7B2kB,EAAAA,CAAAA,CAAYb,EAAM,UAAA,CAAaA,CAAAA,CAAM,UAAY,CAAA,CACjDc,CAAAA,CAAc3B,CAAAA,EAAUH,CAAAA,CAAc,CAAA,CAAA,CAAK,CAAA,CAAIA,GAAe,CAAA,CAAI,EAAA,CAAA,CAClE,CAAC+B,EAAAA,CAAQC,EAAM,EAAIlB,CAAAA,CAAyBe,EAAAA,CAAUC,CAAW,CAAA,CAEvE,OACEvzB,KAAC,GAAA,CAAA,CAEC,YAAA,CAAc,IAAMmvB,CAAAA,CAAgBxgB,CAAC,EACrC,YAAA,CAAc,IAAMwgB,CAAAA,CAAgB,IAAI,CAAA,CACxC,SAAA,CAAU,iBAEV,QAAA,CAAA,CAAAlvB,GAAAA,CAAC,QACC,CAAA,CAAGozB,CAAAA,CACH,KAAMZ,CAAAA,CAAM,KAAA,CACZ,UAAWrzB,CAAAA,CACT,sCAAA,CACAoxB,EAAY,4BAAA,CAA+B,YAC7C,EACA,KAAA,CAAO,CACL,gBAAiB,CAAA,EAAGqB,CAAO,CAAA,GAAA,EAAMC,CAAO,CAAA,EAAA,CAAA,CACxC,SAAA,CAAWtB,EAAY,aAAA,CAAgB,UAAA,CACvC,UAAW,CAAA,wBAAA,EAA2B7hB,CAAAA,CAAI,GAAI,CAAA,WAAA,CAChD,CAAA,CACF,GAEEgjB,CAAAA,EAAcnB,CAAAA,GACdxwB,KAAC,MAAA,CAAA,CACC,CAAA,CAAGwzB,GACH,CAAA,CAAGC,EAAAA,CACH,WAAW,QAAA,CACX,gBAAA,CAAiB,QAAA,CACjB,IAAA,CAAK,OAAA,CACL,QAAA,CAAU,GACV,UAAA,CAAY,GAAA,CACZ,UAAU,qBAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAY,2BAA4B,EAEhD,QAAA,CAAA,CAAA,IAAA,CAAK,KAAA,CAAMhB,EAAM,UAAA,CAAa,GAAG,EAAE,GAAA,CAAA,CACtC,CAAA,CAAA,CAAA,CAhCG9jB,CAkCP,CAEJ,CAAC,CAAA,CACD1O,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKN,CAAA,CAAA,CACJ,CAEJ,CC5HO,SAASyzB,GAAoB,CAClC,IAAA,CAAAthB,CAAAA,CACA,IAAA,CAAAuhB,CAAAA,CACA,MAAA,CAAArD,EAAS,CAAC,MAAA,CAAQ,SAAU,SAAS,CAAA,CACrC,SAAUsD,CAAAA,CACV,MAAA,CAAArW,EAAS,GAAA,CACT,SAAA,CAAA5d,EACA,GAAGG,CACL,EAAuB,CACrB,GAAM,CAACsvB,CAAAA,CAAgBC,CAAiB,CAAA,CAAIxrB,QAAAA,CAAS,CAAC,CAAA,CAChDqD,EAAezH,WAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA,CAGtDA,WAAAA,CAAM,UAAU,IAAM,CACpB,GAAI,CAACyH,CAAAA,CAAa,QAAS,OAC3B,IAAM/C,EAAW,IAAI,cAAA,CAAgBkZ,GAAY,CAC3CA,CAAAA,CAAQ,CAAC,CAAA,EACXgS,CAAAA,CAAkBhS,CAAAA,CAAQ,CAAC,CAAA,CAAE,WAAA,CAAY,KAAK,EAElD,CAAC,EACD,OAAAlZ,CAAAA,CAAS,OAAA,CAAQ+C,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAM/C,CAAAA,CAAS,UAAA,EACxB,CAAA,CAAG,EAAE,CAAA,CAEL,IAAM0vB,CAAAA,CAAS,CAAE,CAAA,CAAGzE,CAAAA,CAAiB,EAAG,CAAA,CAAG7R,CAAAA,CAAS,CAAE,CAAA,CAChDqU,CAAAA,CAAS,KAAK,GAAA,CAAIxC,CAAAA,CAAgB7R,CAAM,CAAA,CAAI,CAAA,CAAI,GAEhD+R,CAAAA,CAAWnkB,OAAAA,CAAQ,IAAM,CAC7B,GAAIyoB,EAAc,OAAOA,CAAAA,CACzB,IAAIxnB,CAAAA,CAAM,CAAA,CACV,OAAAgG,EAAK,OAAA,CAAQjD,CAAAA,EAAK,CAChBwkB,CAAAA,CAAK,OAAA,CAAQG,GAAK,CAChB,IAAM7jB,EAAM,MAAA,CAAOd,CAAAA,CAAE2kB,CAAC,CAAC,CAAA,EAAK,EACxB7jB,CAAAA,CAAM7D,CAAAA,GAAKA,EAAM6D,CAAAA,EACvB,CAAC,EACH,CAAC,CAAA,CACM7D,CAAAA,CAAM,KAAO,GACtB,CAAA,CAAG,CAACgG,CAAAA,CAAMuhB,CAAAA,CAAMC,CAAY,CAAC,CAAA,CAEvBG,EAAc,IAAA,CAAK,EAAA,CAAK,EAAK3hB,CAAAA,CAAK,MAAA,CAElC4hB,EAAmC,CACvC,IAAA,CAAM,yBACN,MAAA,CAAQ,yBAAA,CACR,OAAA,CAAS,yBAAA,CACT,KAAA,CAAO,yBAAA,CACP,KAAM,wBACR,CAAA,CAEMC,EAAoC,CACxC,IAAA,CAAM,UACN,MAAA,CAAQ,SAAA,CACR,OAAA,CAAS,SAAA,CACT,KAAA,CAAO,SAAA,CACP,KAAM,SACR,CAAA,CAEA,OAAI7E,CAAAA,GAAmB,CAAA,CAAUnvB,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKiH,CAAAA,CAAc,KAAA,CAAO,CAAE,MAAA,CAAAqW,CAAO,CAAA,CAAG,CAAA,CAG1Etd,IAAC,KAAA,CAAA,CACC,GAAA,CAAKiH,EACL,SAAA,CAAW9H,CAAAA,CAAG,8BAA+BO,CAAS,CAAA,CACtD,MAAO,CAAE,MAAA,CAAA4d,CAAO,CAAA,CACf,GAAGzd,EAEJ,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,OAAO,OAAA,CAAS,CAAA,IAAA,EAAOovB,CAAc,CAAA,CAAA,EAAI7R,CAAM,GAAI,SAAA,CAAU,kBAAA,CAEnF,WAAC,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAC,EAAE,GAAA,CAAK2W,CAAAA,EAAU,CAC9B,IAAMC,CAAAA,CAAevC,CAAAA,CAAS,CAAA,CAAKsC,CAAAA,CAC7BxD,CAAAA,CAASte,EAAK,GAAA,CAAI,CAAChH,EAAGuD,CAAAA,GAAM,CAChC,IAAMyjB,CAAAA,CAAQ2B,CAAAA,CAAaplB,EAAI,IAAA,CAAK,EAAA,CAAK,EACzC,OAAO,CAAA,EAAGklB,EAAO,CAAA,CAAI,IAAA,CAAK,IAAIzB,CAAK,CAAA,CAAI+B,CAAW,CAAA,CAAA,EAAIN,CAAAA,CAAO,CAAA,CAAI,KAAK,GAAA,CAAIzB,CAAK,EAAI+B,CAAW,CAAA,CAChG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAEX,OACEl0B,GAAAA,CAAC,WAEC,MAAA,CAAQywB,CAAAA,CACR,KAAK,MAAA,CACL,MAAA,CAAO,wBACP,WAAA,CAAY,GAAA,CAAA,CAJPwD,CAKP,CAEJ,CAAC,CAAA,CAGA9hB,EAAK,GAAA,CAAI,CAACjD,EAAGR,CAAAA,GAAM,CAClB,IAAMyjB,CAAAA,CAAQ2B,CAAAA,CAAaplB,EAAI,IAAA,CAAK,EAAA,CAAK,EACnCnN,CAAAA,CAAIqyB,CAAAA,CAAO,EAAI,IAAA,CAAK,GAAA,CAAIzB,CAAK,CAAA,CAAIR,CAAAA,CACjCnwB,CAAAA,CAAIoyB,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,IAAIzB,CAAK,CAAA,CAAIR,EAGjC4B,CAAAA,CAASK,CAAAA,CAAO,EAAI,IAAA,CAAK,GAAA,CAAIzB,CAAK,CAAA,EAAKR,CAAAA,CAAS,EAAA,CAAA,CAChD6B,EAASI,CAAAA,CAAO,CAAA,CAAI,KAAK,GAAA,CAAIzB,CAAK,GAAKR,CAAAA,CAAS,EAAA,CAAA,CAEtD,OACE5xB,IAAAA,CAAC,GAAA,CAAA,CACC,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CACC,EAAA,CAAI4zB,EAAO,CAAA,CACX,EAAA,CAAIA,EAAO,CAAA,CACX,EAAA,CAAIryB,EACJ,EAAA,CAAIC,CAAAA,CACJ,OAAO,uBAAA,CACP,WAAA,CAAY,IACd,CAAA,CACAxB,GAAAA,CAAC,QACC,CAAA,CAAGuzB,CAAAA,CACH,CAAA,CAAGC,CAAAA,CACH,UAAA,CAAW,QAAA,CACX,iBAAiB,QAAA,CACjB,IAAA,CAAK,wBACL,QAAA,CAAS,IAAA,CAER,SAAAtkB,CAAAA,CAAE,OAAA,CACL,CAAA,CAAA,CAAA,CAlBMR,CAmBR,CAEJ,CAAC,EAGAglB,CAAAA,CAAK,GAAA,CAAI,CAACpU,CAAAA,CAAK6U,CAAAA,GAAW,CACzB,IAAM1D,CAAAA,CAASte,CAAAA,CAAK,GAAA,CAAI,CAACjD,CAAAA,CAAGR,IAAM,CAEhC,IAAMpM,GADQ,MAAA,CAAO4M,CAAAA,CAAEoQ,CAAG,CAAC,CAAA,EAAK,GACb+P,CAAAA,CAAYsC,CAAAA,CACzBQ,EAAQ2B,CAAAA,CAAaplB,CAAAA,CAAI,KAAK,EAAA,CAAK,CAAA,CACzC,OAAO,CAAA,EAAGklB,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,GAAA,CAAIzB,CAAK,EAAI7vB,CAAC,CAAA,CAAA,EAAIsxB,EAAO,CAAA,CAAI,IAAA,CAAK,IAAIzB,CAAK,CAAA,CAAI7vB,CAAC,CAAA,CAC5E,CAAC,EAAE,IAAA,CAAK,GAAG,EAEL8xB,CAAAA,CAAY/D,CAAAA,CAAO8D,EAAS9D,CAAAA,CAAO,MAAM,CAAA,EAAK,MAAA,CAC9CgE,CAAAA,CAAON,CAAAA,CAASK,CAAS,CAAA,CACzBE,CAAAA,CAASN,EAAUI,CAAS,CAAA,CAElC,OACEp0B,GAAAA,CAAC,SAAA,CAAA,CAEC,OAAQywB,CAAAA,CACR,IAAA,CAAM4D,EACN,WAAA,CAAa,EAAA,CACb,OAAQC,CAAAA,CACR,WAAA,CAAa,EACb,SAAA,CAAU,4DAAA,CAAA,CANLhV,CAOP,CAEJ,CAAC,CAAA,CAAA,CACH,EACF,CAEJ,CCxJO,SAASiV,EAAAA,CAAU,CACxB,IAAA,CAAApiB,EACA,KAAA,CAAArQ,CAAAA,CAAQ,UACR,MAAA,CAAAwb,CAAAA,CAAS,GACT,WAAA,CAAAyT,CAAAA,CAAc,CAAA,CACd,IAAA,CAAAsD,CAAAA,CAAO,KAAA,CACP,UAAA30B,CAAAA,CACA,GAAGG,CACL,CAAA,CAAmB,CACjB,IAAMsM,CAAAA,CAAM,IAAA,CAAK,IAAI,GAAGgG,CAAI,EACtBjG,CAAAA,CAAM,IAAA,CAAK,IAAI,GAAGiG,CAAI,EACtBqiB,CAAAA,CAAQroB,CAAAA,CAAMD,CAAAA,EAAO,CAAA,CAWrB8kB,CAAAA,CATS,CACb,KAAM,SAAA,CACN,MAAA,CAAQ,UACR,OAAA,CAAS,SAAA,CACT,MAAO,SAAA,CACP,IAAA,CAAM,UACN,KAAA,CAAO,SACT,EAE2BlvB,CAAK,CAAA,CAO1B2uB,EAASte,CAAAA,CAAK,GAAA,CAAI,CAACnC,CAAAA,CAAKtB,CAAAA,GAAM,CAClC,IAAMnN,CAAAA,CAAKmN,CAAAA,EAAKyD,EAAK,MAAA,CAAS,CAAA,CAAA,CAAM,IAK9B,CAAA,CAAI,EAAA,CAAA,CADWnC,EAAM9D,CAAAA,EAAOsoB,CAAAA,CACL,GAC7B,OAAO,CAAE,EAAAjzB,CAAAA,CAAG,CAAE,CAChB,CAAC,CAAA,CAEG2N,EAAI,EAAA,CACR,GAAIuhB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAG,CACrBvhB,EAAI,CAAA,EAAA,EAAKuhB,CAAAA,CAAO,CAAC,CAAA,CAAG,CAAC,IAAIA,CAAAA,CAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAErC,IAAA,IAAS/hB,EAAI,CAAA,CAAGA,CAAAA,CAAI+hB,EAAO,MAAA,CAAS,CAAA,CAAG/hB,IAAK,CAC1C,IAAMuiB,CAAAA,CAAKR,CAAAA,CAAO/hB,CAAC,CAAA,CACbwiB,EAAKT,CAAAA,CAAO/hB,CAAAA,CAAI,CAAC,CAAA,CACjByiB,CAAAA,CAAOF,EAAG,CAAA,CAAA,CAAKC,CAAAA,CAAG,EAAID,CAAAA,CAAG,CAAA,EAAK,EAC9BG,CAAAA,CAAOH,CAAAA,CAAG,EACVI,CAAAA,CAAOJ,CAAAA,CAAG,GAAKC,CAAAA,CAAG,CAAA,CAAID,CAAAA,CAAG,CAAA,EAAK,CAAA,CAC9BK,CAAAA,CAAOJ,EAAG,CAAA,CAChBhiB,CAAAA,EAAK,MAAMiiB,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,EAAA,EAAKC,CAAI,IAAIC,CAAI,CAAA,EAAA,EAAKJ,EAAG,CAAC,CAAA,CAAA,EAAIA,EAAG,CAAC,CAAA,EAC3D,CACF,CAEA,IAAMuD,CAAAA,CAAWJ,CAAAA,CACb,CAAA,EAAGnlB,CAAC,uBACJ,MAAA,CAEJ,OACElP,IAAC,KAAA,CAAA,CACC,SAAA,CAAWb,EAAG,wBAAA,CAA0BO,CAAS,EACjD,KAAA,CAAO,CAAE,OAAA4d,CAAO,CAAA,CACf,GAAGzd,CAAAA,CAEJ,QAAA,CAAAE,KAAC,KAAA,CAAA,CACC,KAAA,CAAM,MAAA,CACN,MAAA,CAAO,MAAA,CACP,OAAA,CAAQ,cACR,mBAAA,CAAoB,MAAA,CACpB,UAAU,kBAAA,CAET,QAAA,CAAA,CAAAs0B,GACCr0B,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAGy0B,CAAAA,CACH,IAAA,CAAMzD,CAAAA,CACN,YAAa,EAAA,CACb,MAAA,CAAO,OACT,CAAA,CAEFhxB,GAAAA,CAAC,QACC,CAAA,CAAGkP,CAAAA,CACH,IAAA,CAAK,MAAA,CACL,MAAA,CAAQ8hB,CAAAA,CACR,YAAaD,CAAAA,CACb,aAAA,CAAc,QACd,cAAA,CAAe,OAAA,CACf,aAAa,oBAAA,CACf,CAAA,CAAA,CACF,EACF,CAEJ,CC9FO,SAAS2D,EAAAA,CAAW,CAAE,MAAAC,CAAAA,CAAQ,CAAA,CAAG,MAAA,CAAAC,CAAAA,CAAUnhB,CAAAA,EAAMA,CAAAA,CAAE,UAAW,CAAA,CAAe,CAClF,GAAM,CAAE,OAAA6J,CAAAA,CAAQ,OAAA,CAAAvU,CAAAA,CAAS,QAAA,CAAAsmB,CAAS,CAAA,CAAIP,IAAS,CACzCU,CAAAA,CAAclS,EAASvU,CAAAA,CAAQ,GAAA,CAAMA,EAAQ,MAAA,CAEnD,OACE/I,GAAAA,CAAC,GAAA,CAAA,CACE,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ20B,CAAAA,CAAQ,CAAE,CAAC,CAAA,CAAE,IAAI,CAACxpB,CAAAA,CAAGuD,IAAM,CAC/C,IAAMzM,EAASotB,CAAAA,CAAWsF,CAAAA,CAASjmB,EAC7BlN,CAAAA,CAAI8b,CAAAA,CAASvU,EAAQ,MAAA,CAAUymB,CAAAA,CAAcmF,CAAAA,CAASjmB,CAAAA,CAE5D,OACE1O,GAAAA,CAAC,QAEC,CAAA,CAAG+I,CAAAA,CAAQ,KAAO,EAAA,CAClB,CAAA,CAAGvH,EACH,UAAA,CAAW,KAAA,CACX,gBAAA,CAAiB,QAAA,CACjB,SAAA,CAAU,sDAAA,CAET,SAAAozB,CAAAA,CAAO,IAAA,CAAK,MAAM3yB,CAAK,CAAC,GAPpByM,CAQP,CAEJ,CAAC,CAAA,CACH,CAEJ,KC3BMmmB,EAAAA,CAAsBt0B,GAAAA,CAC1B,yEACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,oEAAA,CACT,KAAA,CAAO,oFACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAiBau0B,GAAct1B,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,EAAW,OAAA,CAAAe,CAAAA,CAAS,KAAAs0B,CAAAA,CAAM,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGp1B,CAAM,CAAA,CAAGC,CAAAA,GAE1DC,KAAC,KAAA,CAAA,CAAI,GAAA,CAAKD,EAAK,SAAA,CAAWX,CAAAA,CAAG01B,GAAoB,CAAE,OAAA,CAAAp0B,EAAS,SAAA,CAAAf,CAAU,CAAC,CAAC,CAAA,CAAI,GAAGG,CAAAA,CAC7E,QAAA,CAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,YAAA,CACb,QAAA,CAAA,CAAAC,IAAC+S,EAAAA,CAAA,CAAO,GAAA,CAAKgiB,CAAAA,CAAK,SAAA,CAAW,GAAA,CAAKA,EAAK,IAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CACvDh1B,IAAAA,CAAC,OACC,QAAA,CAAA,CAAAC,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,qDAAA,CAAuD,QAAA,CAAA+0B,EAAK,IAAA,CAAK,CAAA,CAC9EA,EAAK,IAAA,EACJ/0B,GAAAA,CAAC,QAAK,SAAA,CAAU,0CAAA,CAA4C,SAAA+0B,CAAAA,CAAK,IAAA,CAAK,EAEvEA,CAAAA,CAAK,KAAA,EACJ/0B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAmD,QAAA,CAAA+0B,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAEjF,CAAA,CAAA,CACF,CAAA,CACCC,GACEh1B,GAAAA,CAACQ,CAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAQ,SAAA,CAAU,OAAA,CAASw0B,EAAU,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CAElE,EAECD,CAAAA,CAAK,GAAA,EACJ/0B,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,wDACV,QAAA,CAAA+0B,CAAAA,CAAK,GAAA,CACR,CAAA,CAGDA,CAAAA,CAAK,KAAA,EACJ/0B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+DACZ,QAAA,CAAA+0B,CAAAA,CAAK,MAAM,GAAA,CAAI,CAACG,EAAMxmB,CAAAA,GACrB3O,IAAAA,CAAC,OAAY,SAAA,CAAU,eAAA,CACrB,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,mDAAA,CAAqD,QAAA,CAAAk1B,CAAAA,CAAK,KAAA,CAAM,CAAA,CAChFl1B,GAAAA,CAAC,QAAK,SAAA,CAAU,8CAAA,CAAgD,SAAAk1B,CAAAA,CAAK,KAAA,CAAM,IAFnExmB,CAGV,CACD,CAAA,CACH,CAAA,CAGDumB,CAAAA,EACGj1B,GAAAA,CAACQ,EAAA,CAAO,SAAA,CAAU,cAAc,OAAA,CAASy0B,CAAAA,CAAW,mBAAO,CAAA,CAAA,CAEjE,CAGN,EACAH,EAAAA,CAAY,WAAA,CAAc,aAAA,KC9EpBK,EAAAA,CAAuB50B,GAAAA,CAC3B,+BACA,CACE,QAAA,CAAU,CACR,MAAA,CAAQ,CACN,OAAA,CAAS,sEAAA,CACT,MAAA,CAAQ,iCAAA,CACR,QAAS,oCAAA,CACT,KAAA,CAAO,iCACT,CACF,CAAA,CACA,gBAAiB,CACf,MAAA,CAAQ,SACV,CACF,CACF,EAUa60B,EAAAA,CAAe51B,WAAAA,CAAM,WAChC,CAAC,CAAE,UAAAE,CAAAA,CAAW,MAAA,CAAA21B,CAAAA,CAAQ,KAAA,CAAA5wB,CAAAA,CAAO,IAAA,CAAAsK,EAAM,WAAA,CAAAuC,CAAAA,CAAa,KAAAtP,CAAAA,CAAM,MAAA,CAAAszB,EAAQ,GAAGz1B,CAAM,EAAGC,CAAAA,GAEtEC,IAAAA,CAAC,OAAI,GAAA,CAAKD,CAAAA,CAAK,UAAWX,CAAAA,CAAGg2B,EAAAA,CAAqB,CAAE,MAAA,CAAAE,CAAAA,CAAQ,SAAA,CAAA31B,CAAU,CAAC,CAAC,EAAI,GAAGG,CAAAA,CAE5E,WAACy1B,CAAAA,EACAt1B,GAAAA,CAAC,OAAI,SAAA,CAAU,gFAAA,CAAiF,CAAA,CAIlGA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EACd,iKAAA,CACAk2B,CAAAA,GAAW,SAAW,8BAAA,CACtBA,CAAAA,GAAW,UAAY,oCAAA,CACvBA,CAAAA,GAAW,OAAA,CAAU,8BAAA,CACrB,8BACF,CAAA,CACG,SAAArzB,CAAAA,EAAQhC,GAAAA,CAAC,QAAK,SAAA,CAAU,wBAAA,CAA0B,SAAAgC,CAAAA,CAAK,CAAA,CAC1D,EAEAjC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,qBAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mDAAA,CAAqD,QAAA,CAAAyE,EAAM,CAAA,CAC1EsK,CAAAA,EAAQ/O,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2CAA4C,QAAA,CAAA+O,CAAAA,CAAK,CAAA,CAAA,CAC5E,CAAA,CACCuC,CAAAA,EACCtR,GAAAA,CAAC,OAAI,SAAA,CAAU,0CAAA,CACZ,SAAAsR,CAAAA,CACH,CAAA,CAAA,CAEJ,GACF,CAGN,EACA8jB,EAAAA,CAAa,WAAA,CAAc,cAAA,CAEpB,IAAMG,GAAW,CAAC,CAAE,SAAA91B,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,GACtCM,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,gBAAiBO,CAAS,CAAA,CAAI,SAAAD,CAAAA,CAAS,EClDnE,IAAM+1B,GAAe,CAAC,CAAE,KAAAn1B,CAAAA,CAAM,KAAA,CAAAo1B,CAAAA,CAAQ,CAAA,CAAG,QAAA,CAAA3K,CAAS,IAA+E,CAC/H,GAAM,CAACnkB,CAAAA,CAAQC,CAAS,EAAIhD,QAAAA,CAAS,KAAK,EACpC8xB,CAAAA,CAAcr1B,CAAAA,CAAK,UAAYA,CAAAA,CAAK,QAAA,CAAS,OAAS,CAAA,CAEtDs1B,CAAAA,CAAgBv0B,GAAwB,CAC5CA,CAAAA,CAAE,eAAA,EAAgB,CACds0B,CAAAA,EACF9uB,CAAAA,CAAU,CAACD,CAAM,CAAA,CAEnBmkB,IAAWzqB,CAAI,EACjB,EAEA,OACEN,IAAAA,CAAC,OACC,QAAA,CAAA,CAAAA,IAAAA,CAAC,OACC,SAAA,CAAWZ,CAAAA,CACT,uKACF,CAAA,CACA,KAAA,CAAO,CAAE,WAAA,CAAa,CAAA,EAAGs2B,CAAAA,CAAQ,EAAA,CAAK,CAAC,CAAA,EAAA,CAAK,EAC5C,OAAA,CAASE,CAAAA,CAER,UAAAD,CAAAA,CACC11B,GAAAA,CAAC,QAAK,SAAA,CAAU,kCAAA,CACb,SAAA2G,CAAAA,CAAS3G,GAAAA,CAAC6T,YAAA,CAAY,SAAA,CAAU,UAAU,CAAA,CAAK7T,GAAAA,CAAC6O,aAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CACpF,CAAA,CAEA7O,GAAAA,CAAC,QAAK,SAAA,CAAU,KAAA,CAAM,EAGvBK,CAAAA,CAAK,IAAA,CACJL,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kCAAA,CAAoC,QAAA,CAAAK,CAAAA,CAAK,IAAA,CAAK,EAE9DL,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,kCAAA,CACb,QAAA,CAAA01B,EAAe/uB,CAAAA,CAAS3G,GAAAA,CAAC41B,UAAAA,CAAA,CAAW,SAAA,CAAU,SAAA,CAAU,EAAK51B,GAAAA,CAAC61B,MAAAA,CAAA,CAAO,SAAA,CAAU,SAAA,CAAU,EAAM71B,GAAAA,CAAC81B,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,EAC5H,CAAA,CAGF91B,GAAAA,CAAC,QAAK,SAAA,CAAU,UAAA,CAAY,SAAAK,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CACzC,CAAA,CAECsG,CAAAA,EAAU+uB,CAAAA,EACT11B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sDACZ,QAAA,CAAAK,CAAAA,CAAK,SAAU,GAAA,CAAKD,CAAAA,EACnBJ,IAACw1B,EAAAA,CAAA,CAA4B,KAAMp1B,CAAAA,CAAO,KAAA,CAAOq1B,EAAQ,CAAA,CAAG,QAAA,CAAU3K,GAAnD1qB,CAAAA,CAAM,EAAuD,CACjF,CAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,EAEa21B,EAAAA,CAAO,CAAC,CAAE,IAAA,CAAA5jB,CAAAA,CAAM,UAAAzS,CAAAA,CAAW,QAAA,CAAAorB,CAAS,CAAA,GAE7C9qB,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,qBAAsBO,CAAS,CAAA,CAC/C,SAAAyS,CAAAA,CAAK,GAAA,CAAK9R,CAAAA,EACTL,GAAAA,CAACw1B,EAAAA,CAAA,CAA2B,KAAMn1B,CAAAA,CAAM,QAAA,CAAUyqB,GAA/BzqB,CAAAA,CAAK,EAAoC,CAC7D,CAAA,CACH,EClEG,IAAM21B,GAAWx2B,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,MAAA+E,CAAAA,CAAQ,UAAA,CAAY,SAAAhF,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEpDC,KAAC,KAAA,CAAA,CACC,GAAA,CAAKD,EACL,SAAA,CAAWX,CAAAA,CACT,gGACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sFAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2BAAA,CACb,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAsC,CAAA,CACrDA,GAAAA,CAAC,OAAI,SAAA,CAAU,sCAAA,CAAuC,EACtDA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wCAAA,CAAyC,CAAA,CAAA,CAC1D,CAAA,CACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oCAAqC,QAAA,CAAAyE,CAAAA,CAAM,EAC1DzE,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,MAAA,CAAO,CAAA,CAAE,KAC1B,CAAA,CACAA,GAAAA,CAAC,OAAI,SAAA,CAAU,qCAAA,CACZ,SAAAP,CAAAA,CACH,CAAA,CAAA,CACF,CAGN,EACAu2B,EAAAA,CAAS,WAAA,CAAc,UAAA,CAEhB,IAAMC,EAAAA,CAAe,CAAC,CAAE,QAAA,CAAAx2B,EAAU,MAAA,CAAAy2B,CAAAA,CAAS,IAAK,SAAA,CAAAx2B,CAAU,CAAA,GAC/DK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,EAAG,YAAA,CAAcO,CAAS,EACxC,QAAA,CAAA,CAAAM,GAAAA,CAAC,QAAK,SAAA,CAAU,8BAAA,CAAgC,QAAA,CAAAk2B,CAAAA,CAAO,CAAA,CACvDl2B,GAAAA,CAAC,QAAM,QAAA,CAAAP,CAAAA,CAAS,GAClB,EC/BK,IAAM02B,GAAU,CAAC,CACtB,UAAAz2B,CAAAA,CACA,YAAA,CAAA02B,EAAe,KAAA,CACf,SAAA,CAAAlzB,CAAAA,CAAY,MAAA,CACZ,KAAA,CAAAmzB,CAAAA,CAAQ,SACR,QAAA,CAAA52B,CAAAA,CACA,GAAGI,CACL,CAAA,GAAoB,CAElB,IAAMy2B,CAAAA,CAAS,CACb,IAAA,CAAM,KAAA,CACN,MAAA,CAAQ,MACR,IAAA,CAAM,KACR,EAEA,OACEv2B,IAAAA,CAAC,OACC,SAAA,CAAWZ,CAAAA,CAAG,8DAAA,CAAgEO,CAAS,CAAA,CACtF,GAAGG,EAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CACT,2DACA+D,CAAAA,GAAc,MAAA,CAAS,kBAAoB,yBAAA,CAC3CkzB,CAAAA,EAAgB,2CAClB,CAAA,CACA,KAAA,CAAO,CAAE,iBAAA,CAAmBE,CAAAA,CAAOD,CAAK,CAAE,CAAA,CAEzC,QAAA,CAAA52B,CAAAA,CACH,CAAA,CACAO,GAAAA,CAAC,OACC,aAAA,CAAY,MAAA,CACZ,UAAWb,CAAAA,CACT,0DAAA,CACA+D,IAAc,MAAA,CAAS,iBAAA,CAAoB,yBAAA,CAC3CkzB,CAAAA,EAAgB,2CAClB,CAAA,CACA,MAAO,CAAE,iBAAA,CAAmBE,EAAOD,CAAK,CAAE,EAEzC,QAAA,CAAA52B,CAAAA,CACH,CAAA,CACAO,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAeN,GACJ,CAEJ,MCjEMu2B,EAAAA,CAAoBh2B,GAAAA,CACxB,4BACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,gBAAA,CACT,QAAS,cAAA,CACT,KAAA,CAAO,cACP,IAAA,CAAM,aAAA,CACN,OAAA,CAAS,aACX,EACA,IAAA,CAAM,CACJ,GAAI,SAAA,CACJ,EAAA,CAAI,cACJ,EAAA,CAAI,SACN,CAAA,CACA,OAAA,CAAS,CACP,IAAA,CAAM,eAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,UACT,IAAA,CAAM,IAAA,CACN,QAAS,KACX,CACF,CACF,CAAA,CAIai2B,EAAAA,CAAYh3B,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,EAAW,OAAA,CAAAe,CAAAA,CAAS,KAAAC,CAAAA,CAAM,OAAA,CAAAyC,CAAAA,CAAS,GAAGtD,CAAM,CAAA,CAAGC,CAAAA,GAE9CE,IAAC,MAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CAAGo3B,EAAAA,CAAkB,CAAE,QAAA91B,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,OAAA,CAAAyC,EAAS,SAAA,CAAAzD,CAAU,CAAC,CAAC,EACrE,GAAGG,CAAAA,CACN,CAGN,EACA22B,EAAAA,CAAU,YAAc,WAAA,CC1CxB,IAAMC,GAAmBl2B,GAAAA,CACvB,yBAAA,CACA,CACE,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,GAAI,+CAAA,CACJ,EAAA,CAAI,oDACJ,EAAA,CAAI,iDACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAM,IACR,CACF,CACF,EAWam2B,EAAAA,CAAWl3B,WAAAA,CAAM,WAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAAgB,CAAAA,CAAM,MAAA,CAAAi2B,EAAS,CAAA,CAAG,KAAA,CAAA10B,EAAQ,EAAA,CAAI,QAAA,CAAAgE,CAAAA,CAAU,UAAA,CAAA2wB,EAAY,QAAA,CAAA71B,CAAAA,CAAU,MAAA+E,CAAAA,CAAO,GAAGjG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACrG,GAAM,CAAC+2B,CAAAA,CAAYC,CAAa,CAAA,CAAIlzB,QAAAA,CAAmB,IAAI,KAAA,CAAM+yB,CAAM,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAC3EI,EAAY71B,MAAAA,CAAoC,EAAE,CAAA,CAExD8C,SAAAA,CAAU,IAAM,CACd,IAAMgM,CAAAA,CAAM/N,CAAAA,CAAM,MAAM,EAAE,CAAA,CAAE,MAAM,CAAA,CAAG00B,CAAM,CAAA,CACrCK,CAAAA,CAAS,CAAC,GAAGhnB,CAAAA,CAAK,GAAG,IAAI,KAAA,CAAM2mB,EAAS3mB,CAAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAClE8mB,EAAcE,CAAM,EACtB,EAAG,CAAC/0B,CAAAA,CAAO00B,CAAM,CAAC,EAElB,IAAMxa,CAAAA,CAAe,CAAC/a,CAAAA,CAAwCkG,CAAAA,GAAkB,CAC9E,IAAM0I,CAAAA,CAAM5O,CAAAA,CAAE,MAAA,CAAO,MACrB,GAAI,KAAA,CAAM,OAAO4O,CAAG,CAAC,EAAG,OAExB,IAAMinB,CAAAA,CAAgB,CAAC,GAAGJ,CAAU,CAAA,CAEpCI,EAAc3vB,CAAK,CAAA,CAAI0I,EAAI,SAAA,CAAUA,CAAAA,CAAI,MAAA,CAAS,CAAC,EAEnD8mB,CAAAA,CAAcG,CAAa,CAAA,CAC3B,IAAMC,EAAcD,CAAAA,CAAc,IAAA,CAAK,EAAE,CAAA,CACzChxB,IAAWixB,CAAW,CAAA,CAElBlnB,GAAO1I,CAAAA,CAAQqvB,CAAAA,CAAS,GAC1BI,CAAAA,CAAU,OAAA,CAAQzvB,CAAAA,CAAQ,CAAC,GAAG,KAAA,EAAM,CAGlC4vB,EAAY,MAAA,GAAWP,CAAAA,EACzBC,IAAaM,CAAW,EAE5B,CAAA,CAEMvvB,CAAAA,CAAgB,CAACvG,CAAAA,CAA0CkG,CAAAA,GAAkB,CAC7ElG,CAAAA,CAAE,GAAA,GAAQ,aAAe,CAACy1B,CAAAA,CAAWvvB,CAAK,CAAA,EAAKA,EAAQ,CAAA,EACzDyvB,CAAAA,CAAU,QAAQzvB,CAAAA,CAAQ,CAAC,GAAG,KAAA,GAElC,CAAA,CAEM6vB,CAAAA,CAAe/1B,GAA4B,CAC/CA,CAAAA,CAAE,gBAAe,CACjB,IAAMg2B,EAAah2B,CAAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,YAAY,EAAE,KAAA,CAAM,CAAA,CAAGu1B,CAAM,CAAA,CACxE,GAAI,CAAC,OAAA,CAAQ,IAAA,CAAKS,CAAU,CAAA,CAAG,OAE/B,IAAMH,CAAAA,CAAgB,CAAC,GAAGJ,CAAU,EACpCO,CAAAA,CAAW,KAAA,CAAM,EAAE,CAAA,CAAE,QAAQ,CAACC,CAAAA,CAAM3oB,CAAAA,GAAM,CACxCuoB,EAAcvoB,CAAC,CAAA,CAAI2oB,EACrB,CAAC,EACDP,CAAAA,CAAcG,CAAa,EAC3B,IAAMC,CAAAA,CAAcD,EAAc,IAAA,CAAK,EAAE,CAAA,CACzChxB,CAAAA,GAAWixB,CAAW,CAAA,CAClBA,CAAAA,CAAY,SAAWP,CAAAA,EAAQC,CAAAA,GAAaM,CAAW,CAAA,CAC3DH,CAAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,IAAIK,CAAAA,CAAW,MAAA,CAAQT,EAAS,CAAC,CAAC,GAAG,KAAA,GAC9D,CAAA,CAEA,OACE32B,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,EAAK,SAAA,CAAWX,CAAAA,CAAGs3B,GAAiB,CAAE,IAAA,CAAA/1B,CAAAA,CAAM,SAAA,CAAAhB,CAAU,CAAC,CAAC,EAAI,GAAGG,CAAAA,CACtE,SAAAg3B,CAAAA,CAAW,GAAA,CAAI,CAACS,CAAAA,CAAOhwB,IACtBtH,GAAAA,CAAC,OAAA,CAAA,CAEC,IAAKqB,CAAAA,EAAM01B,CAAAA,CAAU,QAAQzvB,CAAK,CAAA,CAAIjG,CAAAA,CACtC,IAAA,CAAK,OACL,SAAA,CAAU,SAAA,CACV,UAAW,CAAA,CACX,KAAA,CAAOi2B,EACP,QAAA,CAAUv2B,CAAAA,CACV,QAAA,CAAWK,CAAAA,EAAM+a,EAAa/a,CAAAA,CAAGkG,CAAK,CAAA,CACtC,SAAA,CAAYlG,GAAMuG,CAAAA,CAAcvG,CAAAA,CAAGkG,CAAK,CAAA,CACxC,QAAS6vB,CAAAA,CACT,SAAA,CAAWh4B,EACT,qFAAA,CACA,8EAAA,CACA,kDACA,sCAAA,CACA2G,CAAAA,CACI,4EAAA,CACA,sCACN,GAlBKwB,CAmBP,CACD,EACH,CAEJ,CACF,EACAovB,EAAAA,CAAS,WAAA,CAAc,UAAA,CC1GvB,IAAMa,EAAAA,CAAsBh3B,GAAAA,CAC1B,2FAAA,CACA,CACE,QAAA,CAAU,CACR,KAAM,CACJ,EAAA,CAAI,MACJ,EAAA,CAAI,MAAA,CACJ,EAAA,CAAI,MACN,EACA,KAAA,CAAO,CACL,KAAM,iBAAA,CACN,KAAA,CAAO,iBACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,KAAM,IAAA,CACN,KAAA,CAAO,KACT,CACF,CACF,EAUai3B,EAAAA,CAAch4B,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,IAAA,CAAAgB,CAAAA,CAAM,MAAAoF,CAAAA,CAAO,KAAA,CAAA7D,CAAAA,CAAQ,CAAA,CAAG,SAAAgE,CAAAA,CAAU,GAAA,CAAAiG,EAAM,EAAA,CAAA,CAAA,CAAW,GAAA,CAAAC,EAAM,CAAA,CAAA,CAAA,CAAU,IAAA,CAAAC,CAAAA,CAAO,CAAA,CAAG,SAAArL,CAAAA,CAAU,GAAGlB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAEvH,IAAM23B,CAAAA,CAAkB,IAAM,CACxBx1B,EAAQmK,CAAAA,EAAQF,CAAAA,EAClBjG,IAAWhE,CAAAA,CAAQmK,CAAI,EAE3B,CAAA,CAEMsrB,CAAAA,CAAkB,IAAM,CACxBz1B,EAAQmK,CAAAA,EAAQD,CAAAA,EAClBlG,IAAWhE,CAAAA,CAAQmK,CAAI,EAE3B,CAAA,CAEM+P,CAAAA,CAAgB/a,CAAAA,EAA2C,CAC/D,IAAM4O,CAAAA,CAAM,UAAA,CAAW5O,EAAE,MAAA,CAAO,KAAK,EAChC,KAAA,CAAM4O,CAAG,CAAA,EACZ/J,CAAAA,GAAW+J,CAAG,EAElB,CAAA,CAEA,OACEjQ,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAGo4B,EAAAA,CAAoB,CAAE,IAAA,CAAA72B,EAAM,KAAA,CAAAoF,CAAAA,CAAO,UAAApG,CAAU,CAAC,CAAC,CAAA,CAChE,QAAA,CAAA,CAAAM,GAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,OAAA,CAASy3B,CAAAA,CACT,QAAA,CAAU12B,GAAYkB,CAAAA,EAASiK,CAAAA,CAC/B,SAAA,CAAU,6IAAA,CAEV,SAAAlM,GAAAA,CAAC23B,KAAAA,CAAA,CAAM,SAAA,CAAU,aAAA,CAAc,EACjC,CAAA,CAEA33B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAA+C,CAAA,CAE9DA,GAAAA,CAAC,SACC,GAAA,CAAKF,CAAAA,CACL,KAAK,QAAA,CACL,KAAA,CAAOmC,CAAAA,CACP,QAAA,CAAUka,EACV,QAAA,CAAUpb,CAAAA,CACV,UAAU,4HAAA,CACT,GAAGlB,EACN,CAAA,CAEAG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAA+C,CAAA,CAE9DA,GAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,QAAS03B,CAAAA,CACT,QAAA,CAAU32B,CAAAA,EAAYkB,CAAAA,EAASkK,EAC/B,SAAA,CAAU,6IAAA,CAEV,SAAAnM,GAAAA,CAACkmB,IAAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAc,CAAA,CAChC,CAAA,CAAA,CACF,CAEJ,CACF,EACAsR,GAAY,WAAA,CAAc,aAAA,CC1F1B,IAAMI,EAAAA,CAAsBr3B,GAAAA,CAC1B,uHACA,CACE,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,KAAA,CACJ,EAAA,CAAI,MAAA,CACJ,GAAI,MACN,CAAA,CACA,UAAW,CACT,IAAA,CAAM,cACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,gBAAiB,CACf,IAAA,CAAM,KACN,SAAA,CAAW,KACb,CACF,CACF,CAAA,CAEMs3B,EAAAA,CAAqBt3B,GAAAA,CACzB,6VACA,CACE,QAAA,CAAU,CACR,QAAA,CAAU,CACR,KAAM,qEAAA,CACN,KAAA,CAAO,8EACT,CAAA,CACA,UAAW,CACT,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,SAAU,KAAA,CACV,SAAA,CAAW,KACb,CACF,CACF,EAQau3B,EAAAA,CAAct4B,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAAgB,CAAAA,CAAM,SAAA,CAAAq3B,EAAW,KAAA,CAAA91B,CAAAA,CAAO,QAAA,CAAAgE,CAAAA,CAAU,QAAAxC,CAAAA,CAAS,GAAG5D,CAAM,CAAA,CAAGC,CAAAA,GAEjEE,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,EAAGy4B,EAAAA,CAAoB,CAAE,IAAA,CAAAl3B,CAAAA,CAAM,UAAAq3B,CAAAA,CAAW,SAAA,CAAAr4B,CAAU,CAAC,CAAC,CAAA,CAAI,GAAGG,EACpF,QAAA,CAAA4D,CAAAA,CAAQ,IAAKoE,CAAAA,EACZ9H,IAAAA,CAAC,QAAA,CAAA,CAEC,IAAA,CAAK,SACL,OAAA,CAAS,IAAMkG,IAAW4B,CAAAA,CAAO,KAAK,EACtC,SAAA,CAAW1I,CAAAA,CAAG04B,EAAAA,CAAmB,CAAE,SAAU51B,CAAAA,GAAU4F,CAAAA,CAAO,MAAO,SAAA,CAAAkwB,CAAU,CAAC,CAAC,CAAA,CAEhF,QAAA,CAAA,CAAAlwB,CAAAA,CAAO,MAAQ7H,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,MAAA,CAAQ,QAAA,CAAA6H,EAAO,IAAA,CAAK,CAAA,CACnDA,CAAAA,CAAO,KAAA,CAAA,CAAA,CANHA,EAAO,KAOd,CACD,EACH,CAGN,EACAiwB,GAAY,WAAA,CAAc,aAAA,CC1DnB,IAAME,GAASx4B,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,SAAA,CAAAE,EAAW,GAAA,CAAAyM,CAAAA,CAAM,CAAA,CAAG,KAAA,CAAAlK,EAAQ,CAAA,CAAG,QAAA,CAAAgE,CAAAA,CAAU,QAAA,CAAAgyB,EAAW,KAAA,CAAO,IAAA,CAAAv3B,CAAAA,CAAO,IAAA,CAAM,GAAGb,CAAM,CAAA,CAAGC,IAAQ,CAC7F,GAAM,CAACo4B,CAAAA,CAAYC,CAAa,CAAA,CAAIv0B,QAAAA,CAAwB,IAAI,CAAA,CAE1Dw0B,CAAAA,CAAQ,CACZ,EAAA,CAAI,SAAA,CACJ,GAAI,SAAA,CACJ,EAAA,CAAI,SACN,CAAA,CAEA,OACEp4B,GAAAA,CAAC,KAAA,CAAA,CAAI,IAAKF,CAAAA,CAAK,SAAA,CAAWX,EAAG,yBAAA,CAA2BO,CAAS,CAAA,CAAI,GAAGG,EACrE,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQsM,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAChB,CAAAA,CAAGuD,IAAM,CACzC,IAAMpH,EAAQoH,CAAAA,CAAI,CAAA,CACZ2pB,GAAYH,CAAAA,GAAe,IAAA,CAAOA,CAAAA,CAAaj2B,CAAAA,GAAUqF,EAE/D,OACEtH,GAAAA,CAAC,UAEC,IAAA,CAAK,QAAA,CACL,SAAUi4B,CAAAA,CACV,OAAA,CAAS,IAAMhyB,CAAAA,GAAWqB,CAAK,CAAA,CAC/B,YAAA,CAAc,IAAM,CAAC2wB,CAAAA,EAAYE,EAAc7wB,CAAK,CAAA,CACpD,YAAA,CAAc,IAAM,CAAC2wB,CAAAA,EAAYE,CAAAA,CAAc,IAAI,CAAA,CACnD,UAAWh5B,CAAAA,CACT,yDAAA,CACA84B,CAAAA,EAAY,gCACd,EAEA,QAAA,CAAAj4B,GAAAA,CAACs4B,KAAA,CACC,SAAA,CAAWn5B,EACTi5B,CAAAA,CAAM13B,CAAI,CAAA,CACV,gCAAA,CACA23B,EACI,+BAAA,CACA,mDACN,EACF,CAAA,CAAA,CAnBK3pB,CAoBP,CAEJ,CAAC,CAAA,CACH,CAEJ,CACF,EACAspB,EAAAA,CAAO,WAAA,CAAc,aC9CRO,EAAAA,CAAU,CAAC,CAAE,KAAA,CAAA9rB,CAAAA,CAAO,WAAA,CAAA+rB,CAAAA,CAAa,UAAA94B,CAAAA,CAAW,WAAA,CAAA+4B,CAAY,CAAA,GAEjEz4B,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,wCAAA,CAA0CO,CAAS,EACnE,QAAA,CAAA+M,CAAAA,CAAM,IAAI,CAACL,CAAAA,CAAM9E,IAAU,CAC1B,IAAMoxB,CAAAA,CAAcF,CAAAA,CAAclxB,EAC5BqxB,CAAAA,CAAYH,CAAAA,GAAgBlxB,EAC5BsxB,CAAAA,CAAc,CAAC,CAACH,CAAAA,CAEtB,OACE14B,IAAAA,CAAC,KAAA,CAAA,CAEC,UAAWZ,CAAAA,CACT,iEAAA,CACAy5B,CAAAA,EAAe,gBACjB,EACA,OAAA,CAAS,IAAMA,CAAAA,EAAeH,CAAAA,CAAYnxB,CAAK,CAAA,CAE/C,QAAA,CAAA,CAAAvH,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CACT,yGACAu5B,CAAAA,CACI,8EAAA,CACAC,CAAAA,CACA,uEAAA,CACA,uEACN,CAAA,CAEC,QAAA,CAAAD,EAAc14B,GAAAA,CAACgrB,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAAK1jB,CAAAA,CAAQ,EACzD,CAAA,CAECA,CAAAA,CAAQmF,EAAM,MAAA,CAAS,CAAA,EACtBzM,IAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,6DAAA,CACAu5B,GAAe,8BACjB,CAAA,CACF,GAEJ,CAAA,CAEA34B,IAAAA,CAAC,OAAI,SAAA,CAAU,eAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAK,SAAA,CAAWb,CAAAA,CACf,sBACAw5B,CAAAA,EAAaD,CAAAA,CAAc,gCAAkC,kCAC/D,CAAA,CACG,QAAA,CAAAtsB,CAAAA,CAAK,MACR,CAAA,CACCA,CAAAA,CAAK,aACJpM,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,0DAAA,CACb,QAAA,CAAAoM,CAAAA,CAAK,WAAA,CACR,GAEJ,CAAA,CAAA,CACF,CAAA,CAGC9E,CAAAA,CAAQmF,CAAAA,CAAM,OAAS,CAAA,EACtBzM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,EACT,8DAAA,CACAu5B,CAAAA,EAAe,8BACjB,CAAA,CACF,CAAA,CAAA,CAAA,CAtDGpxB,CAwDP,CAEJ,CAAC,CAAA,CACH,ECvEG,IAAMuxB,GAAY,CAAC,CACxB,SAAAp5B,CAAAA,CACA,SAAA,CAAAC,EACA,IAAA,CAAAgB,CAAAA,CAAO,GAAA,CACP,KAAA,CAAAoB,EAAQ,0BAAA,CACR,GAAGjC,CACL,CAAA,GAAsB,CACpB,IAAMi5B,CAAAA,CAAS53B,MAAAA,CAAuB,IAAI,CAAA,CAqB1C,OACEnB,IAAAA,CAAC,KAAA,CAAA,CACC,IAAK+4B,CAAAA,CACL,WAAA,CAtBqB13B,GAAwC,CAC/D,IAAMC,CAAAA,CAAKy3B,CAAAA,CAAO,QAClB,GAAI,CAACz3B,EAAI,OAET,IAAMC,EAAOD,CAAAA,CAAG,qBAAA,EAAsB,CAChCE,CAAAA,CAAIH,EAAE,OAAA,CAAUE,CAAAA,CAAK,KACrBE,CAAAA,CAAIJ,CAAAA,CAAE,QAAUE,CAAAA,CAAK,GAAA,CAC3BD,CAAAA,CAAG,KAAA,CAAM,YAAY,WAAA,CAAa,CAAA,EAAGE,CAAC,CAAA,EAAA,CAAI,EAC1CF,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,WAAA,CAAa,GAAGG,CAAC,CAAA,EAAA,CAAI,EAC5C,CAAA,CAcI,YAAA,CAZqB,IAAM,CAC7Bs3B,CAAAA,CAAO,OAAA,EAAS,KAAA,CAAM,YAAY,WAAA,CAAa,GAAG,EACpD,CAAA,CAWI,YAAA,CATqB,IAAM,CAC7BA,CAAAA,CAAO,OAAA,EAAS,KAAA,CAAM,YAAY,WAAA,CAAa,GAAG,EACpD,CAAA,CAQI,SAAA,CAAW35B,EACT,yGAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,OACC,SAAA,CAAU,wEAAA,CACV,MAAO,CACL,OAAA,CAAS,mBAAA,CACT,UAAA,CAAY,mBAAmBU,CAAI,CAAA,4DAAA,EAA+DoB,CAAK,CAAA,kBAAA,CACzG,CAAA,CACF,EACA9B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CAAmB,SAAAP,CAAAA,CAAS,CAAA,CAAA,CAC7C,CAEJ,ECrDA,IAAMs5B,EAAAA,CAAwBx4B,GAAAA,CAC5B,kGAAA,CACA,CACE,QAAA,CAAU,CACR,QAAS,CACP,OAAA,CAAS,kKACT,KAAA,CAAO,qGACT,CACF,CAAA,CACA,gBAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,EA0Cay4B,EAAAA,CAAgBx5B,WAAAA,CAAM,UAAA,CACjC,CAAC,CACC,SAAA,CAAAE,CAAAA,CACA,QAAAe,CAAAA,CACA,QAAA,CAAAmb,EACA,YAAA,CAAAqd,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,gBAAAC,CAAAA,CACA,MAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,EACA,kBAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,WAAA,CAAAjzB,CAAAA,CAAc,oBAAA,CACd,KAAA,CAAO2D,EACP,QAAA,CAAApE,CAAAA,CACA,GAAGpG,CACL,CAAA,CAAGC,IAAQ,CACT,GAAM,CAAC+G,CAAAA,CAAeC,CAAgB,CAAA,CAAIlD,QAAAA,CAAS,EAAE,CAAA,CAC/CsD,EAAemD,CAAAA,GAAoB,MAAA,CACnCpI,CAAAA,CAAQiF,CAAAA,CAAgBmD,EAA6BxD,CAAAA,CAErD+yB,CAAAA,CAAc14B,OAAmC,IAAI,CAAA,CACrD24B,EAAe34B,MAAAA,CAAgC,IAAI,CAAA,CAEnD44B,CAAAA,CAAe,IAAM,CACrBF,CAAAA,CAAY,UACdA,CAAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,CAAS,MAAA,CACnCA,CAAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,CAAS,CAAA,EAAGA,EAAY,OAAA,CAAQ,YAAY,MAE1E,CAAA,CAEA51B,SAAAA,CAAU,IAAM,CACd81B,IACF,CAAA,CAAG,CAAC73B,CAAK,CAAC,CAAA,CAEV,IAAM83B,CAAAA,CAAe34B,CAAAA,EAA8C,CACjE,IAAMiF,CAAAA,CAAWjF,EAAE,MAAA,CAAO,KAAA,CACtBk4B,GAAajzB,CAAAA,CAAS,MAAA,CAASizB,CAAAA,GAE9BpyB,CAAAA,EACHJ,EAAiBT,CAAQ,CAAA,CAE3BJ,IAAW7E,CAAC,CAAA,EACd,EAEMuG,CAAAA,CAAiBvG,CAAAA,EAAgD,CACjEA,CAAAA,CAAE,MAAQ,OAAA,EAAW,CAACA,EAAE,QAAA,GAC1BA,CAAAA,CAAE,gBAAe,CACba,CAAAA,CAAM,IAAA,EAAK,EAAK,CAACg3B,CAAAA,GACnBrd,CAAAA,GAAW3Z,CAAK,CAAA,CACXiF,GAAcJ,CAAAA,CAAiB,EAAE,CAAA,CAAA,CAAA,CAG1CjH,CAAAA,CAAM,YAAYuB,CAAC,EACrB,EAEMgb,CAAAA,CAAe,IAAM,CACrB6c,CAAAA,EAAgBG,CAAAA,CAClBA,CAAAA,EAAO,CACEn3B,EAAM,IAAA,EAAK,GACpB2Z,IAAW3Z,CAAK,CAAA,CACXiF,GAAcJ,CAAAA,CAAiB,EAAE,CAAA,EAE1C,CAAA,CAEMkzB,EAAoB,IAAM,CAC1Bb,GAAmBU,CAAAA,CAAa,OAAA,CAClCA,EAAa,OAAA,CAAQ,KAAA,EAAM,CAE3BX,CAAAA,KAEJ,CAAA,CAEMe,CAAAA,CAAoB74B,GAA2C,CAC/DA,CAAAA,CAAE,OAAO,KAAA,EAASA,CAAAA,CAAE,MAAA,CAAO,KAAA,CAAM,OAAS,CAAA,EAC5C+3B,CAAAA,GAAkB/3B,EAAE,MAAA,CAAO,KAAK,EAG9By4B,CAAAA,CAAa,OAAA,GACfA,CAAAA,CAAa,OAAA,CAAQ,MAAQ,EAAA,EAEjC,CAAA,CAEA,OACE95B,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG45B,EAAAA,CAAsB,CAAE,OAAA,CAAAt4B,EAAS,SAAA,CAAAf,CAAU,CAAC,CAAC,CAAA,CAE9D,UAAAM,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,IAAK65B,CAAAA,CACL,SAAA,CAAU,QAAA,CACV,QAAA,CAAUI,EACV,MAAA,CAAQP,CAAAA,CACR,QAAA,CAAUC,CAAAA,CACZ,EAGCH,CAAAA,EAAeA,CAAAA,CAAY,OAAS,CAAA,EACnCx5B,GAAAA,CAAC,OAAI,SAAA,CAAU,gCAAA,CACZ,QAAA,CAAAw5B,CAAAA,CAAY,IAAKU,CAAAA,EAChBn6B,IAAAA,CAAC,OAEC,SAAA,CAAU,kNAAA,CAEV,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mFAAA,CACb,SAAAA,GAAAA,CAAC81B,IAAAA,CAAA,CAAK,SAAA,CAAU,yBAAA,CAA0B,EAC5C,CAAA,CACA91B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0DACb,QAAA,CAAAk6B,CAAAA,CAAI,KACP,CAAA,CACAl6B,GAAAA,CAAC,UACC,OAAA,CAAS,IAAMy5B,CAAAA,GAAqBS,CAAAA,CAAI,EAAE,CAAA,CAC1C,SAAA,CAAU,gLACV,IAAA,CAAK,QAAA,CAEL,SAAAl6B,GAAAA,CAAC0V,CAAAA,CAAA,CAAE,SAAA,CAAU,UAAU,CAAA,CACzB,CAAA,CAAA,CAAA,CAfKwkB,EAAI,EAgBX,CACD,EACH,CAAA,CAGFl6B,GAAAA,CAAC,UAAA,CAAA,CACC,GAAA,CAAMK,GAAS,CACbu5B,CAAAA,CAAY,QAAUv5B,CAAAA,CAClB,OAAOP,GAAQ,UAAA,CAAYA,CAAAA,CAAIO,CAAI,CAAA,CAC9BP,IAAMA,CAAAA,CAA2D,OAAA,CAAUO,CAAAA,EACtF,CAAA,CACA,MAAO4B,CAAAA,CACP,QAAA,CAAU83B,CAAAA,CACV,SAAA,CAAWpyB,EACX,WAAA,CAAajB,CAAAA,CACb,KAAM,CAAA,CACN,SAAA,CAAWvH,EACT,kFAAA,CACA,yCAAA,CACA,gDACF,CAAA,CACA,SAAU85B,CAAAA,EAAgB,CAACG,EAC1B,GAAGv5B,CAAAA,CACN,EAEAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,IAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,KAAK,MAAA,CACL,SAAA,CAAU,6EACV,OAAA,CAASw5B,CAAAA,CACT,KAAK,QAAA,CACL,KAAA,CAAM,aAAA,CAEN,QAAA,CAAAh6B,IAACglB,SAAAA,CAAA,CAAU,UAAU,SAAA,CAAU,CAAA,CACjC,EAECqU,CAAAA,EACCr5B,GAAAA,CAACQ,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,OACL,SAAA,CAAU,4EAAA,CACV,QAAS64B,CAAAA,CACT,IAAA,CAAK,QAAA,CACL,KAAA,CAAM,iBAEN,QAAA,CAAAr5B,GAAAA,CAACm6B,IAAA,CAAI,SAAA,CAAU,UAAU,CAAA,CAC3B,CAAA,CAAA,CAEJ,CAAA,CAEAp6B,IAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAA,CAAAu5B,CAAAA,EACCv5B,KAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CACb,QAAA,CAAA,CAAAkC,EAAM,MAAA,CAAO,GAAA,CAAEq3B,GAClB,CAAA,CAGFt5B,GAAAA,CAACQ,EAAA,CACC,IAAA,CAAK,MAAA,CACL,QAAA,CAAW,CAACyB,CAAAA,CAAM,IAAA,IAAU,CAACg3B,CAAAA,EAAkBA,GAAgB,CAACG,CAAAA,CAChE,OAAA,CAAShd,CAAAA,CACT,UAAWjd,CAAAA,CACT,kDAAA,CACC8C,EAAM,IAAA,EAAK,EAAKg3B,EACb,6EAAA,CACA,mEACN,CAAA,CAEC,QAAA,CAAAA,EACCG,CAAAA,CACEp5B,GAAAA,CAACo6B,OAAA,CAAO,SAAA,CAAU,uBAAuB,CAAA,CAEzCp6B,GAAAA,CAACq6B,QAAAA,CAAA,CAAS,UAAU,uBAAA,CAAwB,CAAA,CAG9Cr6B,IAAC4f,OAAAA,CAAA,CAAQ,UAAU,SAAA,CAAU,CAAA,CAEjC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAEC2Z,CAAAA,EACCv5B,GAAAA,CAAC,OAAI,SAAA,CAAU,iGAAA,CACZ,SAAAu5B,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAP,EAAAA,CAAc,WAAA,CAAc,oBC5QtBsB,EAAAA,CAAqB/5B,GAAAA,CACzB,gFACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,sEAAA,CACT,MAAO,mCAAA,CACP,OAAA,CAAS,qDACX,CACF,CAAA,CACA,eAAA,CAAiB,CACf,QAAS,SACX,CACF,CACF,CAAA,CAoCag6B,EAAAA,CAAa/6B,YAAM,UAAA,CAC9B,CAAC,CACC,SAAA,CAAAE,EACA,OAAA,CAAAe,CAAAA,CACA,SAAAhB,CAAAA,CACA,MAAA,CAAA+6B,EACA,YAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CACA,MAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,GAAGn7B,CACL,EAAGC,CAAAA,GAECC,IAAAA,CAAC,OACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGm7B,GAAmB,CAAE,OAAA,CAAA75B,CAAAA,CAAS,SAAA,CAAAf,CAAU,CAAC,CAAC,CAAA,CACvD,GAAGG,EAGJ,QAAA,CAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,+CAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oIAAA,CACb,SAAAA,GAAAA,CAACq6B,QAAAA,CAAA,CAAS,SAAA,CAAU,wBAAA,CAAyB,EAC/C,CAAA,CACCQ,CAAAA,EACC76B,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,sDAAA,CACb,QAAA,CAAA66B,EACH,CAAA,CAAA,CAEJ,CAAA,CAGA96B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACb,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+EACZ,QAAA,CAAAP,CAAAA,CACH,EAGCq7B,CAAAA,EAAWA,CAAAA,CAAQ,MAAA,CAAS,CAAA,EAC3B96B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4BACZ,QAAA,CAAA86B,CAAAA,CAAQ,IAAI,CAACG,CAAAA,CAAQ3zB,CAAAA,GACpBvH,IAAAA,CAAC,KAEC,IAAA,CAAMk7B,CAAAA,CAAO,IACb,MAAA,CAAO,QAAA,CACP,IAAI,qBAAA,CACJ,SAAA,CAAW97B,CAAAA,CACT,mFAAA,CACA,0DACA,yFACF,CAAA,CAEA,UAAAa,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,wBAAA,CAA0B,QAAA,CAAAi7B,CAAAA,CAAO,KAAA,CAAM,EACvDj7B,GAAAA,CAACk7B,YAAAA,CAAA,CAAa,SAAA,CAAU,qBAAqB,CAAA,CAAA,CAAA,CAXxC5zB,CAYP,CACD,CAAA,CACH,GAEJ,CAAA,CAGAvH,IAAAA,CAAC,OAAI,SAAA,CAAU,2IAAA,CAGb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uFAAA,CACZ,UAAAg7B,CAAAA,EAAS/6B,GAAAA,CAAC,QAAM,QAAA,CAAA+6B,CAAAA,CAAM,EACtBC,CAAAA,EAASh7B,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAg7B,EAAM,CAAA,CAAA,CACzB,CAAA,CAGAj7B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAA,IAAAA,CAACS,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,KACL,SAAA,CAAU,6FAAA,CACV,QAASg6B,CAAAA,CAET,QAAA,CAAA,CAAAx6B,GAAAA,CAACm7B,IAAAA,CAAA,CAAK,SAAA,CAAU,oBAAA,CAAqB,EAAE,MAAA,CAAA,CAEzC,CAAA,CAECR,GACC36B,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,QACR,IAAA,CAAK,MAAA,CACL,UAAU,oFAAA,CACV,OAAA,CAASm6B,EACT,KAAA,CAAM,OAAA,CAEN,QAAA,CAAA36B,GAAAA,CAACo7B,MAAA,CAAM,SAAA,CAAU,cAAc,CAAA,CACjC,CAAA,CAGDR,GACC56B,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,QACR,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,oFAAA,CACV,QAASo6B,CAAAA,CACT,KAAA,CAAM,MAAA,CAEN,QAAA,CAAA56B,IAACq7B,IAAAA,CAAA,CAAK,UAAU,aAAA,CAAc,CAAA,CAChC,EAGFr7B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CAA6C,EAE5DA,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,KAAK,MAAA,CACL,SAAA,CAAU,oFAAA,CACV,OAAA,CAASi6B,EACT,KAAA,CAAM,YAAA,CAEN,SAAAz6B,GAAAA,CAACs7B,SAAAA,CAAA,CAAU,SAAA,CAAU,aAAA,CAAc,CAAA,CACrC,CAAA,CAEAt7B,IAACQ,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,OACL,SAAA,CAAU,oFAAA,CACV,OAAA,CAAS,IAAMk6B,IAAa,IAAI,CAAA,CAChC,MAAM,SAAA,CAEN,QAAA,CAAA16B,IAACu7B,QAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EACpC,CAAA,CAEAv7B,GAAAA,CAACQ,EAAA,CACC,OAAA,CAAQ,QACR,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,oFAAA,CACV,QAAS,IAAMk6B,CAAAA,GAAa,MAAM,CAAA,CAClC,KAAA,CAAM,cAEN,QAAA,CAAA16B,GAAAA,CAACw7B,UAAAA,CAAA,CAAW,UAAU,aAAA,CAAc,CAAA,CACtC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,GACF,CAGN,EAEAjB,EAAAA,CAAW,WAAA,CAAc,aCnMlB,SAASkB,EAAAA,CAAW,CAAE,QAAA,CAAAh8B,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAoB,CAC7E,OACEG,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CACT,qJAAA,CACAO,CACF,EACC,GAAGG,CAAAA,CAEH,SAAAJ,CAAAA,CACH,CAEJ,CCLO,SAASi8B,EAAAA,CAAY,CAC1B,cAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,QAAA,CAAA9Q,CAAAA,CACA,UAAA+Q,CAAAA,CACA,SAAA,CAAAn8B,CAAAA,CACA,GAAGG,CACL,CAAA,CAAqB,CACnB,OACEE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG,qGAAA,CAAuGO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACxI,QAAA,CAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oCACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,kDAAkD,QAAA,CAAA,UAAA,CAAQ,CAAA,CACxEA,GAAAA,CAAC,QAAA,CAAA,CACC,QAAS67B,CAAAA,CACT,SAAA,CAAU,mHAEV,QAAA,CAAA77B,GAAAA,CAACkmB,KAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CAC5B,GACF,CAAA,CAEAnmB,IAAAA,CAAC,OAAI,SAAA,CAAU,UAAA,CACb,UAAAC,GAAAA,CAAC6Z,MAAAA,CAAA,CAAO,SAAA,CAAU,iEAAiE,CAAA,CACnF7Z,GAAAA,CAAC,SACC,IAAA,CAAK,MAAA,CACL,YAAY,oBAAA,CACZ,SAAA,CAAU,qNAAA,CACZ,CAAA,CAAA,CACF,GACF,CAAA,CAEAA,GAAAA,CAACoP,GAAA,CAAW,SAAA,CAAU,SACpB,QAAA,CAAApP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACZ,QAAA,CAAA27B,CAAAA,CAAc,IAAKG,CAAAA,EAClB/7B,IAAAA,CAAC,UAEC,OAAA,CAAS,IAAM+qB,CAAAA,GAAWgR,CAAAA,CAAK,EAAE,CAAA,CACjC,SAAA,CAAW38B,EACT,+EAAA,CACAy8B,CAAAA,GAAaE,EAAK,EAAA,CACd,0HAAA,CACA,8CACN,CAAA,CAEA,UAAA/7B,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,UAAA,CACb,QAAA,CAAA,CAAAC,IAAC+S,EAAAA,CAAA,CAAO,GAAA,CAAK+oB,CAAAA,CAAK,KAAK,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAK,IAAA,CAAK,KAAM,QAAA,CAAUA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAG,CAAA,CAChFA,EAAK,IAAA,CAAK,MAAA,GAAW,UACpB97B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qGAAA,CAAsG,GAE1H,CAAA,CAEAD,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACb,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CACf,sBAAA,CACAy8B,IAAaE,CAAAA,CAAK,EAAA,CAAK,+BAAA,CAAkC,kCAC3D,EACG,QAAA,CAAAA,CAAAA,CAAK,KAAK,IAAA,CACb,CAAA,CACCA,EAAK,WAAA,EACJ97B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+CACb,QAAA,CAAA87B,CAAAA,CAAK,YAAY,SAAA,CAAU,kBAAA,CAAmB,EAAC,CAAG,CAAE,IAAA,CAAM,SAAA,CAAW,OAAQ,SAAU,CAAC,EAC3F,CAAA,CAAA,CAEJ,CAAA,CACA/7B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAC,IAAC,GAAA,CAAA,CAAE,SAAA,CAAWb,EACZ,uBAAA,CACAy8B,CAAAA,GAAaE,EAAK,EAAA,CAAK,qCAAA,CAAwC,kCAAA,CAC/DA,CAAAA,CAAK,UAAY,sBACnB,CAAA,CACG,QAAA,CAAAA,CAAAA,CAAK,SAAW,WAAA,CAAcA,CAAAA,CAAK,WAAA,EAAa,OAAA,CACnD,EACCA,CAAAA,CAAK,WAAA,CACJ97B,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,wHACb,QAAA,CAAA87B,CAAAA,CAAK,WAAA,CACR,CAAA,CACE,MACN,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CA5CKA,EAAK,EA6CZ,CACD,EACH,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCxFO,SAASC,EAAAA,CAAW,CAAE,IAAA,CAAAhH,CAAAA,CAAM,MAAA,CAAAiH,CAAAA,CAAQ,OAAAC,CAAAA,CAAQ,SAAA,CAAAv8B,EAAW,GAAGG,CAAM,EAAoB,CACzF,OACEE,IAAAA,CAAC,KAAA,CAAA,CACC,UAAWZ,CAAAA,CACT,wJAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEJ,QAAA,CAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACZ,QAAA,CAAA,CAAAi8B,CAAAA,EACCh8B,IAAC,QAAA,CAAA,CAAO,OAAA,CAASg8B,EAAQ,SAAA,CAAU,+EAAA,CACjC,QAAA,CAAAh8B,GAAAA,CAACk8B,UAAA,CAAU,SAAA,CAAU,0CAAA,CAA2C,CAAA,CAClE,EAGFn8B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CAA0B,QAASk8B,CAAAA,CAChD,QAAA,CAAA,CAAAj8B,IAAC+S,EAAAA,CAAA,CAAO,IAAKgiB,CAAAA,CAAK,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAK,KAAM,QAAA,CAAUA,CAAAA,CAAK,KAAK,CAAC,CAAA,CAAG,EACjEA,CAAAA,CAAK,MAAA,GAAW,QAAA,EACf/0B,GAAAA,CAAC,QAAK,SAAA,CAAU,qGAAA,CAAsG,GAE1H,CAAA,CAEAD,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CAAiB,OAAA,CAASk8B,CAAAA,CACvC,UAAAj8B,GAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,+DAAA,CAAiE,QAAA,CAAA+0B,EAAK,IAAA,CAAK,CAAA,CACzF/0B,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,0CAAA,CACV,QAAA,CAAA+0B,EAAK,MAAA,GAAW,QAAA,CAAW,SAAW,CAAA,UAAA,EAAaA,CAAAA,CAAK,QAAA,EAAU,kBAAA,CAAmB,EAAC,CAAG,CAAE,KAAM,SAAA,CAAW,MAAA,CAAQ,SAAU,CAAC,CAAC,CAAA,CAAA,CACnI,CAAA,CAAA,CACF,GACF,CAAA,CAEAh1B,IAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,UAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,SAAA,CAAU,kHAAA,CAChB,SAAAA,GAAAA,CAACm8B,KAAAA,CAAA,CAAM,SAAA,CAAU,UAAU,CAAA,CAC7B,CAAA,CACAn8B,GAAAA,CAAC,QAAA,CAAA,CAAO,UAAU,kHAAA,CAChB,QAAA,CAAAA,IAACo8B,KAAAA,CAAA,CAAM,UAAU,SAAA,CAAU,CAAA,CAC7B,CAAA,CACAp8B,GAAAA,CAAC,UACC,OAAA,CAASi8B,CAAAA,CACT,UAAU,kHAAA,CAEV,QAAA,CAAAj8B,IAACq8B,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,EACpC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCrDA,IAAMC,GAAiB/7B,GAAAA,CACrB,sCAAA,CACA,CACE,QAAA,CAAU,CACR,MAAA,CAAQ,CACN,KAAQ,yBAAA,CACR,MAAA,CAAU,mCACV,aAAA,CAAe,0BAAA,CACf,YAAA,CAAc,yBAAA,CACd,KAAQ,6BAAA,CACR,SAAA,CAAW,uBACb,CAAA,CACA,aAAc,CACZ,IAAA,CAAQ,2BAAA,CACR,MAAA,CAAU,2DACV,aAAA,CAAe,2BAAA,CACf,aAAc,2BAAA,CACd,IAAA,CAAQ,+BACR,SAAA,CAAW,wBACb,CACF,CAAA,CACA,gBAAiB,CACf,MAAA,CAAQ,QACV,CACF,CACF,EAUO,SAASg8B,EAAAA,CAAO,CACrB,SAAA,CAAA78B,EACA,MAAA,CAAA88B,CAAAA,CAAS,SACT,QAAA,CAAAC,CAAAA,CAAW,KACX,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAr4B,CAAAA,CAAQ,EACR,IAAA,CAAAs4B,CAAAA,CAAO,KACP,OAAA,CAAA97B,CAAAA,CAAU,MACV,QAAA,CAAApB,CAAAA,CACA,KAAA,CAAAstB,CAAAA,CACA,GAAGltB,CACL,CAAA,CAAgB,CACd,GAAM,CAAE,IAAAC,CAAAA,CAAK,QAAA,CAAA4D,CAAAA,CAAU,WAAA,CAAAG,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAA,CAAK,QAASi5B,CAAAA,EAAYC,CAAAA,GAAY,MAAU,CAAC,EAIzGE,CAAAA,CAAaF,CAAAA,GAAY,OAAYA,CAAAA,CADtBD,CAAAA,CAAYE,EAAO94B,CAAAA,CAAcH,CAAAA,CAAY,IAAA,CA2B5Dm5B,CAAAA,CAAiBP,GAAe,CAAE,MAAA,CAAAE,CAAO,CAAC,EAC1CM,CAAAA,CAAiBF,CAAAA,CAAaN,EAAAA,CAAe,CAAE,aAAcE,CAAc,CAAC,EAAI,EAAA,CAOtF,OACEx8B,IAHWa,CAAAA,CAAUZ,EAAAA,CAAO,KAAA,CAG3B,CACC,IAAKH,CAAAA,CACL,SAAA,CAAWX,EACT09B,CAAAA,CACAC,CAAAA,CACAp9B,CACF,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,GAAG2E,CAAK,CAAA,EAAA,CAAA,CACzB,WAAY,oBAAA,CACZ,GAAG0oB,CACL,CAAA,CACC,GAAGltB,CAAAA,CAEH,QAAA,CAAAJ,EACH,CAEJ,CCrFO,SAASs9B,EAAAA,CAAc,CAC5B,OAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,UAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,SAAA,CAAAz9B,EACA,OAAA,CAAA09B,CAAAA,CACA,QAAAC,CAAAA,CACA,QAAA,CAAAC,CACF,CAAA,CAAuB,CACrB,OACEv9B,IAAAA,CAACw8B,GAAA,CACC,MAAA,CAAO,SACP,SAAA,CAAWp9B,CAAAA,CACT,wCACA89B,CAAAA,CAAQ,aAAA,CAAgB,eAAA,CACxBv9B,CACF,EAGA,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EACd,0EAAA,CACA89B,CAAAA,CAAQ,+BAAA,CAAkC,+BAC5C,EACE,QAAA,CAAAl9B,IAAAA,CAAC8V,GAAA,CACC,QAAA,CAAA,CAAA7V,IAAC8V,EAAAA,CAAA,CAAoB,SAAA,CAAU,6EAAA,CAC7B,SAAA9V,GAAAA,CAACwnB,cAAAA,CAAA,CAAe,SAAA,CAAU,SAAA,CAAU,EACtC,CAAA,CACAznB,IAAAA,CAACgW,EAAAA,CAAA,CAAoB,MAAOknB,CAAAA,CAAQ,KAAA,CAAQ,QAC1C,QAAA,CAAA,CAAAl9B,IAAAA,CAACmW,GAAA,CAAiB,OAAA,CAAS,IAAMknB,CAAAA,GAAUJ,CAAO,CAAA,CAChD,QAAA,CAAA,CAAAh9B,IAACu9B,KAAAA,CAAA,CAAM,UAAU,cAAA,CAAe,CAAA,CAAE,QAAA,CAAA,CACpC,CAAA,CACAx9B,KAACmW,EAAAA,CAAA,CAAiB,QAAS,IAAM,SAAA,CAAU,UAAU,SAAA,CAAU8mB,CAAAA,CAAQ,OAAO,CAAA,CAC5E,UAAAh9B,GAAAA,CAACm7B,IAAAA,CAAA,CAAK,SAAA,CAAU,cAAA,CAAe,EAAE,OAAA,CAAA,CACnC,CAAA,CACAp7B,IAAAA,CAACmW,EAAAA,CAAA,CAAiB,OAAA,CAAS,IAAMmnB,IAAUL,CAAAA,CAAS,WAAI,EACtD,QAAA,CAAA,CAAAh9B,GAAAA,CAACw9B,KAAAA,CAAA,CAAM,UAAU,cAAA,CAAe,CAAA,CAAE,QAAA,CAAA,CACpC,CAAA,CACCP,GACCl9B,IAAAA,CAACmW,EAAAA,CAAA,CAAiB,OAAA,CAAS,IAAMonB,CAAAA,GAAWN,CAAO,EAAG,SAAA,CAAU,cAAA,CAC9D,UAAAh9B,GAAAA,CAAC0kB,MAAAA,CAAA,CAAO,SAAA,CAAU,eAAe,CAAA,CAAE,SAAA,CAAA,CACrC,GAEJ,CAAA,CAAA,CACF,CAAA,CACF,EAEA3kB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CACd,sEACA89B,CAAAA,CACI,sCAAA,CACA,0HACN,CAAA,CAEG,QAAA,CAAA,CAAAD,EAAQ,SAAA,EACPh9B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EACd,sDAAA,CACA89B,CAAAA,CAAQ,kCAAoC,8CAC9C,CAAA,CAAG,kCAEH,CAAA,CAIDD,CAAAA,CAAQ,WAAA,EAAeA,CAAAA,CAAQ,YAAY,MAAA,CAAS,CAAA,EACnDh9B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBACZ,QAAA,CAAAg9B,CAAAA,CAAQ,WAAA,CAAY,GAAA,CAAI9C,GACvBA,CAAAA,CAAI,IAAA,GAAS,QACXl6B,GAAAA,CAACmsB,EAAAA,CAAA,CAEC,GAAA,CAAK+N,CAAAA,CAAI,GAAA,CACT,GAAA,CAAI,aACJ,SAAA,CAAU,0CAAA,CAAA,CAHLA,EAAI,EAIX,CAAA,CAEAn6B,KAAC,KAAA,CAAA,CAAiB,SAAA,CAAU,qEAAA,CAC1B,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iGAAA,CAAkG,QAAA,CAAA,MAAA,CAEjH,EACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CAA2B,SAAAk6B,CAAAA,CAAI,IAAA,EAAQ,OAAO,CAAA,CAAA,CAAA,CAJrDA,CAAAA,CAAI,EAKd,CAEH,CAAA,CACH,CAAA,CAIFl6B,GAAAA,CAAC,OAAI,SAAA,CAAU,yDAAA,CACZ,SAAAg9B,CAAAA,CAAQ,OAAA,CACX,EAGAj9B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CACd,uDACA89B,CAAAA,CAAQ,eAAA,CAAkB,kCAC5B,CAAA,CACE,QAAA,CAAA,CAAAj9B,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CACb,QAAA,CAAAg9B,EAAQ,SAAA,CAAU,kBAAA,CAAmB,EAAC,CAAG,CAAE,KAAM,SAAA,CAAW,MAAA,CAAQ,SAAU,CAAC,EAClF,CAAA,CACCC,CAAAA,EAASE,GACRn9B,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,mBAAA,CACb,QAAA,CAAAg9B,CAAAA,CAAQ,MAAA,GAAW,OAClBh9B,GAAAA,CAACy9B,UAAAA,CAAA,CAAW,SAAA,CAAU,uBAAA,CAAwB,EAC5CT,CAAAA,CAAQ,MAAA,GAAW,WAAA,CACrBh9B,GAAAA,CAACy9B,WAAA,CAAW,SAAA,CAAU,2BAA2B,CAAA,CAEjDz9B,GAAAA,CAACgrB,MAAA,CAAM,SAAA,CAAU,0BAAA,CAA2B,CAAA,CAEhD,GAEJ,CAAA,CAGCgS,CAAAA,CAAQ,SAAA,EAAa,MAAA,CAAO,KAAKA,CAAAA,CAAQ,SAAS,CAAA,CAAE,MAAA,CAAS,GAC5Dh9B,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uCAAA,CACZ,QAAA,CAAA,MAAA,CAAO,QAAQg9B,CAAAA,CAAQ,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAACU,CAAAA,CAAOC,CAAK,CAAA,GACnD59B,IAAAA,CAAC,OAAgB,SAAA,CAAU,gJAAA,CACzB,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAM,QAAA,CAAA09B,CAAAA,CAAM,EACb19B,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,eAAA,CAAiB,QAAA,CAAA29B,CAAAA,CAAM,MAAA,CAAO,IAFtCD,CAGV,CACD,EACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CCpIO,SAASE,EAAAA,CAAY,CAC1B,QAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,UAAAp+B,CAAAA,CACA,OAAA,CAAA09B,EACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,WAAAS,CAAAA,CACA,OAAA,CAAA9X,EACA,aAAA,CAAA+X,CAAAA,CACA,GAAGn+B,CACL,CAAA,CAAqB,CACnB,IAAMo+B,EAAY/8B,MAAAA,CAAuB,IAAI,CAAA,CACvC,CAACg9B,EAAkBC,CAAmB,CAAA,CAAIv6B,QAAAA,CAAS,IAAI,EAE7DI,SAAAA,CAAU,IAAM,CACVk6B,CAAAA,EACFD,CAAAA,CAAU,SAAS,cAAA,CAAe,CAAE,QAAA,CAAU,QAAS,CAAC,EAE5D,CAAA,CAAG,CAACJ,CAAAA,CAAUK,CAAgB,CAAC,CAAA,CAE/B,IAAM1oB,CAAAA,CAAgBpU,CAAAA,EAAqC,CACzD,IAAM4hB,CAAAA,CAAS5hB,EAAE,aAAA,CACXg9B,CAAAA,CAAa,KAAK,GAAA,CAAIpb,CAAAA,CAAO,YAAA,CAAeA,CAAAA,CAAO,aAAeA,CAAAA,CAAO,SAAS,EAAI,EAAA,CAC5Fmb,CAAAA,CAAoBC,CAAU,CAAA,CAE1Bpb,CAAAA,CAAO,SAAA,GAAc,CAAA,EAAKiD,GAAW,CAAC+X,CAAAA,EAAiBD,GACzDA,CAAAA,GAEJ,EAGMM,CAAAA,CAAkBnzB,OAAAA,CAAQ,IACvB2yB,CAAAA,CAAS,OAAO,CAAC/c,CAAAA,CAAQkc,IAAY,CAC1C,IAAMjuB,EAAOiuB,CAAAA,CAAQ,SAAA,CAAU,kBAAA,EAAmB,CAClD,OAAKlc,CAAAA,CAAO/R,CAAI,IACd+R,CAAAA,CAAO/R,CAAI,EAAI,EAAC,CAAA,CAElB+R,CAAAA,CAAO/R,CAAI,EAAE,IAAA,CAAKiuB,CAAO,CAAA,CAClBlc,CACT,EAAG,EAA+B,CAAA,CACjC,CAAC+c,CAAQ,CAAC,CAAA,CAEb,OAAIA,CAAAA,CAAS,MAAA,GAAW,GAAK,CAACG,CAAAA,CAE1Bh+B,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,0FAAA,CAA4FO,CAAS,CAAA,CAAI,GAAGG,EAC7H,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAI,SAAA,CAAU,wHAAA,CACb,SAAAA,GAAAA,CAAC+kB,aAAAA,CAAA,CAAc,SAAA,CAAU,0BAA0B,CAAA,CACrD,CAAA,CACA/kB,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,oDAAoD,QAAA,CAAA,iBAAA,CAAe,CAAA,CACjFA,GAAAA,CAAC,GAAA,CAAA,CAAE,8DAAkD,CAAA,CAAA,CACvD,CAAA,CACF,EAKFA,GAAAA,CAACoP,EAAAA,CAAA,CACC,SAAA,CAAWjQ,CAAAA,CAAG,YAAA,CAAcO,CAAS,EACrC,QAAA,CAAU8V,CAAAA,CACV,KAAK,KAAA,CACL,WAAA,CAAU,SACV,eAAA,CAAc,WAAA,CACb,GAAG3V,CAAAA,CAEJ,SAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gBAAA,CACZ,QAAA,CAAA,CAAAkmB,GACCjmB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CACZ,SAAAg+B,CAAAA,CACCj+B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gDACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kFAAkF,CAAA,CAAE,2BAAA,CAAA,CAErG,EAEAA,GAAAA,CAAC,QAAA,CAAA,CACC,QAAS+9B,CAAAA,CACT,SAAA,CAAU,gEAAA,CACX,QAAA,CAAA,qBAAA,CAED,EAEJ,CAAA,CAGD,MAAA,CAAO,QAAQM,CAAe,CAAA,CAAE,IAAI,CAAC,CAACtvB,CAAAA,CAAMuvB,CAAI,IAC/Cv+B,IAAAA,CAAC,KAAA,CAAA,CAAe,UAAU,WAAA,CACxB,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CACb,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8LACb,QAAA,CAAA+O,CAAAA,CACH,EACF,CAAA,CAEA/O,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACZ,QAAA,CAAAs+B,CAAAA,CAAK,IAAI,CAACC,CAAAA,CAAKj3B,IAAU,CACxB,IAAM21B,CAAAA,CAAQsB,CAAAA,CAAI,WAAaT,CAAAA,CACzBU,CAAAA,CAAUF,EAAKh3B,CAAAA,CAAQ,CAAC,EACxBm3B,CAAAA,CAAUH,CAAAA,CAAKh3B,CAAAA,CAAQ,CAAC,EAGP,CAACk3B,GAAWA,CAAAA,CAAQ,QAAA,GAAaD,EAAI,QAAA,KACtDG,CAAAA,CAAgB,CAACD,CAAAA,EAAWA,EAAQ,QAAA,GAAaF,CAAAA,CAAI,SAE3D,OACEv+B,IAAC+8B,EAAAA,CAAA,CAEC,OAAA,CAASwB,CAAAA,CACT,MAAOtB,CAAAA,CACP,SAAA,CAAW99B,EACT,CAACu/B,CAAAA,EAAiB,QACpB,CAAA,CACA,OAAA,CAAStB,CAAAA,CACT,OAAA,CAASC,EACT,QAAA,CAAUC,CAAAA,CAAAA,CARLiB,EAAI,EASX,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CAAA,CA/BQxvB,CAgCV,CACD,EACD/O,GAAAA,CAAC,KAAA,CAAA,CAAI,IAAKi+B,CAAAA,CAAW,SAAA,CAAU,OAAO,CAAA,CAAA,CACxC,CAAA,CACF,CAEJ,CC/HO,SAASU,EAAAA,CAAU,CACxB,MAAA,CAAAC,CAAAA,CACA,QAAA,CAAA1F,CAAAA,CACA,YAAAxyB,CAAAA,CAAc,mBAAA,CACd,MAAAi3B,CAAAA,CAAQ,GACR,SAAA,CAAAj+B,CAAAA,CACA,GAAGG,CACL,EAAmB,CACjB,GAAM,CAACiF,CAAAA,CAAS+5B,CAAU,CAAA,CAAIj7B,QAAAA,CAAS,EAAE,CAAA,CACnC,CAACk7B,CAAAA,CAAaC,CAAc,EAAIn7B,QAAAA,CAAS,KAAK,EAC9C,CAACo7B,CAAAA,CAAeC,CAAgB,CAAA,CAAIr7B,SAAwB,IAAI,CAAA,CAChE,CAACs7B,CAAAA,CAAcC,CAAe,EAAIv7B,QAAAA,CAAS,CAAC,CAAA,CAC5Cg2B,CAAAA,CAAc14B,OAA4B,IAAI,CAAA,CAE9Ck+B,EAAgBl0B,OAAAA,CAAQ,IACxB8zB,IAAkB,IAAA,CAAa,EAAC,CAC7BrB,CAAAA,CAAM,OAAO0B,CAAAA,EAClBA,CAAAA,CAAE,KAAK,WAAA,EAAY,CAAE,SAASL,CAAAA,CAAc,WAAA,EAAa,CAC3D,EAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CACX,CAACrB,EAAOqB,CAAa,CAAC,CAAA,CAEnBjF,CAAAA,CAAe34B,GAA8C,CACjE,IAAMa,EAAQb,CAAAA,CAAE,MAAA,CAAO,MACvBy9B,CAAAA,CAAW58B,CAAK,CAAA,CAGCA,CAAAA,CAAMb,CAAAA,CAAE,OAAO,cAAA,CAAiB,CAAC,MAE5Ck+B,CAAAA,CADmBr9B,CAAAA,CAAM,KAAA,CAAM,CAAA,CAAGb,EAAE,MAAA,CAAO,cAAc,CAAA,CACzB,KAAA,CAAM,SAAS,EAEjDk+B,CAAAA,EACFL,CAAAA,CAAiBK,CAAAA,CAAa,CAAC,CAAA,EAAK,EAAE,EACtCH,CAAAA,CAAgB,CAAC,GAEjBF,CAAAA,CAAiB,IAAI,CAAA,CAInBrF,CAAAA,CAAY,UACdA,CAAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,CAAS,MAAA,CACnCA,EAAY,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,CAAA,EAAG,KAAK,GAAA,CAAIA,CAAAA,CAAY,QAAQ,YAAA,CAAc,GAAG,CAAC,CAAA,EAAA,CAAA,EAEzF,CAAA,CAEM2F,CAAAA,CAAiBxK,CAAAA,EAAe,CACpC,GAAI,CAAC6E,EAAY,OAAA,CAAS,OAC1B,IAAMjf,CAAAA,CAAQif,CAAAA,CAAY,OAAA,CAAQ,cAAA,CAC5B4F,EAAa16B,CAAAA,CAAQ,KAAA,CAAM,EAAG6V,CAAK,CAAA,CAAE,QAAQ,OAAA,CAAS,CAAA,CAAA,EAAIoa,CAAAA,CAAK,IAAI,GAAG,CAAA,CACtE0K,CAAAA,CAAY36B,EAAQ,KAAA,CAAM6V,CAAK,EACrCkkB,CAAAA,CAAWW,CAAAA,CAAaC,CAAS,CAAA,CACjCR,EAAiB,IAAI,CAAA,CACrBrF,EAAY,OAAA,CAAQ,KAAA,GACtB,CAAA,CAEMjyB,CAAAA,CAAiBvG,CAAAA,EAA2B,CAChD,GAAI49B,CAAAA,GAAkB,IAAA,EAAQI,CAAAA,CAAc,MAAA,CAAS,EAAG,CAClDh+B,CAAAA,CAAE,GAAA,GAAQ,WAAA,EACZA,EAAE,cAAA,EAAe,CACjB+9B,EAAgBv3B,CAAAA,EAAAA,CAASA,CAAAA,CAAO,GAAKw3B,CAAAA,CAAc,MAAM,CAAA,EAChDh+B,CAAAA,CAAE,MAAQ,SAAA,EACnBA,CAAAA,CAAE,gBAAe,CACjB+9B,CAAAA,CAAgBv3B,IAASA,CAAAA,CAAO,CAAA,CAAIw3B,CAAAA,CAAc,MAAA,EAAUA,EAAc,MAAM,CAAA,EACvEh+B,EAAE,GAAA,GAAQ,OAAA,EAAWA,EAAE,GAAA,GAAQ,KAAA,EACxCA,CAAAA,CAAE,cAAA,GACFm+B,CAAAA,CAAcH,CAAAA,CAAcF,CAAY,CAAE,CAAA,EACjC99B,EAAE,GAAA,GAAQ,QAAA,EACnB69B,CAAAA,CAAiB,IAAI,EAEvB,MACF,CAEI79B,EAAE,GAAA,GAAQ,OAAA,EAAW,CAACA,CAAAA,CAAE,QAAA,GAC1BA,CAAAA,CAAE,cAAA,GACFs+B,CAAAA,EAAW,EAEf,EAEMA,CAAAA,CAAa,IAAM,CAClB56B,CAAAA,CAAQ,IAAA,EAAK,GAClB85B,CAAAA,GAAS95B,CAAO,CAAA,CAChB+5B,CAAAA,CAAW,EAAE,CAAA,CACTjF,CAAAA,CAAY,UACdA,CAAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,SAEvC,CAAA,CAEMI,CAAAA,CAAoB,IAAM,CAC9B+E,EAAe,IAAI,CAAA,CAEnB,UAAA,CAAW,IAAM,CACfA,CAAAA,CAAe,KAAK,EACpB7F,CAAAA,KACF,EAAG,GAAI,EACT,CAAA,CAEA,OACEn5B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,EAAG,uDAAA,CAAyDO,CAAS,EAAI,GAAGG,CAAAA,CAEzF,QAAA,CAAA,CAAAm/B,CAAAA,GAAkB,MAAQI,CAAAA,CAAc,MAAA,CAAS,GAChDr/B,IAAAA,CAAC8U,CAAAA,CAAA,CAAQ,SAAA,CAAU,4GAAA,CACjB,QAAA,CAAA,CAAA7U,GAAAA,CAAC,OAAI,SAAA,CAAU,8CAAA,CACb,SAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,mEAAA,CAAoE,QAAA,CAAA,cAAA,CAEpF,CAAA,CACF,CAAA,CACAA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BACZ,QAAA,CAAAo/B,CAAAA,CAAc,IAAI,CAACrK,CAAAA,CAAYhV,CAAAA,GAC9BhgB,IAAAA,CAAC,UAEC,OAAA,CAAS,IAAMw/B,EAAcxK,CAAI,CAAA,CACjC,UAAW51B,CAAAA,CACT,kFAAA,CACA4gB,CAAAA,GAAQmf,CAAAA,CAAe,kBAAoB,uBAC7C,CAAA,CAEA,UAAAl/B,GAAAA,CAAC+S,EAAAA,CAAA,CAAO,GAAA,CAAKgiB,CAAAA,CAAK,MAAA,CAAQ,GAAA,CAAKA,EAAK,IAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CACpDh1B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CACb,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAA2C,QAAA,CAAA+0B,CAAAA,CAAK,KAAK,CAAA,CACpEh1B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAAiC,QAAA,CAAA,CAAA,GAAA,CAAEg1B,CAAAA,CAAK,KAAK,WAAA,EAAY,CAAE,QAAQ,KAAA,CAAO,EAAE,CAAA,CAAA,CAAE,CAAA,CAAA,CAC/F,EACChV,CAAAA,GAAQmf,CAAAA,EACPl/B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kEAAkE,QAAA,CAAA,OAAA,CAAK,CAAA,CAAA,CAAA,CAbnF+0B,CAAAA,CAAK,EAeZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,EAGFh1B,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iBAAA,CACb,QAAA,CAAAA,IAACQ,CAAAA,CAAA,CAAO,QAAQ,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,qDAAqD,OAAA,CAASw5B,CAAAA,CAAmB,SAAU8E,CAAAA,CACvI,QAAA,CAAA9+B,IAACglB,SAAAA,CAAA,CAAU,SAAA,CAAW7lB,CAAAA,CAAG,UAAW2/B,CAAAA,EAAe,6BAA6B,EAAG,CAAA,CACrF,CAAA,CACF,EAEA/+B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CACb,UAAAC,GAAAA,CAAC,UAAA,CAAA,CACC,GAAA,CAAK45B,CAAAA,CACL,MAAO90B,CAAAA,CACP,QAAA,CAAUi1B,CAAAA,CACV,SAAA,CAAWpyB,EACX,WAAA,CAAam3B,CAAAA,CAAc,eAAiBp4B,CAAAA,CAC5C,IAAA,CAAM,EACN,SAAA,CAAU,gNAAA,CACZ,CAAA,CACA3G,IAAAA,CAAC,OAAI,SAAA,CAAU,iHAAA,CACb,UAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,UAAU,qDAAA,CAChB,QAAA,CAAAA,GAAAA,CAACw9B,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,EAC7B,CAAA,CACAx9B,GAAAA,CAAC,UAAO,SAAA,CAAU,qDAAA,CAChB,QAAA,CAAAA,GAAAA,CAAC2/B,OAAA,CAAO,SAAA,CAAU,UAAU,CAAA,CAC9B,CAAA,CAAA,CACF,GACF,CAAA,CAEA3/B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBACZ,QAAA,CAAA8E,CAAAA,CAAQ,MAAK,CACZ9E,GAAAA,CAACQ,EAAA,CACC,OAAA,CAASk/B,CAAAA,CACT,SAAA,CAAU,gEAEV,QAAA,CAAA1/B,GAAAA,CAAC4/B,KAAA,CAAK,SAAA,CAAU,UAAU,CAAA,CAC5B,CAAA,CAEA5/B,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,MAAA,CAAO,SAAA,CAAU,qDAC5C,QAAA,CAAAR,GAAAA,CAACm6B,GAAAA,CAAA,CAAI,UAAU,SAAA,CAAU,CAAA,CAC3B,CAAA,CAEJ,CAAA,CAAA,CACF,GACF,CAEJ,CCxLA,IAAM0F,EAAAA,CAAoBt/B,IACxB,2CAAA,CACA,CACE,SAAU,CACR,WAAA,CAAa,CACX,UAAA,CAAY,gBAAA,CACZ,QAAA,CAAU,gBACZ,CACF,CAAA,CACA,eAAA,CAAiB,CACf,WAAA,CAAa,YACf,CACF,CACF,CAAA,CASau/B,EAAAA,CAAYtgC,WAAAA,CAAM,WAC7B,CACE,CAAE,UAAAE,CAAAA,CAAW,WAAA,CAAA2P,EAAc,YAAA,CAAc,UAAA,CAAA0wB,CAAAA,CAAa,IAAA,CAAM,GAAGlgC,CAAM,CAAA,CACrEC,IAEAE,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKF,CAAAA,CACL,IAAA,CAAMigC,CAAAA,CAAa,MAAA,CAAS,YAC5B,kBAAA,CAAkBA,CAAAA,CAAa,OAAY1wB,CAAAA,CAC3C,SAAA,CAAWlQ,EAAG0gC,EAAAA,CAAkB,CAAE,WAAA,CAAAxwB,CAAAA,CAAa,UAAA3P,CAAU,CAAC,CAAC,CAAA,CAC1D,GAAGG,CAAAA,CACN,CAEJ,EACAigC,EAAAA,CAAU,YAAc,WAAA,CC1BjB,SAASE,EAAAA,CAAY,CAAE,KAAAjL,CAAAA,CAAM,OAAA,CAAArd,EAAS,SAAA,CAAAhY,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAqB,CACpF,OACEE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,EAAG,4FAAA,CAA8FO,CAAS,EAAI,GAAGG,CAAAA,CAC/H,QAAA,CAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,2EAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,UAAO,OAAA,CAAS0X,CAAAA,CAAS,SAAA,CAAU,qEAAA,CAClC,SAAA1X,GAAAA,CAAC0V,CAAAA,CAAA,CAAE,SAAA,CAAU,uBAAA,CAAwB,EACvC,CAAA,CACA1V,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mDAAmD,QAAA,CAAA,cAAA,CAAY,CAAA,CAAA,CACjF,EAEAD,IAAAA,CAACqP,EAAAA,CAAA,CAAW,SAAA,CAAU,QAAA,CACpB,QAAA,CAAA,CAAArP,IAAAA,CAAC,OAAI,SAAA,CAAU,4CAAA,CACb,UAAAC,GAAAA,CAAC+S,EAAAA,CAAA,CAAO,GAAA,CAAKgiB,CAAAA,CAAK,MAAA,CAAQ,GAAA,CAAKA,EAAK,IAAA,CAAM,QAAA,CAAUA,CAAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAG,SAAA,CAAU,yBAAA,CAA0B,CAAA,CACtG/0B,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,kDAAmD,QAAA,CAAA+0B,CAAAA,CAAK,KAAK,CAAA,CAC3E/0B,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gDAAiD,QAAA,CAAA+0B,CAAAA,CAAK,OAAS,mBAAA,CAAoB,CAAA,CAEhGh1B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aAAA,CACb,QAAA,CAAA,CAAAC,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,0DAA0D,QAAA,CAAA,OAAA,CAAK,CAAA,CAC5EA,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,iDAAA,CAAmD,QAAA,CAAA+0B,EAAK,GAAA,EAAO,mCAAA,CAAoC,GAClH,CAAA,CAAA,CACF,CAAA,CAEA/0B,IAAC8/B,EAAAA,CAAA,EAAU,CAAA,CAEX//B,IAAAA,CAAC,OAAI,SAAA,CAAU,eAAA,CACb,UAAAC,GAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,iFAAA,CAAkF,QAAA,CAAA,cAAA,CAAY,CAAA,CAC5GA,GAAAA,CAAC,OAAI,SAAA,CAAU,wBAAA,CACZ,UAAC,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAE,IAAK0O,CAAAA,EACvB3O,IAAAA,CAAC,OAAY,SAAA,CAAU,0GAAA,CACrB,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iEAAA,CACb,SAAAA,GAAAA,CAACmsB,KAAAA,CAAA,CAAM,SAAA,CAAU,UAAU,CAAA,CAC7B,CAAA,CACAnsB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mFAAA,CAAoF,CAAA,CAAA,CAAA,CAJ3F0O,CAKV,CACD,CAAA,CACH,GACF,CAAA,CAEA1O,GAAAA,CAAC8/B,EAAAA,CAAA,EAAU,EAEX9/B,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CACb,QAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2DACb,QAAA,CAAA,CAAAC,GAAAA,CAACigC,KAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CAC1BjgC,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sBAAsB,QAAA,CAAA,oBAAA,CAAkB,CAAA,CAAA,CAC1D,EACAA,GAAAA,CAACsG,EAAAA,CAAA,EAAO,CAAA,CAAA,CACV,EACF,CAAA,CAEAtG,GAAAA,CAAC8/B,GAAA,EAAU,CAAA,CAEX//B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,eAAA,CACb,QAAA,CAAA,CAAAA,KAAC,QAAA,CAAA,CAAO,SAAA,CAAU,+JAChB,QAAA,CAAA,CAAAC,GAAAA,CAACkgC,IAAA,CAAI,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,SACpBnL,CAAAA,CAAK,IAAA,CAAA,CACd,EACAh1B,IAAAA,CAAC,QAAA,CAAA,CAAO,UAAU,8JAAA,CAChB,QAAA,CAAA,CAAAC,GAAAA,CAAC0kB,MAAAA,CAAA,CAAO,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,aAAA,CAAA,CAEhC,GACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCrEO,SAASyb,EAAAA,CAAY,CAC1B,QAAA,CAAA1gC,CAAAA,CACA,QAAA2gC,CAAAA,CAAU,GAAA,CACV,MAAA/7B,CAAAA,CAAQ,CAAA,CACR,UAAA3E,CAAAA,CACA,GAAGG,CACL,CAAA,CAAqB,CACnB,GAAM,CAAE,IAAAC,CAAAA,CAAK,WAAA,CAAA+D,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAI,CAAC,CAAA,CAEzD,OACExD,GAAAA,CAAC,KAAA,CAAA,CAAI,IAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,UAAA,CAAYO,CAAS,CAAA,CAAI,GAAGG,EACtD,QAAA,CAAAL,WAAAA,CAAM,SAAS,GAAA,CAAIC,CAAAA,CAAU,CAACW,CAAAA,CAAOkH,IAChC9H,WAAAA,CAAM,cAAA,CAAeY,CAAK,CAAA,CACrBZ,WAAAA,CAAM,aAAaY,CAAAA,CAAkC,CAE1D,OAAA,CAASyD,CAAAA,CAET,SAAU,KAAA,CAEV,KAAA,CAAOQ,EAASiD,CAAAA,CAAQ84B,CAC1B,CAAC,CAAA,CAEIhgC,CACR,CAAA,CACH,CAEJ,CCzBO,SAASigC,EAAAA,CAAW,CACzB,IAAA,CAAAr7B,EACA,IAAA,CAAA+K,CAAAA,CAAO,OACP,OAAA,CAAAqwB,CAAAA,CAAU,GACV,KAAA,CAAA/7B,CAAAA,CAAQ,CAAA,CACR,SAAA,CAAA3E,EACA,GAAGG,CACL,EAAoB,CAClB,GAAM,CAAE,GAAA,CAAAC,CAAAA,CAAK,WAAA,CAAA+D,CAAY,EAAIL,EAAAA,CAAU,CAAE,UAAW,EAAI,CAAC,EAEnDoH,CAAAA,CAAQmF,CAAAA,GAAS,MAAA,CAAS/K,CAAAA,CAAK,MAAM,EAAE,CAAA,CAAIA,EAAK,KAAA,CAAM,GAAG,EAE/D,OACEhF,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CAAG,iBAAkBO,CAAS,CAAA,CACzC,aAAYsF,CAAAA,CACX,GAAGnF,CAAAA,CAEH,QAAA,CAAA+K,EAAM,GAAA,CAAI,CAACQ,EAAMsD,CAAAA,GAChB3O,IAAAA,CAAC,QAEC,SAAA,CAAWZ,CAAAA,CACT,wFAAA,CACA0E,CAAAA,CACI,mCACA,iCACN,CAAA,CACA,MAAO,CACL,eAAA,CAAiB,GAAGQ,CAAAA,CAASqK,CAAAA,CAAI0xB,CAAQ,CAAA,EAAA,CAC3C,EAEC,QAAA,CAAA,CAAAh1B,CAAAA,CAAM2E,CAAAA,GAAS,MAAA,EAAUrB,IAAM9D,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAI,GAAA,CAAM,KAXpD8D,CAYP,CACD,EACH,CAEJ,CCxCO,SAAS4xB,EAAAA,CAAS,CACvB,QAAA,CAAA7gC,CAAAA,CACA,KAAA,CAAA42B,CAAAA,CAAQ,GACR,SAAA,CAAAnzB,CAAAA,CAAY,WACZ,SAAA,CAAAxD,CAAAA,CACA,GAAGG,CACL,CAAA,CAAkB,CAChB,IAAMC,EAAMoB,MAAAA,CAAuB,IAAI,EAEvC,OAAA8C,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAUnE,CAAAA,CAAI,QACpB,GAAI,CAACmE,EAAS,OAEd,IAAMuR,EAAe,IAAM,CACzB,IAAMlU,CAAAA,CAAO2C,EAAQ,qBAAA,EAAsB,CACrCs8B,EAAe,MAAA,CAAO,WAAA,CAG5B,GAAIj/B,CAAAA,CAAK,GAAA,CAAMi/B,CAAAA,EAAgBj/B,CAAAA,CAAK,OAAS,CAAA,CAAG,OAMhD,IAAMk/B,CAAAA,CAAAA,CAFgBD,CAAAA,CAAe,GAAMj/B,CAAAA,CAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,IAEnC+0B,CAAAA,CAE7BnzB,CAAAA,GAAc,UAAA,CAChBe,CAAAA,CAAQ,MAAM,SAAA,CAAY,CAAA,eAAA,EAAkBu8B,CAAS,CAAA,MAAA,CAAA,CAErDv8B,EAAQ,KAAA,CAAM,SAAA,CAAY,eAAeu8B,CAAS,CAAA,SAAA,EAEtD,EAEA,OAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUhrB,CAAAA,CAAc,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CACjEA,CAAAA,GAEO,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,CAChE,CAAA,CAAG,CAAC6gB,CAAAA,CAAOnzB,CAAS,CAAC,CAAA,CAGnBlD,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CAAG,wBAAyBO,CAAS,CAAA,CAC/C,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CC/CO,SAASghC,GAAS,CAAE,QAAA,CAAAhhC,EAAU,QAAA,CAAAihC,CAAAA,CAAW,GAAK,SAAA,CAAAhhC,CAAU,CAAA,CAAkB,CAC/E,IAAMI,CAAAA,CAAMoB,MAAAA,CAAuB,IAAI,CAAA,CAEjCyL,CAAAA,CAAmBvL,GAAkB,CACzC,IAAMC,CAAAA,CAAKvB,CAAAA,CAAI,QACf,GAAI,CAACuB,CAAAA,CAAI,OAET,GAAM,CAAE,OAAA,CAAAkL,CAAAA,CAAS,OAAA,CAAAo0B,CAAQ,CAAA,CAAIv/B,CAAAA,CACvB,CAAE,IAAA,CAAA0H,CAAAA,CAAM,IAAAD,CAAAA,CAAK,KAAA,CAAA2D,CAAAA,CAAO,MAAA,CAAA8Q,CAAO,CAAA,CAAIjc,CAAAA,CAAG,uBAAsB,CAExDuwB,CAAAA,CAAU9oB,EAAO0D,CAAAA,CAAQ,CAAA,CACzBqlB,CAAAA,CAAUhpB,CAAAA,CAAMyU,EAAS,CAAA,CAEzBsjB,CAAAA,CAAYr0B,EAAUqlB,CAAAA,CACtBiP,CAAAA,CAAYF,EAAU9O,CAAAA,CAGtB3W,CAAAA,CAAY,IAAA,CAAK,GAAA,CAAI1O,EAAO8Q,CAAM,CAAA,CAAI,IACxC,IAAA,CAAK,GAAA,CAAIsjB,CAAS,CAAA,CAAI1lB,CAAAA,EAAa,IAAA,CAAK,GAAA,CAAI2lB,CAAS,CAAA,CAAI3lB,CAAAA,EAC3D7Z,EAAG,KAAA,CAAM,WAAA,CAAY,UAAW,CAAA,EAAGu/B,CAAAA,CAAYF,CAAQ,CAAA,EAAA,CAAI,EAC3Dr/B,CAAAA,CAAG,KAAA,CAAM,YAAY,SAAA,CAAW,CAAA,EAAGw/B,EAAYH,CAAQ,CAAA,EAAA,CAAI,CAAA,GAE3Dr/B,CAAAA,CAAG,MAAM,WAAA,CAAY,SAAA,CAAW,KAAK,CAAA,CACrCA,CAAAA,CAAG,MAAM,WAAA,CAAY,SAAA,CAAW,KAAK,CAAA,EAEzC,EAEMy/B,CAAAA,CAAmB,IAAM,CAC7B,IAAMz/B,EAAKvB,CAAAA,CAAI,OAAA,CACXuB,CAAAA,GACFA,CAAAA,CAAG,MAAM,WAAA,CAAY,SAAA,CAAW,KAAK,CAAA,CACrCA,CAAAA,CAAG,MAAM,WAAA,CAAY,SAAA,CAAW,KAAK,CAAA,EAEzC,EAEA,OAAA2C,SAAAA,CAAU,KACR,MAAA,CAAO,gBAAA,CAAiB,YAAa2I,CAAe,CAAA,CAC7C,IAAM,MAAA,CAAO,oBAAoB,WAAA,CAAaA,CAAe,GACnE,CAAC+zB,CAAQ,CAAC,CAAA,CAGX1gC,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CAAG,gFAAiFO,CAAS,CAAA,CACxG,aAAcohC,CAAAA,CACd,KAAA,CAAO,CACL,SAAA,CAAW,sDACb,CAAA,CAEC,QAAA,CAAArhC,EACH,CAEJ,CClDO,SAASshC,EAAAA,CAAa,CAC3B,KAAA,CAAA9+B,CAAAA,CACA,SAAAqB,CAAAA,CAAW,GAAA,CACX,MAAAe,CAAAA,CAAQ,CAAA,CACR,cAAA28B,CAAAA,CAAgB,CAAA,CAChB,SAAA,CAAAthC,CAAAA,CACA,GAAGG,CACL,CAAA,CAAsB,CACpB,GAAM,CAACohC,CAAAA,CAAcC,CAAe,CAAA,CAAIt9B,QAAAA,CAAS,CAAC,CAAA,CAC5C,CAAE,IAAA9D,CAAAA,CAAK,WAAA,CAAA+D,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAI,CAAC,CAAA,CACnD29B,EAAejgC,MAAAA,CAAsB,IAAI,EAE/C,OAAA8C,SAAAA,CAAU,IAAM,CACd,GAAI,CAACH,CAAAA,CAAa,OAElB,IAAMV,CAAAA,CAAW03B,GAAsB,CAChCsG,CAAAA,CAAa,OAAA,GAASA,CAAAA,CAAa,QAAUtG,CAAAA,CAAAA,CAClD,IAAMuG,EAAW,IAAA,CAAK,GAAA,CAAA,CAAKvG,EAAYsG,CAAAA,CAAa,OAAA,CAAU98B,CAAAA,EAASf,CAAAA,CAAU,CAAC,CAAA,CAElF,GAAI89B,GAAY,CAAA,CAAG,CACjB,IAAM3W,CAAAA,CAAU2W,CAAAA,CAAWn/B,CAAAA,CAC3Bi/B,CAAAA,CAAgBzW,CAAO,EACzB,CAEI2W,EAAW,CAAA,EACb,qBAAA,CAAsBj+B,CAAO,EAEjC,CAAA,CAEMk+B,CAAAA,CAAU,UAAA,CAAW,IAAM,CAC/B,qBAAA,CAAsBl+B,CAAO,EAC/B,CAAA,CAAGkB,CAAK,CAAA,CAER,OAAO,IAAM,YAAA,CAAag9B,CAAO,CACnC,CAAA,CAAG,CAACx9B,CAAAA,CAAa5B,EAAOqB,CAAAA,CAAUe,CAAK,CAAC,CAAA,CAGtCrE,IAAC,MAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CAAG,gCAAiCO,CAAS,CAAA,CACvD,GAAGG,CAAAA,CAEH,SAAAohC,CAAAA,CAAa,OAAA,CAAQD,CAAa,CAAA,CACrC,CAEJ,CCzCO,SAASM,GAAS,CACvB,KAAA,CAAA78B,EACA,IAAA,CAAM88B,CAAAA,CACN,YAAAC,CAAAA,CAAc,KAAA,CACd,YAAA,CAAAh4B,CAAAA,CACA,SAAAzI,CAAAA,CAAW,KAAA,CACX,SAAAtB,CAAAA,CACA,SAAA,CAAAC,EACA,gBAAA,CAAA+hC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,GAAG7hC,CACL,CAAA,CAAkB,CAChB,GAAM,CAAC8hC,EAAkBC,CAAmB,CAAA,CAAIh+B,QAAAA,CAAS49B,CAAW,EAC9Dt6B,CAAAA,CAAeq6B,CAAAA,GAAmB,OAClC56B,CAAAA,CAASO,CAAAA,CAAeq6B,EAAiBI,CAAAA,CAEzChM,CAAAA,CAAe,IAAM,CACzB,GAAI50B,CAAAA,CAAU,OACd,IAAM8gC,CAAAA,CAAW,CAACl7B,CAAAA,CACbO,CAAAA,EACH06B,CAAAA,CAAoBC,CAAQ,EAE9Br4B,CAAAA,GAAeq4B,CAAQ,EACzB,CAAA,CAEA,OACE9hC,KAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,8GAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEH,QAAA,CAAA,CAAA4E,CAAAA,EACC1E,KAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS41B,EACT,QAAA,CAAU50B,CAAAA,CACV,UAAW5B,CAAAA,CACT,sIAAA,CACA4B,GAAY,+BAAA,CACZ0gC,CACF,CAAA,CAEC,QAAA,CAAA,CAAAh9B,EACDzE,GAAAA,CAAC6T,WAAAA,CAAA,CACC,SAAA,CAAW1U,CAAAA,CACT,sFACAwH,CAAAA,EAAU,YACZ,CAAA,CACF,CAAA,CAAA,CACF,EAGF3G,GAAAA,CAAC,KAAA,CAAA,CACC,UAAWb,CAAAA,CACT,8CAAA,CACAwH,EAAS,iBAAA,CAAoB,iBAC/B,CAAA,CAEA,QAAA,CAAA3G,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBACb,QAAA,CAAAA,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,gBAAA,CAAkBsF,CAAAA,EAAS,OAAQi9B,CAAgB,CAAA,CACnE,SAAAjiC,CAAAA,CACH,CAAA,CACF,EACF,CAAA,CAAA,CACF,CAEJ,CCzEO,SAASqiC,EAAAA,CAAW,CACzB,OAAA,CAAArhC,CAAAA,CAAU,UACV,IAAA,CAAAuE,CAAAA,CACA,WAAA+8B,CAAAA,CAAa,IAAA,CACb,SAAA,CAAAriC,CAAAA,CACA,GAAGG,CACL,CAAA,CAAoB,CAClB,IAAMmiC,CAAAA,CAAaD,EACf,mGAAA,CACA,kEAAA,CAEJ,OAAIthC,CAAAA,GAAY,MAEZT,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,oDAAA,CAAsDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACvF,QAAA,CAAAG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gEAAgE,CAAA,CACjF,CAAA,CAIAS,IAAY,MAAA,CAEZV,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,EAAG6iC,CAAAA,CAAYtiC,CAAS,EAAI,GAAGG,CAAAA,CAC7C,UAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yEAAA,CAA0E,CAAA,CACzFA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0EAAA,CAA2E,CAAA,CAC1FA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAkD,CAAA,CAAA,CACnE,CAAA,CACCgF,GAAQhF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2DAAA,CAA6D,SAAAgF,CAAAA,CAAK,CAAA,CAAA,CAC7F,CAAA,CAIAvE,CAAAA,GAAY,OAEZT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG6iC,EAAYtiC,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7C,QAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+HACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAI,SAAA,CAAU,2DAAA,CAA4D,CAAA,CAC3EA,GAAAA,CAAC,OAAI,SAAA,CAAU,6BAAA,CAA8B,GAC/C,CAAA,CACCgF,CAAAA,EAAQhF,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oEAAA,CAAsE,QAAA,CAAAgF,EAAK,CAAA,CAAA,CACtG,CAAA,CACF,EAIAvE,CAAAA,GAAY,OAAA,CAEZT,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG6iC,CAAAA,CAAY,gDAAiDtiC,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC9F,QAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAC,IAACiiC,OAAAA,CAAA,CAAQ,UAAU,iCAAA,CAAkC,CAAA,CACpDj9B,GAAQhF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+CAAA,CAAiD,SAAAgF,CAAAA,CAAK,CAAA,CAAA,CACjF,EACF,CAAA,CAMFhF,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG6iC,CAAAA,CAAYtiC,CAAS,EAAI,GAAGG,CAAAA,CAC7C,QAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACiiC,QAAA,CAAQ,SAAA,CAAU,qCAAqC,CAAA,CACvDj9B,CAAAA,EAAQhF,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sDAAA,CAAwD,QAAA,CAAAgF,EAAK,CAAA,CAAA,CACxF,CAAA,CACF,CAEJ,CCnEO,SAASk9B,EAAAA,CAAe,CAC7B,OAAA1F,CAAAA,CAAS,MAAA,CACT,QAAA,CAAAl5B,CAAAA,CAAW,IACX,iBAAA,CAAA6+B,CAAAA,CAAoB,MACpB,SAAA,CAAAziC,CAAAA,CACA,SAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAwB,CACtB,GAAM,CAACgM,EAAW2M,CAAY,CAAA,CAAI5U,SAAS,KAAK,CAAA,CAEhDI,SAAAA,CAAU,IAAM,CACd,GAAIm+B,CAAAA,EAAsB,SAAiB,mBAAA,CACxC,QAAA,CAAiB,oBAAoB,IAAM,CAC1C3pB,CAAAA,CAAa,IAAI,EACnB,CAAC,CAAA,CAAA,KACI,CACL,IAAMhH,CAAAA,CAAQ,sBAAsB,IAAM,CACxCgH,CAAAA,CAAa,IAAI,EACnB,CAAC,CAAA,CACD,OAAO,IAAM,qBAAqBhH,CAAK,CACzC,CACF,CAAA,CAAG,CAAC2wB,CAAiB,CAAC,EAyBtB,IAAMC,CAAAA,CAvBU,CACd,IAAA,CAAM,CACJ,OAAA,CAAS,WAAA,CACT,QAAS,aACX,CAAA,CACA,WAAY,CACV,OAAA,CAAS,0BACT,OAAA,CAAS,2BACX,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,oBAAA,CACT,QAAS,uBACX,CAAA,CACA,KAAM,CACJ,OAAA,CAAS,mBAAA,CACT,OAAA,CAAS,oBACX,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,EAAA,CACT,QAAS,EACX,CACF,CAAA,CAE8B5F,CAAM,EAEpC,OACEx8B,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CACT,0BACA0M,CAAAA,CAAYu2B,CAAAA,CAAc,OAAA,CAAUA,CAAAA,CAAc,QAClD1iC,CACF,CAAA,CACA,MAAO,CACL,kBAAA,CAAoB,GAAG4D,CAAQ,CAAA,EAAA,CAAA,CAC/B,kBAAA,CAAoB6+B,CAAAA,CAAoB,eAAiB,MAC3D,CAAA,CACC,GAAGtiC,CAAAA,CAEH,QAAA,CAAAJ,EACH,CAEJ","file":"index.mjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface PrimaryButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n}\r\n\r\nexport const PrimaryButton = React.forwardRef<HTMLButtonElement, PrimaryButtonProps>(\r\n ({ children, className, leftIcon, rightIcon, ...props }, ref) => {\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type ?? 'button'}\r\n className={cn(\r\n 'group relative inline-flex items-center justify-center gap-2 rounded-2xl px-5 py-3',\r\n 'bg-gradient-to-r from-blue-600 via-purple-600 to-blue-600',\r\n 'text-white font-semibold tracking-tight',\r\n 'shadow-[0_12px_40px_rgba(99,102,241,.45)]',\r\n 'transition-all duration-300',\r\n 'hover:scale-[1.03] hover:shadow-[0_18px_60px_rgba(99,102,241,.6)]',\r\n 'active:scale-[0.98]',\r\n 'disabled:opacity-50 disabled:cursor-not-allowed',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/40',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute inset-0 rounded-2xl bg-gradient-to-r from-white/18 via-white/5 to-white/18 opacity-0 blur-lg transition-opacity duration-300 group-hover:opacity-100\" />\r\n <span className=\"relative inline-flex items-center gap-2\">\r\n {leftIcon}\r\n {children}\r\n {rightIcon}\r\n </span>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nPrimaryButton.displayName = 'PrimaryButton';","import * as React from 'react';\r\nimport { cn } from './cn';\r\n\r\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(\r\n ({ children, ...props }, forwardedRef) => {\r\n if (!React.isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child = children as React.ReactElement & { ref?: React.Ref<HTMLElement> };\r\n\r\n return React.cloneElement(child, {\r\n ...props,\r\n ...child.props,\r\n ref: (node: HTMLElement | null) => {\r\n // Handle forwardedRef\r\n if (typeof forwardedRef === 'function') {\r\n forwardedRef(node);\r\n } else if (forwardedRef) {\r\n (forwardedRef as React.MutableRefObject<HTMLElement | null>).current = node;\r\n }\r\n\r\n // Handle children's own ref\r\n const { ref } = child;\r\n if (typeof ref === 'function') {\r\n ref(node);\r\n } else if (ref && 'current' in ref) {\r\n (ref as React.MutableRefObject<HTMLElement | null>).current = node;\r\n }\r\n },\r\n className: cn(props.className, child.props.className),\r\n });\r\n }\r\n);\r\n\r\nSlot.displayName = 'Slot';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Slot } from '../../utils/Slot';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst buttonVariants = cva(\r\n \"group relative inline-flex items-center justify-center font-semibold tracking-tight transition-all duration-300 focus:outline-none focus:ring-2 focus:ring-purple-400/40 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100 disabled:active:scale-100 hover:scale-[1.02] active:scale-[0.98]\",\r\n {\r\n variants: {\r\n variant: {\r\n primary: \"bg-gradient-to-r from-blue-600 via-purple-600 to-blue-600 text-white border-transparent\",\r\n secondary: \"bg-zinc-100 text-zinc-900 border border-zinc-200 hover:bg-zinc-200 dark:bg-white/[0.05] dark:text-white dark:border-white/10 dark:hover:bg-white/[0.10] dark:hover:border-white/20\",\r\n outline: \"bg-transparent text-zinc-900 border border-zinc-300 hover:bg-zinc-100 dark:text-white dark:border-white/20 dark:hover:bg-white/[0.05] dark:hover:border-white/30\",\r\n ghost: \"bg-transparent text-zinc-600 hover:text-zinc-900 hover:bg-zinc-100 dark:text-white/80 dark:hover:text-white dark:hover:bg-white/[0.05] border-transparent\",\r\n danger: \"bg-rose-500/10 text-rose-600 border border-rose-500/20 hover:bg-rose-500/20 hover:border-rose-500/30 hover:text-rose-700 dark:text-rose-400 dark:hover:text-rose-300\",\r\n success: \"bg-emerald-500/10 text-emerald-600 border border-emerald-500/20 hover:bg-emerald-500/20 hover:border-emerald-500/30 hover:text-emerald-700 dark:text-emerald-400 dark:hover:text-emerald-300\",\r\n alert: \"bg-amber-500/10 text-amber-600 border border-amber-500/20 hover:bg-amber-500/20 hover:border-amber-500/30 hover:text-amber-700 dark:text-amber-400 dark:hover:text-amber-300\",\r\n },\r\n size: {\r\n sm: \"h-9 px-3 text-xs gap-1.5\",\r\n md: \"h-11 px-5 text-sm gap-2\",\r\n lg: \"h-14 px-8 text-base gap-3\",\r\n icon: \"h-10 w-10 p-0 flex items-center justify-center\",\r\n },\r\n shape: {\r\n default: \"rounded-2xl\",\r\n pill: \"rounded-full\",\r\n square: \"rounded-lg\",\r\n },\r\n shadow: {\r\n true: \"\",\r\n false: \"\",\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: \"primary\",\r\n shadow: true,\r\n class: \"shadow-[0_12px_40px_rgba(99,102,241,.45)] hover:shadow-[0_18px_60px_rgba(99,102,241,.6)]\",\r\n },\r\n {\r\n variant: \"secondary\",\r\n shadow: true,\r\n class: \"shadow-sm\",\r\n }\r\n ],\r\n defaultVariants: {\r\n variant: \"primary\",\r\n size: \"md\",\r\n shape: \"default\",\r\n shadow: true,\r\n },\r\n }\r\n);\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n /** Whether the button should be rendered as a child component using Slot */\r\n asChild?: boolean;\r\n /** Icon to display on the left side of the button text */\r\n leftIcon?: React.ReactNode;\r\n /** Icon to display on the right side of the button text */\r\n rightIcon?: React.ReactNode;\r\n /** Whether the button is in a loading state, showing a spinner and disabling interaction */\r\n isLoading?: boolean;\r\n}\r\n\r\n/**\r\n * A versatile button component with multiple variants, sizes, and states.\r\n * Supports glassmorphism, gradients, and icons.\r\n */\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ \r\n className, \r\n variant, \r\n size, \r\n shape,\r\n shadow,\r\n asChild = false,\r\n leftIcon, \r\n rightIcon, \r\n isLoading,\r\n children,\r\n disabled,\r\n ...props \r\n }, ref) => {\r\n const Comp = asChild ? Slot : \"button\";\r\n \r\n return (\r\n <Comp\r\n ref={ref}\r\n disabled={disabled || isLoading}\r\n className={cn(buttonVariants({ variant, size, shape, shadow, className }))}\r\n {...props}\r\n >\r\n {variant === 'primary' && !asChild && (\r\n <span className=\"pointer-events-none absolute inset-0 rounded-[inherit] bg-gradient-to-r from-white/18 via-white/5 to-white/18 opacity-0 blur-lg transition-opacity duration-300 group-hover:opacity-100\" />\r\n )}\r\n \r\n <span className=\"relative inline-flex items-center justify-center\">\r\n {isLoading && (\r\n <svg className=\"animate-spin -ml-1 mr-2 h-4 w-4 text-current\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\r\n <path className=\"opacity-75\" fill=\"currentColor\" 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\"></path>\r\n </svg>\r\n )}\r\n {!isLoading && leftIcon && <span className={cn(\"mr-2\", size === 'sm' && \"mr-1.5\")}>{leftIcon}</span>}\r\n {children}\r\n {!isLoading && rightIcon && <span className={cn(\"ml-2\", size === 'sm' && \"ml-1.5\")}>{rightIcon}</span>}\r\n </span>\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n","import React, { useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface GlowButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n}\r\n\r\nexport const GlowButton = React.forwardRef<HTMLButtonElement, GlowButtonProps>(\r\n ({ children, className, leftIcon, rightIcon, ...props }, ref) => {\r\n const localRef = useRef<HTMLButtonElement>(null);\r\n\r\n const handleMove = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n const el = localRef.current;\r\n if (!el) return;\r\n const rect = el.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n el.style.setProperty('--mouse-x', `${x}px`);\r\n el.style.setProperty('--mouse-y', `${y}px`);\r\n };\r\n\r\n // Merge refs\r\n React.useImperativeHandle(ref, () => localRef.current as HTMLButtonElement);\r\n\r\n return (\r\n <button\r\n ref={localRef}\r\n onMouseMove={handleMove}\r\n type={props.type ?? 'button'}\r\n className={cn(\r\n 'group relative inline-flex items-center justify-center gap-2 rounded-2xl px-6 py-3',\r\n 'bg-zinc-100 border border-zinc-200 text-zinc-900',\r\n 'dark:bg-white/[0.03] dark:border-white/10 dark:text-white',\r\n 'font-semibold tracking-tight overflow-hidden',\r\n 'transition-all duration-300',\r\n 'hover:bg-zinc-200 dark:hover:bg-white/[0.05] hover:scale-[1.02]',\r\n 'active:scale-[0.98]',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/40',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {/* Mouse follow glow */}\r\n <div \r\n className=\"pointer-events-none absolute -inset-px opacity-0 transition-opacity duration-300 group-hover:opacity-100\"\r\n style={{\r\n background: 'radial-gradient(600px circle at var(--mouse-x) var(--mouse-y), rgba(255,255,255,0.4), transparent 40%)'\r\n }}\r\n />\r\n \r\n {/* Border glow */}\r\n <div \r\n className=\"pointer-events-none absolute -inset-px rounded-2xl opacity-0 transition-opacity duration-300 group-hover:opacity-100\"\r\n style={{\r\n background: 'radial-gradient(300px circle at var(--mouse-x) var(--mouse-y), rgba(255,255,255,0.6), transparent 40%)',\r\n maskImage: 'linear-gradient(#fff, #fff), linear-gradient(#fff, #fff)',\r\n maskClip: 'content-box, border-box',\r\n maskComposite: 'exclude',\r\n WebkitMaskComposite: 'xor',\r\n padding: '1px'\r\n }}\r\n />\r\n\r\n <span className=\"relative inline-flex items-center gap-2 z-10\">\r\n {leftIcon}\r\n {children}\r\n {rightIcon}\r\n </span>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nGlowButton.displayName = 'GlowButton';\r\n","import React, { useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\n// Internal components for MetricCard\r\nfunction TokenBadge({\r\n accent = 'teal',\r\n children,\r\n}: {\r\n accent?: 'teal' | 'amber' | 'violet' | 'blue' | 'rose' | 'emerald' | 'indigo';\r\n children: React.ReactNode;\r\n}) {\r\n const map: Record<string, string> = {\r\n teal: 'bg-teal-500/90',\r\n amber: 'bg-amber-400/95',\r\n violet: 'bg-violet-500/90',\r\n blue: 'bg-blue-500/90',\r\n rose: 'bg-rose-500/90',\r\n emerald: 'bg-emerald-500/90',\r\n indigo: 'bg-indigo-500/90',\r\n };\r\n\r\n return (\r\n <div className={cn('flex h-11 w-11 items-center justify-center rounded-2xl', map[accent] ?? map.teal)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nfunction AccentGlow({ accent = 'teal' }: { accent?: 'teal' | 'amber' | 'violet' | 'blue' | 'rose' | 'emerald' | 'indigo' }) {\r\n const map: Record<string, string> = {\r\n teal: 'from-teal-400/25 via-teal-400/10 to-transparent',\r\n amber: 'from-amber-300/25 via-amber-300/10 to-transparent',\r\n violet: 'from-violet-400/25 via-violet-400/10 to-transparent',\r\n blue: 'from-blue-400/25 via-blue-400/10 to-transparent',\r\n rose: 'from-rose-400/25 via-rose-400/10 to-transparent',\r\n emerald: 'from-emerald-400/25 via-emerald-400/10 to-transparent',\r\n indigo: 'from-indigo-400/25 via-indigo-400/10 to-transparent',\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'pointer-events-none absolute -right-12 top-1/2 h-40 w-48 -translate-y-1/2 rotate-12',\r\n 'bg-gradient-to-l blur-2xl',\r\n map[accent] ?? map.teal\r\n )}\r\n />\r\n );\r\n}\r\n\r\nfunction SparkWave({ color = 'currentColor' }: { color?: string }) {\r\n return (\r\n <svg\r\n viewBox=\"0 0 120 40\"\r\n className=\"h-6 w-16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M2 22c10 0 10-10 20-10s10 10 20 10 10-10 20-10 10 10 20 10 10-10 20-10\"\r\n stroke={color}\r\n strokeWidth=\"4\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n opacity=\"0.95\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport interface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\r\n accent?: 'teal' | 'amber' | 'violet' | 'blue' | 'rose' | 'emerald' | 'indigo';\r\n icon: React.ReactNode;\r\n value: React.ReactNode;\r\n subtext?: React.ReactNode;\r\n showWave?: boolean;\r\n onClick?: () => void;\r\n}\r\n\r\nexport const MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\r\n ({ accent = 'teal', icon, value, subtext, showWave = false, onClick, className, ...props }, ref) => {\r\n const localRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const setCenter = () => {\r\n const el = localRef.current;\r\n if (!el) return;\r\n const r = el.getBoundingClientRect();\r\n el.style.setProperty('--x', `${Math.round(r.width / 2)}px`);\r\n el.style.setProperty('--y', `${Math.round(r.height / 2)}px`);\r\n };\r\n\r\n const handleMove = (e: React.MouseEvent) => {\r\n const el = localRef.current;\r\n if (!el) return;\r\n const r = el.getBoundingClientRect();\r\n el.style.setProperty('--x', `${e.clientX - r.left}px`);\r\n el.style.setProperty('--y', `${e.clientY - r.top}px`);\r\n };\r\n\r\n const waveColors: Record<string, string> = {\r\n teal: 'rgba(45,212,191,.95)',\r\n amber: 'rgba(251,191,36,.95)',\r\n violet: 'rgba(167,139,250,.95)',\r\n blue: 'rgba(96,165,250,.95)',\r\n rose: 'rgba(251,113,133,.95)',\r\n emerald: 'rgba(52,211,153,.95)',\r\n indigo: 'rgba(129,140,248,.95)',\r\n };\r\n\r\n const waveColor = waveColors[accent] ?? waveColors.teal;\r\n\r\n return (\r\n <div\r\n ref={(node) => {\r\n localRef.current = node;\r\n if (typeof ref === 'function') ref(node);\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\r\n }}\r\n onMouseEnter={setCenter}\r\n onMouseMove={handleMove}\r\n onClick={onClick}\r\n className={cn(\r\n 'group relative overflow-hidden rounded-2xl',\r\n 'bg-white border border-gray-200 shadow-sm',\r\n 'dark:bg-transparent dark:bg-gradient-to-b dark:from-white/[0.06] dark:to-white/[0.03]',\r\n 'dark:border-white/[0.10]',\r\n 'dark:shadow-[0_18px_55px_rgba(0,0,0,.55)]',\r\n 'transition-transform duration-300 hover:scale-[1.015]',\r\n onClick && 'cursor-pointer',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className=\"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100\"\r\n style={{\r\n background:\r\n 'radial-gradient(180px at var(--x, 50%) var(--y, 50%), rgba(255,255,255,.16), transparent 60%)',\r\n }}\r\n />\r\n <div className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(220px_140px_at_18%_18%,rgba(255,255,255,.08),transparent_60%)]\" />\r\n <AccentGlow accent={accent} />\r\n\r\n <div className=\"relative p-5\">\r\n <div className=\"flex items-start justify-between gap-4\">\r\n <TokenBadge accent={accent}>{icon}</TokenBadge>\r\n </div>\r\n\r\n <div className=\"mt-4 flex items-end justify-between gap-4\">\r\n <div className=\"min-w-0\">\r\n <div className=\"truncate text-2xl font-semibold tracking-tight text-gray-900 dark:text-white\">{value}</div>\r\n {subtext ? <div className=\"mt-1 text-sm text-gray-500 dark:text-white/45\">{subtext}</div> : null}\r\n </div>\r\n {showWave ? <SparkWave color={waveColor} /> : null}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nMetricCard.displayName = 'MetricCard';","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface TextProps extends React.HTMLAttributes<HTMLElement> {\r\n as?: 'p' | 'span' | 'div' | 'label' | 'code';\r\n variant?: 'default' | 'muted' | 'subtle' | 'lead' | 'error' | 'success' | 'warning' | 'info';\r\n size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';\r\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\r\n code?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\r\n ({ \r\n as: Component = 'p', \r\n variant = 'default', \r\n size = 'base', \r\n weight = 'normal',\r\n code = false,\r\n className, \r\n children, \r\n ...props \r\n }, ref) => {\r\n return (\r\n <Component\r\n ref={ref as React.Ref<any>}\r\n className={cn(\r\n 'leading-relaxed transition-colors duration-200',\r\n code && 'font-mono bg-zinc-100 dark:bg-white/[0.03] px-1.5 py-0.5 rounded text-[0.9em]',\r\n {\r\n // Variants\r\n 'text-zinc-900 dark:text-white': variant === 'default',\r\n 'text-zinc-500 dark:text-zinc-400': variant === 'muted',\r\n 'text-zinc-400 dark:text-zinc-500': variant === 'subtle',\r\n 'text-lg md:text-xl text-zinc-600 dark:text-zinc-300 font-light': variant === 'lead',\r\n 'text-rose-600 dark:text-rose-400': variant === 'error',\r\n 'text-emerald-600 dark:text-emerald-400': variant === 'success',\r\n 'text-amber-600 dark:text-amber-400': variant === 'warning',\r\n 'text-sky-600 dark:text-sky-400': variant === 'info',\r\n \r\n // Sizes\r\n 'text-xs': size === 'xs',\r\n 'text-sm': size === 'sm',\r\n 'text-base': size === 'base',\r\n 'text-lg': size === 'lg',\r\n 'text-xl': size === 'xl',\r\n 'text-2xl': size === '2xl',\r\n\r\n // Weights\r\n 'font-light': weight === 'light',\r\n 'font-normal': weight === 'normal',\r\n 'font-medium': weight === 'medium',\r\n 'font-semibold': weight === 'semibold',\r\n 'font-bold': weight === 'bold',\r\n },\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nText.displayName = 'Text';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\r\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\r\n weight?: 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold' | 'black';\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(\r\n ({ as: Component = 'h2', weight = 'bold', className, children, ...props }, ref) => {\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cn(\r\n 'tracking-tight text-zinc-900 dark:text-white transition-colors duration-200',\r\n {\r\n 'text-4xl md:text-5xl lg:text-6xl': Component === 'h1',\r\n 'text-3xl md:text-4xl': Component === 'h2',\r\n 'text-2xl md:text-3xl': Component === 'h3',\r\n 'text-xl md:text-2xl': Component === 'h4',\r\n 'text-lg md:text-xl': Component === 'h5',\r\n 'text-base md:text-lg': Component === 'h6',\r\n },\r\n {\r\n 'font-normal': weight === 'normal',\r\n 'font-medium': weight === 'medium',\r\n 'font-semibold': weight === 'semibold',\r\n 'font-bold': weight === 'bold',\r\n 'font-extrabold': weight === 'extrabold',\r\n 'font-black': weight === 'black',\r\n },\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nHeading.displayName = 'Heading';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface TextGradientProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /**\r\n * Starting color (Tailwind class)\r\n * @default 'from-blue-500'\r\n */\r\n from?: string;\r\n /**\r\n * Ending color (Tailwind class)\r\n * @default 'to-purple-500'\r\n */\r\n to?: string;\r\n /**\r\n * Middle color (Tailwind class)\r\n */\r\n via?: string;\r\n /**\r\n * Gradient direction\r\n * @default 'r'\r\n */\r\n direction?: 'r' | 'l' | 't' | 'b' | 'tr' | 'tl' | 'br' | 'bl';\r\n /**\r\n * Enable animated gradient shift\r\n * @default false\r\n */\r\n animate?: boolean;\r\n}\r\n\r\nexport const TextGradient = React.forwardRef<HTMLSpanElement, TextGradientProps>(\r\n ({ \r\n from = 'from-blue-500', \r\n to = 'to-purple-500', \r\n via, \r\n direction = 'r', \r\n animate = false, \r\n className, \r\n children, \r\n ...props \r\n }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(\r\n 'bg-clip-text text-transparent bg-gradient-to-' + direction,\r\n from,\r\n to,\r\n via,\r\n animate && 'animate-gradient bg-[length:200%_auto]',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n );\r\n }\r\n);\r\n\r\nTextGradient.displayName = 'TextGradient';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ShinyTextProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /**\r\n * The color of the shimmer effect\r\n * @default 'rgba(255,255,255,0.3)'\r\n */\r\n shimmerColor?: string;\r\n /**\r\n * Duration of the animation\r\n * @default '2s'\r\n */\r\n duration?: string;\r\n /**\r\n * Base text color\r\n * @default 'currentColor'\r\n */\r\n baseColor?: string;\r\n}\r\n\r\nexport const ShinyText = React.forwardRef<HTMLSpanElement, ShinyTextProps>(\r\n ({ \r\n shimmerColor = 'rgba(255,255,255,0.3)', \r\n duration = '2s', \r\n baseColor = 'currentColor',\r\n className, \r\n children, \r\n ...props \r\n }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(\r\n 'inline-block bg-clip-text text-transparent animate-shimmer will-change-[background-position]',\r\n className\r\n )}\r\n style={{\r\n backgroundImage: `linear-gradient(90deg, ${baseColor} 0%, ${baseColor} 40%, ${shimmerColor} 50%, ${baseColor} 60%, ${baseColor} 100%)`,\r\n backgroundSize: '200% 100%',\r\n animationDuration: duration,\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n }}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n );\r\n }\r\n);\r\n\r\nShinyText.displayName = 'ShinyText';\r\n","import { useEffect, useState, useRef } from 'react';\r\n\r\nexport interface UseInViewOptions {\r\n threshold?: number | number[];\r\n rootMargin?: string;\r\n root?: Element | null;\r\n enabled?: boolean;\r\n}\r\n\r\nexport function useInView(options: UseInViewOptions = { threshold: 0.1, rootMargin: '0px', enabled: true }) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const [isInView, setIsInView] = useState(false);\r\n const [hasAnimated, setHasAnimated] = useState(false);\r\n const { enabled = true } = options;\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n \r\n const element = ref.current;\r\n if (!element) return;\r\n\r\n const observer = new IntersectionObserver(([entry]) => {\r\n if (entry && entry.isIntersecting) {\r\n setIsInView(true);\r\n setHasAnimated(true);\r\n } else {\r\n setIsInView(false);\r\n }\r\n }, options);\r\n\r\n observer.observe(element);\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [options.threshold, options.rootMargin, options.root, enabled]);\r\n\r\n return { ref, isInView, hasAnimated };\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { useInView } from '../../hooks/useInView';\r\n\r\nexport interface RevealProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n direction?: 'up' | 'down' | 'left' | 'right';\r\n duration?: number;\r\n delay?: number;\r\n boxColor?: string;\r\n}\r\n\r\nexport function Reveal({\r\n children,\r\n direction = 'up',\r\n duration = 0.5,\r\n delay = 0,\r\n boxColor = 'bg-blue-500',\r\n className,\r\n ...props\r\n}: RevealProps) {\r\n const { ref, hasAnimated } = useInView({ threshold: 0.2 });\r\n\r\n const directionClasses = {\r\n up: 'translate-y-full',\r\n down: '-translate-y-full',\r\n left: 'translate-x-full',\r\n right: '-translate-x-full',\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"relative overflow-hidden inline-block\", className)}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"transition-all ease-out\",\r\n hasAnimated ? \"translate-x-0 translate-y-0 opacity-100\" : cn(\"opacity-0\", directionClasses[direction])\r\n )}\r\n style={{ \r\n transitionDuration: `${duration}s`,\r\n transitionDelay: `${delay}s`\r\n }}\r\n >\r\n {children}\r\n </div>\r\n \r\n {/* Reveal Box Overlay */}\r\n <div\r\n className={cn(\r\n \"absolute inset-0 z-10 transition-transform ease-in-out\",\r\n boxColor,\r\n hasAnimated ? (direction === 'left' || direction === 'right' ? 'scale-x-0' : 'scale-y-0') : 'scale-100'\r\n )}\r\n style={{ \r\n transitionDuration: `${duration}s`,\r\n transitionDelay: `${delay}s`,\r\n transformOrigin: direction === 'up' ? 'top' : direction === 'down' ? 'bottom' : direction === 'left' ? 'left' : 'right'\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Reveal } from '../feedback/Reveal';\r\n\r\nexport interface HeroTextProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * The main title text\r\n */\r\n title: string;\r\n /**\r\n * Text to be highlighted with a gradient\r\n */\r\n highlight?: string;\r\n /**\r\n * Subtitle text below the main title\r\n */\r\n subtitle?: string;\r\n /**\r\n * Tailwind gradient classes for the highlight\r\n * @default 'from-blue-400 via-indigo-500 to-purple-600'\r\n */\r\n gradient?: string;\r\n /**\r\n * Enable entrance animation\r\n * @default true\r\n */\r\n animate?: boolean;\r\n /**\r\n * Add a subtle glow effect behind the highlighted text\r\n * @default true\r\n */\r\n glow?: boolean;\r\n}\r\n\r\nexport const HeroText = ({\r\n title,\r\n highlight,\r\n subtitle,\r\n gradient = 'from-blue-400 via-indigo-500 to-purple-600',\r\n animate = true,\r\n glow = true,\r\n className,\r\n ...props\r\n}: HeroTextProps) => {\r\n const content = (\r\n <div className={cn(\"flex flex-col items-center text-center space-y-6\", className)} {...props}>\r\n <h1 className=\"text-5xl md:text-7xl font-bold tracking-tight text-white leading-tight\">\r\n {title}{' '}\r\n {highlight && (\r\n <span className=\"relative inline-block\">\r\n <span className={cn(\"bg-clip-text text-transparent bg-gradient-to-r\", gradient)}>\r\n {highlight}\r\n </span>\r\n {glow && (\r\n <span className={cn(\r\n \"absolute inset-0 blur-3xl opacity-40 -z-10 bg-gradient-to-r\",\r\n gradient\r\n )} aria-hidden=\"true\">\r\n {highlight}\r\n </span>\r\n )}\r\n </span>\r\n )}\r\n </h1>\r\n {subtitle && (\r\n <p className=\"text-lg md:text-xl text-white/50 max-w-2xl mx-auto leading-relaxed\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n\r\n if (animate) {\r\n return (\r\n <Reveal direction=\"up\" duration={1}>\r\n {content}\r\n </Reveal>\r\n );\r\n }\r\n\r\n return content;\r\n};\r\n\r\nHeroText.displayName = 'HeroText';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface LetterPullupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * The text to animate\r\n */\r\n text: string;\r\n /**\r\n * Delay between each letter animation in seconds\r\n * @default 0.05\r\n */\r\n delay?: number;\r\n}\r\n\r\nexport const LetterPullup = ({ text, delay = 0.05, className, ...props }: LetterPullupProps) => {\r\n const letters = text.split('');\r\n \r\n return (\r\n <div className={cn('flex flex-wrap justify-center overflow-hidden py-2', className)} {...props}>\r\n {letters.map((letter, i) => (\r\n <span\r\n key={i}\r\n className=\"inline-block animate-pullup opacity-0\"\r\n style={{ \r\n animation: `pullup 0.6s cubic-bezier(0.2, 0.8, 0.2, 1) forwards`,\r\n animationDelay: `${i * delay}s`,\r\n whiteSpace: letter === ' ' ? 'pre' : 'normal'\r\n }}\r\n >\r\n {letter}\r\n </span>\r\n ))}\r\n <style>{`\r\n @keyframes pullup {\r\n from { \r\n opacity: 0; \r\n transform: translateY(100%); \r\n }\r\n to { \r\n opacity: 1; \r\n transform: translateY(0); \r\n }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n};\r\n\r\nLetterPullup.displayName = 'LetterPullup';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\r\n required?: boolean;\r\n}\r\n\r\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\r\n ({ className, children, required, ...props }, ref) => {\r\n return (\r\n <label\r\n ref={ref}\r\n className={cn(\r\n 'text-sm font-medium leading-none text-gray-700 dark:text-white/80 peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {required && <span className=\"ml-1 text-rose-500\">*</span>}\r\n </label>\r\n );\r\n }\r\n);\r\n\r\nLabel.displayName = 'Label';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nconst inputVariants = cva(\r\n \"w-full rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-4 py-3 border border-gray-200 dark:border-white/[0.10] text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-white/30 focus:outline-none focus:ring-2 focus:ring-purple-400/30 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200\",\r\n {\r\n variants: {\r\n hasError: {\r\n true: \"border-rose-400/25 focus:ring-rose-300/25\",\r\n false: \"\",\r\n },\r\n hasLeftIcon: {\r\n true: \"pl-10\",\r\n false: \"\",\r\n },\r\n hasRightIcon: {\r\n true: \"pr-10\",\r\n false: \"\",\r\n },\r\n },\r\n defaultVariants: {\r\n hasError: false,\r\n hasLeftIcon: false,\r\n hasRightIcon: false,\r\n },\r\n }\r\n);\r\n\r\nexport interface TextInputProps \r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\r\n Omit<VariantProps<typeof inputVariants>, 'hasError'> {\r\n /** Label text displayed above the input */\r\n label?: string;\r\n /** Error message displayed below the input. If provided, the input will show an error state. */\r\n error?: string;\r\n /** Icon to display on the left side inside the input */\r\n leftIcon?: React.ReactNode;\r\n /** Icon to display on the right side inside the input */\r\n rightIcon?: React.ReactNode;\r\n /** Additional CSS classes for the container div */\r\n containerClassName?: string;\r\n}\r\n\r\n/**\r\n * A styled text input component with support for labels, error messages, and icons.\r\n * Follows the library's glassmorphic design system.\r\n */\r\nexport const TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\r\n ({ className, containerClassName, label, error: errorMsg, leftIcon, rightIcon, id, ...props }, ref) => {\r\n const inputId = id || React.useId();\r\n const hasError = !!errorMsg;\r\n\r\n return (\r\n <div className={cn('flex flex-col gap-1.5', containerClassName)}>\r\n {label && <Label htmlFor={inputId} required={props.required}>{label}</Label>}\r\n \r\n <div className=\"relative flex items-center\">\r\n {leftIcon && (\r\n <div className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-white/35\">\r\n {leftIcon}\r\n </div>\r\n )}\r\n \r\n <input\r\n ref={ref}\r\n id={inputId}\r\n className={cn(inputVariants({ \r\n hasError: hasError, \r\n hasLeftIcon: !!leftIcon, \r\n hasRightIcon: !!rightIcon, \r\n className \r\n }))}\r\n {...props}\r\n />\r\n\r\n {rightIcon && (\r\n <div className=\"absolute right-2 top-1/2 -translate-y-1/2\">\r\n {rightIcon}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {errorMsg && (\r\n <p className=\"text-xs text-rose-400 animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {errorMsg}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextInput.displayName = 'TextInput';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface CheckboxProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\r\n label?: string;\r\n error?: string;\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (event: { target: { checked: boolean } }) => void;\r\n}\r\n\r\nexport const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\r\n ({ className, label, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {\r\n const inputId = id || React.useId();\r\n const [isChecked, setIsChecked] = React.useState(defaultChecked || checked || false);\r\n\r\n React.useEffect(() => {\r\n if (checked !== undefined) {\r\n setIsChecked(checked);\r\n }\r\n }, [checked]);\r\n\r\n const handleClick = () => {\r\n if (disabled) return;\r\n const newValue = !isChecked;\r\n setIsChecked(newValue);\r\n if (onChange) {\r\n onChange({ target: { checked: newValue } } as any);\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex flex-col gap-1.5\", className)}>\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n id={inputId}\r\n role=\"checkbox\"\r\n aria-checked={isChecked}\r\n aria-label={label}\r\n onClick={handleClick}\r\n disabled={disabled}\r\n className={cn(\r\n 'flex items-center gap-3 rounded-2xl border border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-white/[0.03] px-4 py-3',\r\n 'hover:bg-gray-100 dark:hover:bg-white/[0.04] transition-colors',\r\n disabled && 'opacity-50 cursor-not-allowed'\r\n )}\r\n {...props}\r\n >\r\n <span\r\n aria-hidden=\"true\"\r\n className={cn(\r\n 'grid h-6 w-6 place-items-center rounded-lg border',\r\n isChecked \r\n ? 'border-emerald-400/30 bg-emerald-400/15' \r\n : 'border-gray-300 dark:border-white/10 bg-white dark:bg-white/[0.02]'\r\n )}\r\n >\r\n {isChecked ? (\r\n <svg className=\"h-4 w-4 text-emerald-200\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\r\n </svg>\r\n ) : null}\r\n </span>\r\n {label && (\r\n <span className=\"text-sm text-gray-700 dark:text-white/70\">{label}</span>\r\n )}\r\n </button>\r\n {error && (\r\n <p className=\"text-xs text-rose-500 mt-1 ml-1\">{error}</p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'type'> {\r\n label?: string;\r\n error?: string;\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (event: { target: { checked: boolean } }) => void;\r\n}\r\n\r\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\r\n ({ className, label, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {\r\n const inputId = id || React.useId();\r\n const [isChecked, setIsChecked] = React.useState(defaultChecked || checked || false);\r\n\r\n React.useEffect(() => {\r\n if (checked !== undefined) {\r\n setIsChecked(checked);\r\n }\r\n }, [checked]);\r\n\r\n const handleClick = () => {\r\n if (disabled) return;\r\n const newValue = !isChecked;\r\n setIsChecked(newValue);\r\n if (onChange) {\r\n onChange({ target: { checked: newValue } } as any);\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex flex-col gap-1.5\", className)}>\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n id={inputId}\r\n role=\"switch\"\r\n aria-checked={isChecked}\r\n onClick={handleClick}\r\n disabled={disabled}\r\n className={cn(\r\n 'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-black disabled:cursor-not-allowed disabled:opacity-50',\r\n isChecked ? 'bg-emerald-500' : 'bg-gray-200 dark:bg-white/[0.06]'\r\n )}\r\n {...props}\r\n >\r\n <span\r\n className={cn(\r\n 'pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0 transition-transform',\r\n isChecked ? 'translate-x-5' : 'translate-x-0'\r\n )}\r\n />\r\n </button>\r\n {label && (\r\n <Label \r\n htmlFor={inputId} \r\n className=\"cursor-pointer select-none text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\r\n onClick={handleClick}\r\n >\r\n {label}\r\n </Label>\r\n )}\r\n </div>\r\n {error && (\r\n <p className=\"text-xs text-rose-500 mt-1 ml-1\">{error}</p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nSwitch.displayName = 'Switch';\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface SelectOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface SelectProps {\r\n label?: string;\r\n name?: string;\r\n options: SelectOption[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n error?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>(\r\n ({ label, name, options, value, defaultValue, onChange, placeholder = 'Select an option', error, disabled, className }, ref) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const [activeIndex, setActiveIndex] = useState(-1);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const id = React.useId();\r\n\r\n const isControlled = value !== undefined;\r\n const currentValue = isControlled ? value : internalValue;\r\n const selectedOption = options.find((opt) => opt.value === currentValue);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n const index = options.findIndex(opt => opt.value === currentValue);\r\n setActiveIndex(index !== -1 ? index : 0);\r\n } else {\r\n setActiveIndex(-1);\r\n }\r\n }, [isOpen, currentValue, options]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => document.removeEventListener('mousedown', handleClickOutside);\r\n }, []);\r\n\r\n const handleSelect = (optionValue: string) => {\r\n if (disabled) return;\r\n if (!isControlled) {\r\n setInternalValue(optionValue);\r\n }\r\n onChange?.(optionValue);\r\n setIsOpen(false);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n \r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n if (isOpen && activeIndex !== -1) {\r\n handleSelect(options[activeIndex]!.value);\r\n } else {\r\n setIsOpen(true);\r\n }\r\n } else if (e.key === 'Escape') {\r\n setIsOpen(false);\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n if (!isOpen) {\r\n setIsOpen(true);\r\n } else {\r\n setActiveIndex((prev) => (prev + 1) % options.length);\r\n }\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n if (!isOpen) {\r\n setIsOpen(true);\r\n } else {\r\n setActiveIndex((prev) => (prev - 1 + options.length) % options.length);\r\n }\r\n } else if (e.key === 'Home') {\r\n e.preventDefault();\r\n if (isOpen) setActiveIndex(0);\r\n } else if (e.key === 'End') {\r\n e.preventDefault();\r\n if (isOpen) setActiveIndex(options.length - 1);\r\n }\r\n };\r\n\r\n return (\r\n <div \r\n ref={containerRef} \r\n className={cn(\"flex flex-col gap-1.5 relative\", className)}\r\n >\r\n {label && (\r\n <Label \r\n htmlFor={id}\r\n className={cn(disabled && \"opacity-50 cursor-not-allowed\")}\r\n >\r\n {label}\r\n </Label>\r\n )}\r\n\r\n <div\r\n ref={ref}\r\n id={id}\r\n role=\"combobox\"\r\n aria-expanded={isOpen}\r\n aria-haspopup=\"listbox\"\r\n aria-controls={`${id}-listbox`}\r\n aria-disabled={disabled}\r\n tabIndex={disabled ? -1 : 0}\r\n onClick={() => !disabled && setIsOpen(!isOpen)}\r\n onKeyDown={handleKeyDown}\r\n className={cn(\r\n 'w-full appearance-none rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-4 py-3',\r\n 'border border-gray-200 dark:border-white/[0.10]',\r\n 'text-gray-900 dark:text-white flex items-center',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/30',\r\n 'hover:bg-gray-100 dark:hover:bg-white/[0.05] cursor-pointer',\r\n disabled && 'cursor-not-allowed opacity-50 hover:bg-gray-50 dark:hover:bg-white/[0.04]',\r\n isOpen && 'border-gray-300 dark:border-white/20 ring-2 ring-purple-400/20',\r\n error && 'border-rose-400/25 focus:ring-rose-300/25'\r\n )}\r\n >\r\n <span className={cn(\"block truncate\", !selectedOption && \"text-gray-400 dark:text-white/20\")}>\r\n {selectedOption ? selectedOption.label : placeholder}\r\n </span>\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className={cn(\r\n \"absolute right-4 top-1/2 -translate-y-1/2 text-gray-400 dark:text-white/40 transition-transform duration-200\",\r\n isOpen && \"rotate-180\"\r\n )}\r\n >\r\n <path d=\"m6 9 6 6 6-6\"/>\r\n </svg>\r\n </div>\r\n\r\n {isOpen && (\r\n <div className=\"absolute top-full left-0 z-50 mt-1 w-full overflow-hidden rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A] p-1 shadow-xl animate-in fade-in zoom-in-95 duration-100\">\r\n <ul\r\n id={`${id}-listbox`}\r\n role=\"listbox\"\r\n aria-activedescendant={activeIndex !== -1 ? `${id}-option-${activeIndex}` : undefined}\r\n className=\"max-h-60 overflow-auto p-1 flex flex-col gap-2\"\r\n >\r\n {options.map((option, index) => (\r\n <li\r\n key={option.value}\r\n id={`${id}-option-${index}`}\r\n role=\"option\"\r\n aria-selected={currentValue === option.value}\r\n onClick={() => handleSelect(option.value)}\r\n onMouseEnter={() => setActiveIndex(index)}\r\n className={cn(\r\n 'w-full rounded-2xl px-3 py-2 text-left text-sm transition-colors cursor-pointer',\r\n 'hover:bg-gray-100 dark:hover:bg-white/[0.06] hover:text-gray-900 dark:hover:text-white',\r\n (currentValue === option.value || activeIndex === index)\r\n ? 'bg-gray-100 dark:bg-white/[0.06] text-gray-900 dark:text-white/90' \r\n : 'text-gray-700 dark:text-white/80'\r\n )}\r\n >\r\n <div className=\"flex items-center justify-between gap-3\">\r\n <span className=\"flex-1 truncate\">{option.label}</span>\r\n {currentValue === option.value && (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"text-gray-900 dark:text-white\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n )}\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {error && (\r\n <p className=\"text-xs text-rose-400 animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {error}\r\n </p>\r\n )}\r\n <input type=\"hidden\" name={name} value={currentValue || ''} />\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n","import type { RefObject } from 'react';\r\nimport { useState, useLayoutEffect, useCallback } from 'react';\r\n\r\nexport type Side = 'top' | 'bottom' | 'left' | 'right';\r\nexport type Align = 'start' | 'center' | 'end';\r\n\r\ninterface UseFloatingOptions {\r\n side?: Side;\r\n align?: Align;\r\n sideOffset?: number;\r\n alignOffset?: number;\r\n isOpen?: boolean;\r\n}\r\n\r\ninterface Position {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nexport function useFloating(\r\n triggerRef: RefObject<HTMLElement>,\r\n contentRef: RefObject<HTMLElement>,\r\n options: UseFloatingOptions = {}\r\n) {\r\n const {\r\n side = 'bottom',\r\n align = 'center',\r\n sideOffset = 4,\r\n alignOffset = 0,\r\n isOpen = false,\r\n } = options;\r\n\r\n const [position, setPosition] = useState<Position>({ top: 0, left: 0 });\r\n const [isPositioned, setIsPositioned] = useState(false);\r\n\r\n const updatePosition = useCallback(() => {\r\n if (!triggerRef.current || !contentRef.current || !isOpen) return;\r\n\r\n const triggerRect = triggerRef.current.getBoundingClientRect();\r\n const contentRect = contentRef.current.getBoundingClientRect();\r\n \r\n let top = 0;\r\n let left = 0;\r\n\r\n // Calculate base position based on side\r\n switch (side) {\r\n case 'top':\r\n top = triggerRect.top - contentRect.height - sideOffset;\r\n break;\r\n case 'bottom':\r\n top = triggerRect.bottom + sideOffset;\r\n break;\r\n case 'left':\r\n left = triggerRect.left - contentRect.width - sideOffset;\r\n break;\r\n case 'right':\r\n left = triggerRect.right + sideOffset;\r\n break;\r\n }\r\n\r\n // Calculate alignment\r\n if (side === 'top' || side === 'bottom') {\r\n switch (align) {\r\n case 'start':\r\n left = triggerRect.left + alignOffset;\r\n break;\r\n case 'center':\r\n left = triggerRect.left + (triggerRect.width / 2) - (contentRect.width / 2) + alignOffset;\r\n break;\r\n case 'end':\r\n left = triggerRect.right - contentRect.width + alignOffset;\r\n break;\r\n }\r\n } else {\r\n switch (align) {\r\n case 'start':\r\n top = triggerRect.top + alignOffset;\r\n break;\r\n case 'center':\r\n top = triggerRect.top + (triggerRect.height / 2) - (contentRect.height / 2) + alignOffset;\r\n break;\r\n case 'end':\r\n top = triggerRect.bottom - contentRect.height + alignOffset;\r\n break;\r\n }\r\n }\r\n\r\n // Boundary checks (simple viewport containment)\r\n const padding = 8;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n if (left < padding) left = padding;\r\n if (left + contentRect.width > viewportWidth - padding) {\r\n left = viewportWidth - contentRect.width - padding;\r\n }\r\n if (top < padding) top = padding;\r\n if (top + contentRect.height > viewportHeight - padding) {\r\n top = viewportHeight - contentRect.height - padding;\r\n }\r\n\r\n setPosition({ top, left });\r\n setIsPositioned(true);\r\n }, [triggerRef, contentRef, side, align, sideOffset, alignOffset, isOpen]);\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen) {\r\n if (isPositioned) setIsPositioned(false);\r\n return;\r\n }\r\n\r\n updatePosition();\r\n\r\n // Use ResizeObserver for more robust updates\r\n const resizeObserver = new ResizeObserver(() => updatePosition());\r\n if (triggerRef.current) resizeObserver.observe(triggerRef.current);\r\n if (contentRef.current) resizeObserver.observe(contentRef.current);\r\n\r\n window.addEventListener('resize', updatePosition);\r\n window.addEventListener('scroll', updatePosition, true);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n window.removeEventListener('resize', updatePosition);\r\n window.removeEventListener('scroll', updatePosition, true);\r\n };\r\n }, [isOpen, updatePosition, triggerRef, contentRef]);\r\n\r\n return {\r\n position,\r\n isPositioned,\r\n updatePosition,\r\n };\r\n}\r\n","import React, { createContext, useContext, useState, useRef, useEffect, useLayoutEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { useFloating } from '../../hooks/useFloating';\r\n\r\ninterface PopoverContextValue {\r\n isOpen: boolean;\r\n setIsOpen: (isOpen: boolean) => void;\r\n triggerRef: React.RefObject<HTMLElement>;\r\n}\r\n\r\nconst PopoverContext = createContext<PopoverContextValue | undefined>(undefined);\r\n\r\nexport interface PopoverProps {\r\n children: React.ReactNode;\r\n open?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n}\r\n\r\nexport function Popover({ children, open, onOpenChange }: PopoverProps) {\r\n const [internalOpen, setInternalOpen] = useState(false);\r\n const triggerRef = useRef<HTMLElement>(null);\r\n\r\n const isControlled = open !== undefined;\r\n const isOpen = isControlled ? open : internalOpen;\r\n const setIsOpen = (newOpen: boolean) => {\r\n if (!isControlled) {\r\n setInternalOpen(newOpen);\r\n }\r\n onOpenChange?.(newOpen);\r\n };\r\n\r\n return (\r\n <PopoverContext.Provider value={{ isOpen, setIsOpen, triggerRef }}>\r\n <div className=\"relative inline-block\">\r\n {children}\r\n </div>\r\n </PopoverContext.Provider>\r\n );\r\n}\r\n\r\nexport interface PopoverTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function PopoverTrigger({ className, children, ...props }: PopoverTriggerProps) {\r\n const context = useContext(PopoverContext);\r\n if (!context) throw new Error('PopoverTrigger must be used within Popover');\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n context.setIsOpen(!context.isOpen);\r\n props.onClick?.(e as any);\r\n };\r\n\r\n return (\r\n <button\r\n ref={context.triggerRef as any}\r\n type=\"button\"\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={context.isOpen ? \"true\" : \"false\"}\r\n onClick={handleClick}\r\n className={cn(\"inline-flex items-center justify-center\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n align?: 'start' | 'end' | 'center';\r\n sideOffset?: number;\r\n}\r\n\r\nexport function PopoverContent({ className, children, align = 'center', sideOffset = 4, ...props }: PopoverContentProps) {\r\n const context = useContext(PopoverContext);\r\n if (!context) throw new Error('PopoverContent must be used within Popover');\r\n\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const { position, isPositioned } = useFloating(context.triggerRef, contentRef, {\r\n side: 'bottom',\r\n align,\r\n sideOffset,\r\n isOpen: context.isOpen,\r\n });\r\n\r\n useEffect(() => {\r\n if (context.isOpen) {\r\n const handleOutsideClick = (e: MouseEvent) => {\r\n if (\r\n contentRef.current &&\r\n !contentRef.current.contains(e.target as Node) &&\r\n context.triggerRef.current &&\r\n !context.triggerRef.current.contains(e.target as Node)\r\n ) {\r\n context.setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleOutsideClick);\r\n return () => {\r\n document.removeEventListener('mousedown', handleOutsideClick);\r\n };\r\n }\r\n }, [context.isOpen, context.setIsOpen, context.triggerRef]);\r\n\r\n if (!context.isOpen) return null;\r\n\r\n const getTransformOrigin = () => {\r\n // Popover currently only supports top/bottom in its logic, but let's make it robust\r\n const side = position.top > (context.triggerRef.current?.getBoundingClientRect().top || 0) ? 'bottom' : 'top';\r\n \r\n if (side === 'bottom') {\r\n if (align === 'start') return 'top left';\r\n if (align === 'end') return 'top right';\r\n return 'top center';\r\n }\r\n if (side === 'top') {\r\n if (align === 'start') return 'bottom left';\r\n if (align === 'end') return 'bottom right';\r\n return 'bottom center';\r\n }\r\n return 'center center';\r\n };\r\n\r\n return createPortal(\r\n <div\r\n ref={contentRef}\r\n style={{ \r\n top: position.top, \r\n left: position.left,\r\n transformOrigin: getTransformOrigin(),\r\n }}\r\n className={cn(\r\n \"fixed z-50 min-w-[12rem] rounded-2xl border border-gray-200 dark:border-white/10 bg-white/80 dark:bg-white/[0.03] backdrop-blur-xl p-4 shadow-xl outline-none duration-200\",\r\n isPositioned ? \"animate-in fade-in zoom-in-95 opacity-100\" : \"opacity-0\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>,\r\n document.body\r\n );\r\n}\r\n","import React, { createContext, useContext, useState, useMemo, useEffect } from 'react';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ComboboxContextValue {\r\n value: string;\r\n onValueChange: (value: string) => void;\r\n searchTerm: string;\r\n setSearchTerm: (term: string) => void;\r\n isOpen: boolean;\r\n setIsOpen: (isOpen: boolean) => void;\r\n registerItem: (id: string, text: string, value: string) => () => void;\r\n isItemVisible: (id: string, text: string) => boolean;\r\n hasVisibleItems: boolean;\r\n activeIndex: number;\r\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\r\n visibleItems: { id: string, value: string }[];\r\n}\r\n\r\nconst ComboboxContext = createContext<ComboboxContextValue | undefined>(undefined);\r\n\r\nexport interface ComboboxProps {\r\n children: React.ReactNode;\r\n value?: string;\r\n defaultValue?: string;\r\n onValueChange?: (value: string) => void;\r\n filter?: (value: string, search: string) => boolean;\r\n usePopover?: boolean;\r\n}\r\n\r\nexport function Combobox({ \r\n children, \r\n value: controlledValue, \r\n defaultValue = '', \r\n onValueChange,\r\n filter = (text, search) => text.toLowerCase().includes(search.toLowerCase()),\r\n usePopover = true\r\n}: ComboboxProps) {\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [items, setItems] = useState<Map<string, { text: string, value: string }>>(new Map());\r\n const [activeIndex, setActiveIndex] = useState(-1);\r\n\r\n const isControlled = controlledValue !== undefined;\r\n const value = isControlled ? controlledValue : internalValue;\r\n\r\n const handleValueChange = (newValue: string) => {\r\n if (!isControlled) setInternalValue(newValue);\r\n onValueChange?.(newValue);\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n };\r\n\r\n const registerItem = React.useCallback((id: string, text: string, value: string) => {\r\n setItems(prev => {\r\n const next = new Map(prev);\r\n next.set(id, { text, value });\r\n return next;\r\n });\r\n return () => {\r\n setItems(prev => {\r\n const next = new Map(prev);\r\n next.delete(id);\r\n return next;\r\n });\r\n };\r\n }, []);\r\n\r\n const visibleItems = useMemo(() => {\r\n return Array.from(items.entries())\r\n .filter(([_, item]) => filter(item.text, searchTerm))\r\n .map(([id, item]) => ({ id, value: item.value }));\r\n }, [items, searchTerm, filter]);\r\n\r\n const hasVisibleItems = visibleItems.length > 0;\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setActiveIndex(0);\r\n } else {\r\n setActiveIndex(-1);\r\n }\r\n }, [isOpen]);\r\n\r\n return (\r\n <ComboboxContext.Provider value={{ \r\n value, \r\n onValueChange: handleValueChange, \r\n searchTerm, \r\n setSearchTerm, \r\n isOpen, \r\n setIsOpen,\r\n registerItem,\r\n isItemVisible: (id, text) => filter(text, searchTerm),\r\n hasVisibleItems,\r\n activeIndex,\r\n setActiveIndex,\r\n visibleItems\r\n }}>\r\n {usePopover ? (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n {children}\r\n </Popover>\r\n ) : (\r\n children\r\n )}\r\n </ComboboxContext.Provider>\r\n );\r\n}\r\n\r\nexport function ComboboxTrigger({ className, children, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement>) {\r\n const context = useContext(ComboboxContext);\r\n return (\r\n <PopoverTrigger\r\n role=\"combobox\"\r\n aria-expanded={context?.isOpen}\r\n aria-haspopup=\"listbox\"\r\n className={cn(\r\n \"flex h-10 w-full items-center justify-between rounded-2xl border border-gray-200 bg-gray-50 px-3 py-2 text-sm text-gray-900 placeholder:text-gray-500 focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 disabled:cursor-not-allowed disabled:opacity-50 dark:border-white/10 dark:bg-white/[0.03] dark:text-white dark:placeholder:text-white/40 dark:focus:border-white/20 dark:focus:ring-white/10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"ml-2 opacity-50\"\r\n >\r\n <path d=\"m6 9 6 6 6-6\"/>\r\n </svg>\r\n </PopoverTrigger>\r\n );\r\n}\r\n\r\nexport function ComboboxContent({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <PopoverContent className={cn(\"p-0 w-[200px]\", className)} align=\"start\" {...props}>\r\n {children}\r\n </PopoverContent>\r\n );\r\n}\r\n\r\nexport function ComboboxInput({ className, placeholder = \"Search...\", ...props }: React.InputHTMLAttributes<HTMLInputElement>) {\r\n const context = useContext(ComboboxContext);\r\n if (!context) throw new Error('ComboboxInput must be used within Combobox');\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n context.setActiveIndex((prev) => (prev + 1) % context.visibleItems.length);\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n context.setActiveIndex((prev) => (prev - 1 + context.visibleItems.length) % context.visibleItems.length);\r\n } else if (e.key === 'Enter') {\r\n e.preventDefault();\r\n if (context.activeIndex !== -1 && context.visibleItems[context.activeIndex]) {\r\n context.onValueChange(context.visibleItems[context.activeIndex]!.value);\r\n }\r\n } else if (e.key === 'Escape') {\r\n context.setIsOpen(false);\r\n }\r\n props.onKeyDown?.(e);\r\n };\r\n\r\n return (\r\n <div className=\"flex items-center border-b border-gray-200 dark:border-white/10 px-3\">\r\n <svg\r\n className=\"mr-2 h-4 w-4 shrink-0 opacity-50\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <path d=\"m21 21-4.3-4.3\" />\r\n </svg>\r\n <input\r\n className={cn(\r\n \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm text-gray-900 dark:text-white outline-none placeholder:text-gray-400 dark:placeholder:text-white/40 disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n placeholder={placeholder}\r\n value={context.searchTerm}\r\n onChange={(e) => context.setSearchTerm(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n aria-autocomplete=\"list\"\r\n aria-activedescendant={context.activeIndex !== -1 ? context.visibleItems[context.activeIndex]?.id : undefined}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport function ComboboxList({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div \r\n role=\"listbox\"\r\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden p-1\", className)} \r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function ComboboxEmpty({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n const context = useContext(ComboboxContext);\r\n if (!context) throw new Error('ComboboxEmpty must be used within Combobox');\r\n\r\n if (context.hasVisibleItems) return null;\r\n\r\n return (\r\n <div className={cn(\"py-6 text-center text-sm text-gray-500 dark:text-white/40\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface ComboboxItemProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n textValue?: string;\r\n}\r\n\r\nexport function ComboboxItem({ className, value, children, textValue, ...props }: ComboboxItemProps) {\r\n const context = useContext(ComboboxContext);\r\n if (!context) throw new Error('ComboboxItem must be used within Combobox');\r\n\r\n const id = React.useId();\r\n const text = textValue || (typeof children === 'string' ? children : value);\r\n const isVisible = context.isItemVisible(id, text);\r\n const isSelected = context.value === value;\r\n \r\n const itemIndex = context.visibleItems.findIndex(item => item.id === id);\r\n const isActive = context.activeIndex === itemIndex;\r\n\r\n useEffect(() => {\r\n return context.registerItem(id, text, value);\r\n }, [id, text, value, context.registerItem]);\r\n\r\n if (!isVisible) return null;\r\n\r\n return (\r\n <div\r\n id={id}\r\n role=\"option\"\r\n aria-selected={isSelected}\r\n onClick={() => context.onValueChange(value)}\r\n onMouseEnter={() => context.setActiveIndex(itemIndex)}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-2xl px-3 py-2 text-sm outline-none transition-colors\",\r\n \"text-gray-700 dark:text-white/80\",\r\n \"aria-selected:bg-gray-100 aria-selected:text-gray-900 dark:aria-selected:bg-white/[0.06] dark:aria-selected:text-white\",\r\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-white/[0.06] dark:hover:text-white\",\r\n (isSelected || isActive) && \"bg-gray-100 text-gray-900 dark:bg-white/[0.06] dark:text-white\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <svg\r\n className={cn(\r\n \"mr-2 h-4 w-4\",\r\n isSelected ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\r\n value?: number;\r\n defaultValue?: number;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n onChange?: (value: number) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\r\n ({ className, value: controlledValue, defaultValue = 0, min = 0, max = 100, step = 1, onChange, disabled, ...props }, ref) => {\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const isControlled = controlledValue !== undefined;\r\n const value = isControlled ? controlledValue : internalValue;\r\n const trackRef = useRef<HTMLDivElement>(null);\r\n\r\n const percentage = ((value - min) / (max - min)) * 100;\r\n\r\n const handleMove = useCallback((clientX: number) => {\r\n if (disabled || !trackRef.current) return;\r\n\r\n const rect = trackRef.current.getBoundingClientRect();\r\n const width = rect.width;\r\n const left = rect.left;\r\n \r\n let newValue = ((clientX - left) / width) * (max - min) + min;\r\n \r\n // Clamp\r\n newValue = Math.min(Math.max(newValue, min), max);\r\n \r\n // Step\r\n const steps = Math.round((newValue - min) / step);\r\n newValue = min + steps * step;\r\n\r\n // Precision fix\r\n newValue = Number(newValue.toFixed(10)); // Avoid floating point errors\r\n\r\n if (!isControlled) {\r\n setInternalValue(newValue);\r\n }\r\n onChange?.(newValue);\r\n }, [disabled, isControlled, max, min, onChange, step]);\r\n\r\n const handleMouseDown = (e: React.MouseEvent) => {\r\n if (disabled) return;\r\n handleMove(e.clientX);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n handleMove(e.clientX);\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener('mousemove', handleMouseMove);\r\n document.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMouseMove);\r\n document.addEventListener('mouseup', handleMouseUp);\r\n };\r\n\r\n const handleTouchStart = (e: React.TouchEvent) => {\r\n if (disabled) return;\r\n const startTouch = e.touches[0];\r\n if (startTouch) {\r\n handleMove(startTouch.clientX);\r\n }\r\n\r\n const handleTouchMove = (e: TouchEvent) => {\r\n const moveTouch = e.touches[0];\r\n if (moveTouch) {\r\n handleMove(moveTouch.clientX);\r\n }\r\n };\r\n\r\n const handleTouchEnd = () => {\r\n document.removeEventListener('touchmove', handleTouchMove);\r\n document.removeEventListener('touchend', handleTouchEnd);\r\n };\r\n\r\n document.addEventListener('touchmove', handleTouchMove, { passive: false });\r\n document.addEventListener('touchend', handleTouchEnd);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n\r\n let newValue = value;\r\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\r\n newValue = Math.min(value + step, max);\r\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\r\n newValue = Math.max(value - step, min);\r\n } else if (e.key === 'Home') {\r\n newValue = min;\r\n } else if (e.key === 'End') {\r\n newValue = max;\r\n } else {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n if (newValue !== value) {\r\n if (!isControlled) {\r\n setInternalValue(newValue);\r\n }\r\n onChange?.(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"slider\"\r\n aria-valuemin={min}\r\n aria-valuemax={max}\r\n aria-valuenow={value}\r\n aria-disabled={disabled}\r\n tabIndex={disabled ? -1 : 0}\r\n onKeyDown={handleKeyDown}\r\n className={cn(\r\n \"relative flex w-full touch-none select-none items-center py-4 group\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n className\r\n )}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={handleTouchStart}\r\n {...props}\r\n >\r\n <div\r\n ref={trackRef}\r\n className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-gray-200 dark:bg-white/[0.06] backdrop-blur-sm border border-gray-200 dark:border-white/5\"\r\n >\r\n <div\r\n className=\"absolute h-full bg-gray-900 dark:bg-white transition-none dark:shadow-[0_0_10px_rgba(255,255,255,0.5)]\"\r\n style={{ width: `${percentage}%` }}\r\n />\r\n </div>\r\n <div\r\n className=\"absolute h-5 w-5 rounded-full border-2 border-gray-900 dark:border-white bg-white dark:bg-black shadow-md dark:shadow-[0_0_15px_rgba(255,255,255,0.5)] transition-transform hover:scale-110 focus:scale-110\"\r\n style={{ left: `calc(${percentage}% - 10px)` }}\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\r\n\r\nexport interface CalendarProps {\r\n className?: string;\r\n value?: Date;\r\n onChange?: (date: Date) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\nconst MONTHS = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n];\r\n\r\nexport function Calendar({ className, value, onChange, minDate, maxDate }: CalendarProps) {\r\n const [currentDate, setCurrentDate] = useState(value || new Date());\r\n const [viewDate, setViewDate] = useState(value || new Date());\r\n\r\n const getDaysInMonth = (year: number, month: number) => {\r\n return new Date(year, month + 1, 0).getDate();\r\n };\r\n\r\n const getFirstDayOfMonth = (year: number, month: number) => {\r\n return new Date(year, month, 1).getDay();\r\n };\r\n\r\n const handlePrevMonth = () => {\r\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1));\r\n };\r\n\r\n const handleNextMonth = () => {\r\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1));\r\n };\r\n\r\n const handleDateClick = (day: number) => {\r\n const newDate = new Date(viewDate.getFullYear(), viewDate.getMonth(), day);\r\n if (onChange) {\r\n onChange(newDate);\r\n }\r\n setCurrentDate(newDate);\r\n };\r\n\r\n const isSelected = (day: number) => {\r\n return value && \r\n value.getDate() === day &&\r\n value.getMonth() === viewDate.getMonth() &&\r\n value.getFullYear() === viewDate.getFullYear();\r\n };\r\n\r\n const isToday = (day: number) => {\r\n const today = new Date();\r\n return today.getDate() === day &&\r\n today.getMonth() === viewDate.getMonth() &&\r\n today.getFullYear() === viewDate.getFullYear();\r\n };\r\n\r\n const renderDays = () => {\r\n const daysInMonth = getDaysInMonth(viewDate.getFullYear(), viewDate.getMonth());\r\n const firstDay = getFirstDayOfMonth(viewDate.getFullYear(), viewDate.getMonth());\r\n const days = [];\r\n\r\n // Empty cells for previous month\r\n for (let i = 0; i < firstDay; i++) {\r\n days.push(<div key={`empty-${i}`} className=\"h-9 w-9\" />);\r\n }\r\n\r\n // Days of current month\r\n for (let day = 1; day <= daysInMonth; day++) {\r\n const selected = isSelected(day);\r\n const today = isToday(day);\r\n \r\n days.push(\r\n <button\r\n key={day}\r\n onClick={() => handleDateClick(day)}\r\n type=\"button\"\r\n className={cn(\r\n \"h-9 w-9 rounded-2xl text-sm font-medium transition-all duration-200\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.06] focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/20\",\r\n selected && \"bg-gray-900 text-white dark:bg-white dark:text-black shadow-md dark:shadow-[0_0_15px_rgba(255,255,255,0.3)] hover:bg-gray-800 dark:hover:bg-white/90\",\r\n !selected && today && \"bg-gray-100 dark:bg-white/[0.03] text-gray-900 dark:text-white border border-gray-200 dark:border-white/10\",\r\n !selected && !today && \"text-gray-700 dark:text-white/70 hover:text-gray-900 dark:hover:text-white\"\r\n )}\r\n >\r\n {day}\r\n </button>\r\n );\r\n }\r\n\r\n return days;\r\n };\r\n\r\n return (\r\n <div className={cn(\"p-4 bg-white dark:bg-black/40 backdrop-blur-xl border border-gray-200 dark:border-white/10 rounded-2xl w-fit\", className)}>\r\n <div className=\"flex items-center justify-between mb-4 px-1\">\r\n <div className=\"font-semibold text-gray-900 dark:text-white\">\r\n {MONTHS[viewDate.getMonth()]} <span className=\"text-gray-500 dark:text-white/50\">{viewDate.getFullYear()}</span>\r\n </div>\r\n <div className=\"flex gap-1\">\r\n <button\r\n onClick={handlePrevMonth}\r\n type=\"button\"\r\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/70 hover:text-gray-900 dark:hover:text-white transition-colors\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n <button\r\n onClick={handleNextMonth}\r\n type=\"button\"\r\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/70 hover:text-gray-900 dark:hover:text-white transition-colors\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div className=\"grid grid-cols-7 gap-1 mb-2 text-center\">\r\n {DAYS.map(day => (\r\n <div key={day} className=\"h-9 w-9 flex items-center justify-center text-xs font-medium text-gray-400 dark:text-white/40\">\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n \r\n <div className=\"grid grid-cols-7 gap-1\">\r\n {renderDays()}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\r\nimport { Calendar } from '../data-display/Calendar';\r\nimport { cn } from '../../utils/cn';\r\nimport { Calendar as CalendarIcon } from 'lucide-react';\r\n\r\nexport interface DatePickerProps {\r\n value?: Date;\r\n onChange?: (date: Date) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport function DatePicker({ value, onChange, placeholder = \"Pick a date\", className }: DatePickerProps) {\r\n const [date, setDate] = useState<Date | undefined>(value);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleSelect = (newDate: Date) => {\r\n setDate(newDate);\r\n onChange?.(newDate);\r\n setIsOpen(false);\r\n };\r\n\r\n const formatDate = (d: Date) => {\r\n return d.toLocaleDateString('en-US', {\r\n month: 'long',\r\n day: 'numeric',\r\n year: 'numeric',\r\n });\r\n };\r\n\r\n const handleMouseMove = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n e.currentTarget.style.setProperty('--x', `${x}px`);\r\n e.currentTarget.style.setProperty('--y', `${y}px`);\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onMouseMove={handleMouseMove}\r\n className={cn(\r\n \"group relative flex h-11 w-full items-center justify-between rounded-2xl border border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-white/[0.03] px-4 py-2 text-sm text-gray-900 dark:text-white transition-all duration-200 overflow-hidden\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.06] focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/15\",\r\n !date && \"text-gray-400 dark:text-white/40\",\r\n className\r\n )}\r\n >\r\n <div className=\"absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none\"\r\n style={{\r\n background: `radial-gradient(600px circle at var(--x) var(--y), rgba(255,255,255,0.06), transparent 40%)`\r\n }}\r\n />\r\n <span className=\"relative z-10\">{date ? formatDate(date) : placeholder}</span>\r\n <CalendarIcon className=\"relative z-10 h-4 w-4 text-white/40\" />\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0 border-none bg-transparent shadow-none\" align=\"start\">\r\n <Calendar\r\n value={date}\r\n onChange={handleSelect}\r\n className=\"shadow-2xl shadow-black/50\"\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {\r\n orientation?: 'vertical' | 'horizontal' | 'both';\r\n scrollbarSize?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nexport const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\r\n ({ className, children, orientation = 'vertical', scrollbarSize = 'sm', ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'overflow-auto',\r\n // Scrollbar base styles\r\n '[&::-webkit-scrollbar]:bg-transparent',\r\n '[&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-thumb]:bg-white/[0.06]',\r\n '[&::-webkit-scrollbar-thumb]:rounded-full',\r\n 'hover:[&::-webkit-scrollbar-thumb]:bg-gray-400 dark:hover:[&::-webkit-scrollbar-thumb]:bg-white/20',\r\n '[&::-webkit-scrollbar-track]:bg-transparent',\r\n \r\n // Firefox support\r\n '[scrollbar-width:thin] [scrollbar-color:rgba(0,0,0,0.2)_transparent] dark:[scrollbar-color:rgba(255,255,255,0.1)_transparent]',\r\n \r\n // Orientation specific\r\n orientation === 'vertical' && 'overflow-y-auto overflow-x-hidden',\r\n orientation === 'horizontal' && 'overflow-x-auto overflow-y-hidden',\r\n orientation === 'both' && 'overflow-auto',\r\n\r\n // Size specific\r\n scrollbarSize === 'sm' && '[&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar]:h-1.5',\r\n scrollbarSize === 'md' && '[&::-webkit-scrollbar]:w-2.5 [&::-webkit-scrollbar]:h-2.5',\r\n scrollbarSize === 'lg' && '[&::-webkit-scrollbar]:w-4 [&::-webkit-scrollbar]:h-4',\r\n \r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nScrollArea.displayName = 'ScrollArea';\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\r\nimport { Calendar } from '../data-display/Calendar';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\nimport { cn } from '../../utils/cn';\r\nimport { Calendar as CalendarIcon, Clock } from 'lucide-react';\r\n\r\nexport interface DateTimePickerProps {\r\n value?: Date;\r\n onChange?: (date: Date) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport function DateTimePicker({ value, onChange, placeholder = \"Pick date & time\", className }: DateTimePickerProps) {\r\n const [date, setDate] = useState<Date | undefined>(value);\r\n const [isOpen, setIsOpen] = useState(false);\r\n \r\n // Time state\r\n const [hours, setHours] = useState(value ? value.getHours() : 12);\r\n const [minutes, setMinutes] = useState(value ? value.getMinutes() : 0);\r\n\r\n useEffect(() => {\r\n if (value) {\r\n setDate(value);\r\n setHours(value.getHours());\r\n setMinutes(value.getMinutes());\r\n }\r\n }, [value]);\r\n\r\n const handleDateSelect = (newDate: Date) => {\r\n const updatedDate = new Date(newDate);\r\n updatedDate.setHours(hours);\r\n updatedDate.setMinutes(minutes);\r\n setDate(updatedDate);\r\n onChange?.(updatedDate);\r\n };\r\n\r\n const handleTimeChange = (type: 'hours' | 'minutes', val: string) => {\r\n let num = parseInt(val, 10);\r\n if (isNaN(num)) return;\r\n\r\n let newHours = hours;\r\n let newMinutes = minutes;\r\n\r\n if (type === 'hours') {\r\n num = Math.max(0, Math.min(23, num));\r\n setHours(num);\r\n newHours = num;\r\n } else {\r\n num = Math.max(0, Math.min(59, num));\r\n setMinutes(num);\r\n newMinutes = num;\r\n }\r\n\r\n const baseDate = date || new Date();\r\n const updatedDate = new Date(baseDate);\r\n updatedDate.setHours(newHours);\r\n updatedDate.setMinutes(newMinutes);\r\n setDate(updatedDate);\r\n onChange?.(updatedDate);\r\n };\r\n\r\n const formatDateTime = (d: Date) => {\r\n return d.toLocaleDateString('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n });\r\n };\r\n\r\n const handleMouseMove = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n e.currentTarget.style.setProperty('--x', `${x}px`);\r\n e.currentTarget.style.setProperty('--y', `${y}px`);\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onMouseMove={handleMouseMove}\r\n className={cn(\r\n \"group relative flex h-11 w-full items-center justify-between rounded-2xl border border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-white/[0.03] px-4 py-2 text-sm text-gray-900 dark:text-white transition-all duration-200 overflow-hidden\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.06] focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/15\",\r\n !date && \"text-gray-400 dark:text-white/40\",\r\n className\r\n )}\r\n >\r\n <div className=\"absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none\"\r\n style={{\r\n background: `radial-gradient(600px circle at var(--x) var(--y), rgba(0,0,0,0.06), transparent 40%)`\r\n }}\r\n />\r\n <span className=\"relative z-10\">{date ? formatDateTime(date) : placeholder}</span>\r\n <div className=\"flex items-center gap-2 text-gray-400 dark:text-white/40\">\r\n <CalendarIcon className=\"h-4 w-4\" />\r\n <Clock className=\"h-4 w-4\" />\r\n </div>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0 border-none bg-transparent shadow-none\" align=\"start\">\r\n <div className=\"flex flex-col rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-black/40 backdrop-blur-xl shadow-2xl dark:shadow-black/50\">\r\n <div className=\"flex\">\r\n <div className=\"p-4 border-r border-gray-200 dark:border-white/10\">\r\n <Calendar\r\n value={date}\r\n onChange={handleDateSelect}\r\n className=\"border-0 p-0 bg-transparent backdrop-blur-none shadow-none rounded-none\"\r\n />\r\n </div>\r\n \r\n <div className=\"flex flex-col p-4 w-[160px] h-[340px]\">\r\n <div className=\"mb-3 text-sm font-medium text-gray-700 dark:text-white/70\">Time</div>\r\n <div className=\"flex flex-1 gap-2 min-h-0 overflow-hidden\">\r\n <ScrollArea className=\"flex-1 flex flex-col gap-1\" scrollbarSize=\"sm\">\r\n <div className=\"text-xs text-gray-400 dark:text-white/40 text-center mb-1 sticky top-0 bg-white dark:bg-[#0A0A0A] py-1 z-10\">Hr</div>\r\n <div className=\"flex flex-col gap-1\">\r\n {Array.from({ length: 24 }).map((_, i) => (\r\n <button\r\n key={i}\r\n onClick={() => handleTimeChange('hours', i.toString())}\r\n className={cn(\r\n \"w-full rounded-lg px-1 py-1.5 text-sm transition-colors text-center shrink-0\",\r\n hours === i \r\n ? \"bg-emerald-500 dark:bg-emerald-600/80 text-white font-medium\" \r\n : \"text-gray-700 dark:text-white/70 hover:bg-gray-100 dark:hover:bg-white/[0.06] hover:text-gray-900 dark:hover:text-white\"\r\n )}\r\n >\r\n {i.toString().padStart(2, '0')}\r\n </button>\r\n ))}\r\n </div>\r\n </ScrollArea>\r\n <div className=\"w-[1px] bg-gray-200 dark:bg-white/[0.06]\" />\r\n <ScrollArea className=\"flex-1 flex flex-col gap-1\" scrollbarSize=\"sm\">\r\n <div className=\"text-xs text-gray-400 dark:text-white/40 text-center mb-1 sticky top-0 bg-white dark:bg-[#0A0A0A] py-1 z-10\">Min</div>\r\n <div className=\"flex flex-col gap-1\">\r\n {Array.from({ length: 60 }).map((_, i) => (\r\n <button\r\n key={i}\r\n onClick={() => handleTimeChange('minutes', i.toString())}\r\n className={cn(\r\n \"w-full rounded-lg px-1 py-1.5 text-sm transition-colors text-center shrink-0\",\r\n minutes === i \r\n ? \"bg-emerald-500 dark:bg-emerald-600/80 text-white font-medium\" \r\n : \"text-gray-700 dark:text-white/70 hover:bg-gray-100 dark:hover:bg-white/[0.06] hover:text-gray-900 dark:hover:text-white\"\r\n )}\r\n >\r\n {i.toString().padStart(2, '0')}\r\n </button>\r\n ))}\r\n </div>\r\n </ScrollArea>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label?: string;\r\n error?: string;\r\n}\r\n\r\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\r\n ({ className, label, error, id, disabled, ...props }, ref) => {\r\n const generatedId = React.useId();\r\n const inputId = id || generatedId;\r\n\r\n return (\r\n <div className=\"flex flex-col gap-1.5\">\r\n {label && (\r\n <Label \r\n htmlFor={inputId}\r\n className={cn(disabled && \"opacity-50 cursor-not-allowed\")}\r\n >\r\n {label}\r\n </Label>\r\n )}\r\n \r\n <textarea\r\n ref={ref}\r\n id={inputId}\r\n disabled={disabled}\r\n className={cn(\r\n 'w-full rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-4 py-3',\r\n 'border border-gray-200 dark:border-white/[0.10]',\r\n 'text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-white/30',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/30',\r\n 'resize-none',\r\n 'disabled:cursor-not-allowed disabled:opacity-50',\r\n error && 'border-rose-400/25 focus:ring-rose-300/25',\r\n className\r\n )}\r\n {...props}\r\n />\r\n\r\n {error && (\r\n <p className=\"text-xs text-rose-400 animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextarea.displayName = 'Textarea';\r\n","import React, { createContext, useContext } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\ninterface RadioGroupContextValue {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nconst RadioGroupContext = createContext<RadioGroupContextValue>({});\r\n\r\nexport interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name?: string;\r\n disabled?: boolean;\r\n label?: string;\r\n}\r\n\r\nexport const RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(\r\n ({ className, value, onChange, name, disabled, label, children, ...props }, ref) => {\r\n const id = React.useId();\r\n \r\n return (\r\n <div ref={ref} className={cn(\"flex flex-col gap-2\", className)} {...props}>\r\n {label && (\r\n <Label className={cn(disabled && \"opacity-50 cursor-not-allowed\")}>\r\n {label}\r\n </Label>\r\n )}\r\n <div className=\"flex flex-col gap-2\" role=\"radiogroup\">\r\n <RadioGroupContext.Provider value={{ value, onChange, name: name || id, disabled }}>\r\n {children}\r\n </RadioGroupContext.Provider>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nRadioGroup.displayName = 'RadioGroup';\r\n\r\nexport interface RadioGroupItemProps extends React.InputHTMLAttributes<HTMLInputElement> {\r\n value: string;\r\n label?: string;\r\n}\r\n\r\nexport const RadioGroupItem = React.forwardRef<HTMLInputElement, RadioGroupItemProps>(\r\n ({ className, value, label, disabled, ...props }, ref) => {\r\n const context = useContext(RadioGroupContext);\r\n const isChecked = context.value === value;\r\n const isDisabled = context.disabled || disabled;\r\n const id = React.useId();\r\n\r\n return (\r\n <label\r\n htmlFor={id}\r\n className={cn(\r\n \"flex items-center gap-3 cursor-pointer group\",\r\n isDisabled && \"cursor-not-allowed opacity-50\",\r\n className\r\n )}\r\n >\r\n <div className=\"relative flex items-center justify-center\">\r\n <input\r\n ref={ref}\r\n id={id}\r\n type=\"radio\"\r\n name={context.name}\r\n value={value}\r\n checked={isChecked}\r\n disabled={isDisabled}\r\n onChange={(e) => {\r\n if (e.target.checked) {\r\n context.onChange?.(value);\r\n }\r\n }}\r\n className=\"peer sr-only\"\r\n {...props}\r\n />\r\n <div\r\n className={cn(\r\n \"h-5 w-5 rounded-full border border-gray-300 dark:border-white/20 bg-gray-50 dark:bg-white/[0.03] transition-all duration-200\",\r\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-gray-400 dark:peer-focus-visible:ring-white/20 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-white dark:peer-focus-visible:ring-offset-[#0A0A0A]\",\r\n \"group-hover:bg-gray-100 dark:group-hover:bg-white/[0.05]\",\r\n isChecked && \"border-gray-900 bg-gray-900 dark:border-white dark:bg-white\"\r\n )}\r\n >\r\n {isChecked && (\r\n <div className=\"absolute inset-0 flex items-center justify-center\">\r\n <div className=\"h-2 w-2 rounded-full bg-white dark:bg-black\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n {label && (\r\n <span className=\"text-sm text-gray-900 dark:text-white/90 select-none font-medium\">\r\n {label}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n }\r\n);\r\n\r\nRadioGroupItem.displayName = 'RadioGroupItem';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\ntype FormItemContextValue = {\r\n id: string;\r\n};\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\r\n\r\nexport const FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => {\r\n const id = React.useId();\r\n return (\r\n <FormItemContext.Provider value={{ id }}>\r\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\r\n </FormItemContext.Provider>\r\n );\r\n }\r\n);\r\nFormItem.displayName = \"FormItem\";\r\n\r\nexport const FormLabel = React.forwardRef<React.ElementRef<typeof Label>, React.ComponentPropsWithoutRef<typeof Label>>(\r\n ({ className, ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n return (\r\n <Label\r\n ref={ref}\r\n className={cn(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", className)}\r\n htmlFor={id}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nFormLabel.displayName = \"FormLabel\";\r\n\r\nexport const FormControl = React.forwardRef<React.ElementRef<\"div\">, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n const { children, ...rest } = props;\r\n \r\n if (React.isValidElement(children)) {\r\n return React.cloneElement(children as React.ReactElement, {\r\n id,\r\n \"aria-describedby\": `${id}-description ${id}-message`,\r\n ...rest,\r\n ...(children.props as any)\r\n });\r\n }\r\n return <div ref={ref} {...props} />;\r\n }\r\n);\r\nFormControl.displayName = \"FormControl\";\r\n\r\nexport const FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({ className, ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n return (\r\n <p\r\n ref={ref}\r\n id={`${id}-description`}\r\n className={cn(\"text-xs text-white/50\", className)}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nFormDescription.displayName = \"FormDescription\";\r\n\r\nexport const FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n \r\n if (!children) {\r\n return null;\r\n }\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={`${id}-message`}\r\n className={cn(\"text-xs font-medium text-rose-500\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </p>\r\n );\r\n }\r\n);\r\nFormMessage.displayName = \"FormMessage\";\r\n","import React, { useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type ToastVariant = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading';\r\n\r\nexport interface ToastProps {\r\n id: string;\r\n title?: string;\r\n description?: React.ReactNode;\r\n variant?: ToastVariant;\r\n duration?: number;\r\n onDismiss: (id: string) => void;\r\n}\r\n\r\nconst Icons = {\r\n loading: (\r\n <svg className=\"animate-spin text-blue-500\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n ),\r\n success: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-emerald-400\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\r\n <polyline points=\"22 4 12 14.01 9 11.01\" />\r\n </svg>\r\n ),\r\n error: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-rose-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n ),\r\n warning: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-amber-400\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\r\n </svg>\r\n ),\r\n info: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-blue-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\r\n </svg>\r\n ),\r\n};\r\n\r\nexport const Toast = ({\r\n id,\r\n title,\r\n description,\r\n variant = 'default',\r\n duration = 5000,\r\n onDismiss,\r\n}: ToastProps) => {\r\n useEffect(() => {\r\n if (duration === Infinity) return;\r\n\r\n const timer = setTimeout(() => {\r\n onDismiss(id);\r\n }, duration);\r\n\r\n return () => clearTimeout(timer);\r\n }, [duration, id, onDismiss]);\r\n\r\n return (\r\n <div\r\n role=\"alert\"\r\n className={cn(\r\n \"pointer-events-auto relative flex w-full max-w-sm items-start gap-4 overflow-hidden rounded-2xl border p-4 shadow-lg transition-all\",\r\n \"animate-in slide-in-from-right-full fade-in duration-300\",\r\n \"bg-white dark:bg-[#0A0A0A]/90 backdrop-blur-md border-gray-200 dark:border-white/10\",\r\n variant === 'error' && \"border-rose-200 dark:border-rose-500/30 bg-rose-50 dark:bg-rose-500/10\",\r\n variant === 'success' && \"border-emerald-200 dark:border-emerald-500/20 bg-emerald-50 dark:bg-emerald-950/10\",\r\n variant === 'warning' && \"border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-950/10\",\r\n variant === 'info' && \"border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-950/10\",\r\n variant === 'loading' && \"border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-950/10\"\r\n )}\r\n >\r\n {variant !== 'default' && Icons[variant] && (\r\n <div className=\"shrink-0 pt-0.5\">\r\n {Icons[variant]}\r\n </div>\r\n )}\r\n \r\n <div className=\"flex-1 gap-1\">\r\n {title && <div className=\"text-sm font-semibold text-gray-900 dark:text-white\">{title}</div>}\r\n {description && <div className=\"text-sm text-gray-600 dark:text-white/80\">{description}</div>}\r\n </div>\r\n\r\n <button\r\n onClick={() => onDismiss(id)}\r\n className=\"shrink-0 rounded-md p-1 text-gray-400 dark:text-white/50 opacity-0 transition-opacity hover:text-gray-900 dark:hover:text-white group-hover:opacity-100 focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/20\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n );\r\n};\r\n","import React, { createContext, useState, useCallback, useContext } from 'react';\r\nimport type { ToastProps} from './Toast';\r\nimport { Toast, ToastVariant } from './Toast';\r\n\r\nexport type ToastOptions = Omit<ToastProps, 'id' | 'onDismiss'>;\r\n\r\nexport interface ToastContextType {\r\n toast: (options: ToastOptions) => string;\r\n dismiss: (id: string) => void;\r\n promise: <T>(\r\n promise: Promise<T>,\r\n options: {\r\n loading: string | ToastOptions;\r\n success: string | ((data: T) => ToastOptions);\r\n error: string | ((error: any) => ToastOptions);\r\n }\r\n ) => Promise<T>;\r\n}\r\n\r\nexport const ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\r\n const [toasts, setToasts] = useState<ToastProps[]>([]);\r\n\r\n const dismiss = useCallback((id: string) => {\r\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\r\n }, []);\r\n\r\n const toast = useCallback((options: ToastOptions) => {\r\n const id = Math.random().toString(36).substring(2, 9);\r\n setToasts((prev) => [...prev, { ...options, id, onDismiss: dismiss }]);\r\n return id;\r\n }, [dismiss]);\r\n\r\n const updateToast = useCallback((id: string, options: Partial<ToastOptions>) => {\r\n setToasts((prev) =>\r\n prev.map((t) => (t.id === id ? { ...t, ...options } : t))\r\n );\r\n }, []);\r\n\r\n const promise = useCallback(\r\n async <T,>(\r\n promise: Promise<T>,\r\n options: {\r\n loading: string | ToastOptions;\r\n success: string | ((data: T) => ToastOptions);\r\n error: string | ((error: any) => ToastOptions);\r\n }\r\n ) => {\r\n const loadingOptions = typeof options.loading === 'string' \r\n ? { title: options.loading, variant: 'loading' as const } \r\n : { variant: 'loading' as const, ...options.loading };\r\n \r\n const id = toast({ ...loadingOptions, duration: Infinity });\r\n\r\n try {\r\n const data = await promise;\r\n const successOptions = typeof options.success === 'function'\r\n ? options.success(data)\r\n : typeof options.success === 'string'\r\n ? { title: options.success, variant: 'success' as const }\r\n : options.success;\r\n\r\n updateToast(id, { ...successOptions, duration: 5000 });\r\n return data;\r\n } catch (err) {\r\n const errorOptions = typeof options.error === 'function'\r\n ? options.error(err)\r\n : typeof options.error === 'string'\r\n ? { title: options.error, variant: 'error' as const }\r\n : options.error;\r\n\r\n updateToast(id, { ...errorOptions, duration: 5000 });\r\n throw err;\r\n }\r\n },\r\n [toast, updateToast]\r\n );\r\n\r\n return (\r\n <ToastContext.Provider value={{ toast, dismiss, promise }}>\r\n {children}\r\n <div className=\"fixed bottom-0 right-0 z-[100] flex max-h-screen w-full flex-col-reverse gap-2 p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\">\r\n {toasts.map((toast) => (\r\n <Toast key={toast.id} {...toast} />\r\n ))}\r\n </div>\r\n </ToastContext.Provider>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type AlertVariant = 'default' | 'success' | 'error' | 'warning' | 'info';\r\n\r\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\r\n variant?: AlertVariant;\r\n icon?: React.ReactNode;\r\n title?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nconst Icons = {\r\n success: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-emerald-400\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\r\n <polyline points=\"22 4 12 14.01 9 11.01\" />\r\n </svg>\r\n ),\r\n error: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-rose-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n ),\r\n warning: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-amber-400\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\r\n </svg>\r\n ),\r\n info: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-blue-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\r\n </svg>\r\n ),\r\n};\r\n\r\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\r\n ({ className, variant = 'default', icon, title, children, ...props }, ref) => {\r\n const Icon = icon || (variant !== 'default' ? Icons[variant] : null);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"alert\"\r\n className={cn(\r\n \"relative w-full rounded-2xl border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-gray-900 dark:[&>svg]:text-white\",\r\n \"bg-white dark:bg-[#0A0A0A]/50 backdrop-blur-md border-gray-200 dark:border-white/10 text-gray-900 dark:text-white\",\r\n variant === 'error' && \"border-rose-200 dark:border-rose-500/20 bg-rose-50 dark:bg-rose-950/10 text-rose-900 dark:text-rose-50 [&>svg]:text-rose-600 dark:[&>svg]:text-rose-400\",\r\n variant === 'success' && \"border-emerald-200 dark:border-emerald-500/20 bg-emerald-50 dark:bg-emerald-950/10 text-emerald-900 dark:text-emerald-50 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-400\",\r\n variant === 'warning' && \"border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-950/10 text-amber-900 dark:text-amber-50 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-400\",\r\n variant === 'info' && \"border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-950/10 text-blue-900 dark:text-blue-50 [&>svg]:text-blue-600 dark:[&>svg]:text-blue-400\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {Icon}\r\n <div className=\"flex flex-col gap-1\">\r\n {title && (\r\n <h5 className=\"mb-1 font-medium leading-none tracking-tight\">\r\n {title}\r\n </h5>\r\n )}\r\n {children && (\r\n <div className=\"text-sm opacity-90 [&_p]:leading-relaxed\">\r\n {children}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAlert.displayName = 'Alert';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'danger' | 'gradient';\r\nexport type ProgressSize = 'sm' | 'md' | 'lg';\r\n\r\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value?: number;\r\n max?: number;\r\n variant?: ProgressVariant;\r\n size?: ProgressSize;\r\n isIndeterminate?: boolean;\r\n hasStripe?: boolean;\r\n indicatorClassName?: string;\r\n}\r\n\r\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\r\n ({ \r\n className, \r\n value = 0, \r\n max = 100, \r\n variant = 'default',\r\n size = 'md',\r\n isIndeterminate = false,\r\n hasStripe = false,\r\n indicatorClassName, \r\n ...props \r\n }, ref) => {\r\n const percentage = isIndeterminate ? 0 : Math.min(Math.max((value || 0) / max, 0), 1) * 100;\r\n\r\n const variants = {\r\n default: 'bg-gray-900 dark:bg-white dark:shadow-[0_0_10px_rgba(255,255,255,0.5)]',\r\n success: 'bg-emerald-500 shadow-sm dark:shadow-[0_0_10px_rgba(16,185,129,0.5)]',\r\n warning: 'bg-amber-500 shadow-sm dark:shadow-[0_0_10px_rgba(245,158,11,0.5)]',\r\n danger: 'bg-rose-500 shadow-sm dark:shadow-[0_0_10px_rgba(244,63,94,0.5)]',\r\n gradient: 'bg-gradient-to-r from-blue-600 via-purple-600 to-blue-600 shadow-sm dark:shadow-[0_0_15px_rgba(99,102,241,0.5)]'\r\n };\r\n\r\n const sizes = {\r\n sm: 'h-1',\r\n md: 'h-2',\r\n lg: 'h-4'\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"progressbar\"\r\n aria-valuemin={0}\r\n aria-valuemax={max}\r\n aria-valuenow={isIndeterminate ? undefined : value}\r\n className={cn(\r\n \"relative w-full overflow-hidden rounded-full bg-gray-200 dark:bg-white/[0.03] border border-gray-200 dark:border-white/5 backdrop-blur-sm\",\r\n sizes[size],\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"h-full w-full flex-1 transition-all duration-500 ease-in-out relative overflow-hidden\",\r\n variants[variant],\r\n isIndeterminate && \"absolute inset-0 w-full origin-left animate-indeterminate-progress\",\r\n indicatorClassName\r\n )}\r\n style={{ \r\n transform: isIndeterminate ? undefined : `translateX(-${100 - percentage}%)` \r\n }}\r\n >\r\n {hasStripe && !isIndeterminate && (\r\n <div className=\"absolute inset-0 w-full h-full animate-progress-stripe\" \r\n style={{\r\n backgroundImage: 'linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)',\r\n backgroundSize: '1rem 1rem'\r\n }} \r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nProgress.displayName = \"Progress\";\r\n","import React, { useState, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\r\n src?: string;\r\n alt?: string;\r\n fallback?: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg' | 'xl';\r\n}\r\n\r\nconst sizeClasses = {\r\n sm: 'h-8 w-8 text-xs',\r\n md: 'h-10 w-10 text-sm',\r\n lg: 'h-14 w-14 text-base',\r\n xl: 'h-20 w-20 text-xl',\r\n};\r\n\r\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\r\n ({ className, src, alt, fallback, size = 'md', ...props }, ref) => {\r\n const [imageError, setImageError] = useState(false);\r\n\r\n useEffect(() => {\r\n setImageError(false);\r\n }, [src]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"relative flex shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-white/[0.06]\",\r\n sizeClasses[size],\r\n className\r\n )}\r\n {...props}\r\n >\r\n {src && !imageError ? (\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"aspect-square h-full w-full object-cover\"\r\n onError={() => setImageError(true)}\r\n />\r\n ) : (\r\n <div className=\"flex h-full w-full items-center justify-center bg-gray-100 dark:bg-white/5 text-gray-600 dark:text-white/70 font-medium\">\r\n {fallback || (alt ? alt.charAt(0).toUpperCase() : '?')}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAvatar.displayName = 'Avatar';\r\n","import React, { createContext, useContext, useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronDown } from 'lucide-react';\r\n\r\ninterface AccordionContextValue {\r\n value: string | string[];\r\n onValueChange: (value: string) => void;\r\n type: 'single' | 'multiple';\r\n}\r\n\r\nconst AccordionContext = createContext<AccordionContextValue | undefined>(undefined);\r\n\r\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type?: 'single' | 'multiple';\r\n defaultValue?: string | string[];\r\n value?: string | string[];\r\n onValueChange?: (value: string | string[]) => void;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function Accordion({\r\n type = 'single',\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n className,\r\n children,\r\n ...props\r\n}: AccordionProps) {\r\n const [internalValue, setInternalValue] = useState<string | string[]>(\r\n defaultValue || (type === 'multiple' ? [] : '')\r\n );\r\n\r\n const currentValue = value !== undefined ? value : internalValue;\r\n\r\n const handleValueChange = (itemValue: string) => {\r\n let newValue: string | string[];\r\n\r\n if (type === 'multiple') {\r\n const arrayValue = Array.isArray(currentValue) ? currentValue : [];\r\n if (arrayValue.includes(itemValue)) {\r\n newValue = arrayValue.filter((v) => v !== itemValue);\r\n } else {\r\n newValue = [...arrayValue, itemValue];\r\n }\r\n } else {\r\n newValue = currentValue === itemValue ? '' : itemValue;\r\n }\r\n\r\n if (value === undefined) {\r\n setInternalValue(newValue);\r\n }\r\n \r\n onValueChange?.(newValue as any);\r\n };\r\n\r\n return (\r\n <AccordionContext.Provider\r\n value={{ value: currentValue, onValueChange: handleValueChange, type }}\r\n >\r\n <div className={cn(\"space-y-2\", className)} {...props}>\r\n {children}\r\n </div>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\n// Helper context for Item\r\nconst AccordionItemContext = createContext<{ value: string; isOpen: boolean }>({ value: '', isOpen: false });\r\n\r\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function AccordionItem({ className, value, children, ...props }: AccordionItemProps) {\r\n const context = useContext(AccordionContext);\r\n const isOpen = Array.isArray(context?.value)\r\n ? context?.value.includes(value)\r\n : context?.value === value;\r\n\r\n return (\r\n <AccordionItemContext.Provider value={{ value, isOpen: !!isOpen }}>\r\n <div\r\n className={cn(\r\n \"overflow-hidden rounded-2xl border border-gray-200 dark:border-white/5 bg-gray-50 dark:bg-white/[0.03] transition-all duration-200\",\r\n isOpen && \"bg-white dark:bg-white/[0.04] border-gray-300 dark:border-white/10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </AccordionItemContext.Provider>\r\n );\r\n}\r\n\r\nexport interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function AccordionTrigger({ className, children, ...props }: AccordionTriggerProps) {\r\n const context = useContext(AccordionContext);\r\n const { value, isOpen } = useContext(AccordionItemContext);\r\n \r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={() => context?.onValueChange(value)}\r\n aria-expanded={isOpen}\r\n aria-controls={`accordion-content-${value}`}\r\n id={`accordion-trigger-${value}`}\r\n className={cn(\r\n \"flex w-full items-center justify-between px-4 py-3 text-sm font-medium text-gray-900 dark:text-white transition-all hover:text-gray-700 dark:hover:text-white/90 focus:outline-none\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronDown\r\n className={cn(\r\n \"h-4 w-4 shrink-0 text-gray-400 dark:text-white/50 transition-transform duration-200\",\r\n isOpen && \"rotate-180 text-gray-900 dark:text-white\"\r\n )}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function AccordionContent({ className, children, ...props }: AccordionContentProps) {\r\n const { isOpen, value } = useContext(AccordionItemContext);\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div\r\n id={`accordion-content-${value}`}\r\n role=\"region\"\r\n aria-labelledby={`accordion-trigger-${value}`}\r\n className={cn(\r\n \"px-4 pb-3 pt-0 text-sm text-gray-600 dark:text-white/70 animate-in slide-in-from-top-1 fade-in duration-200\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { createContext, useContext, useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface TabsContextValue {\r\n value: string;\r\n onValueChange: (value: string) => void;\r\n}\r\n\r\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\r\n\r\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\r\n defaultValue: string;\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function Tabs({\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n className,\r\n children,\r\n ...props\r\n}: TabsProps) {\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n\r\n const handleValueChange = (newValue: string) => {\r\n if (value === undefined) {\r\n setInternalValue(newValue);\r\n }\r\n onValueChange?.(newValue);\r\n };\r\n\r\n const currentValue = value !== undefined ? value : internalValue;\r\n\r\n return (\r\n <TabsContext.Provider value={{ value: currentValue, onValueChange: handleValueChange }}>\r\n <div className={cn(\"w-full\", className)} {...props}>\r\n {children}\r\n </div>\r\n </TabsContext.Provider>\r\n );\r\n}\r\n\r\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabsList({ className, children, ...props }: TabsListProps) {\r\n return (\r\n <div\r\n role=\"tablist\"\r\n className={cn(\r\n \"inline-flex h-10 items-center justify-center rounded-2xl bg-gray-100 p-1 text-gray-500 dark:bg-white/[0.03] dark:text-white/60\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabsTrigger({ className, value, children, ...props }: TabsTriggerProps) {\r\n const context = useContext(TabsContext);\r\n if (!context) throw new Error('TabsTrigger must be used within Tabs');\r\n\r\n const isActive = context.value === value;\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={isActive}\r\n aria-controls={`tabs-content-${value}`}\r\n id={`tabs-trigger-${value}`}\r\n onClick={() => context.onValueChange(value)}\r\n className={cn(\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-2xl px-3 py-1.5 text-sm font-medium ring-offset-white transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-zinc-950 dark:focus-visible:ring-white/20\",\r\n isActive\r\n ? \"bg-white text-gray-900 shadow-sm dark:bg-white/[0.06] dark:text-white dark:backdrop-blur-sm\"\r\n : \"hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-white/[0.03] dark:hover:text-white\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabsContent({ className, value, children, ...props }: TabsContentProps) {\r\n const context = useContext(TabsContext);\r\n if (!context) throw new Error('TabsContent must be used within Tabs');\r\n\r\n if (context.value !== value) return null;\r\n\r\n return (\r\n <div\r\n role=\"tabpanel\"\r\n id={`tabs-content-${value}`}\r\n aria-labelledby={`tabs-trigger-${value}`}\r\n tabIndex={0}\r\n className={cn(\r\n \"mt-2 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20 focus-visible:ring-offset-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <aside\r\n ref={ref}\r\n className={cn(\r\n \"flex h-full w-64 flex-col border-r backdrop-blur-xl transition-colors duration-200\",\r\n \"border-gray-200 bg-white/50\",\r\n \"dark:border-white/10 dark:bg-black/20\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </aside>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\r\n\r\nexport const SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex h-16 items-center px-6 border-b border-gray-200 dark:border-white/5\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarContentProps extends React.HTMLAttributes<HTMLDivElement> {}\r\n\r\nexport const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex-1 overflow-y-auto py-4 px-3 space-y-1\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\r\n\r\nexport const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"p-4 border-t border-gray-200 dark:border-white/5\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n active?: boolean;\r\n icon?: React.ReactNode;\r\n badge?: React.ReactNode;\r\n}\r\n\r\nexport const SidebarItem = React.forwardRef<HTMLButtonElement, SidebarItemProps>(\r\n ({ className, children, active, icon, badge, ...props }, ref) => {\r\n return (\r\n <button\r\n ref={ref}\r\n className={cn(\r\n \"flex w-full items-center gap-3 rounded-2xl px-3 py-2 text-sm font-medium transition-colors\",\r\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-white/[0.03] dark:hover:text-white\",\r\n active \r\n ? \"bg-gray-200 text-gray-900 dark:bg-white/[0.06] dark:text-white\" \r\n : \"text-gray-600 dark:text-white/60\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {icon && <span className={cn(\"flex h-4 w-4 items-center justify-center\", active ? \"text-gray-900 dark:text-white\" : \"text-gray-500 dark:text-white/60\")}>{icon}</span>}\r\n <span className=\"flex-1 text-left\">{children}</span>\r\n {badge && (\r\n <span className=\"flex h-5 min-w-5 items-center justify-center rounded-full bg-gray-200 dark:bg-white/[0.06] px-1.5 text-[10px] font-bold text-gray-900 dark:text-white\">\r\n {badge}\r\n </span>\r\n )}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n label?: string;\r\n}\r\n\r\nexport const SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(\r\n ({ className, children, label, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(\"mb-6\", className)} {...props}>\r\n {label && (\r\n <div className=\"mb-2 px-3 text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-white/40\">\r\n {label}\r\n </div>\r\n )}\r\n <div className=\"space-y-1\">{children}</div>\r\n </div>\r\n );\r\n }\r\n);\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Slot } from '../utils/Slot';\r\nimport { cn } from '../utils/cn';\r\n\r\nconst surfaceVariants = cva(\r\n \"rounded-2xl backdrop-blur-xl transition-all duration-300 bg-white/70 border border-zinc-200 shadow-sm text-zinc-900 dark:bg-white/[0.03] dark:border-white/10 dark:shadow-[0_18px_55px_rgba(0,0,0,.45)] dark:text-white\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"\",\r\n ghost: \"bg-transparent border-transparent shadow-none\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface SurfaceProps \r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof surfaceVariants> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Surface = React.forwardRef<HTMLDivElement, SurfaceProps>(\r\n ({ className, variant, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : \"div\";\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(surfaceVariants({ variant, className }))}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\n\r\nSurface.displayName = 'Surface';","import React, { useState, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Button } from '../button/Button';\r\nimport { Menu, X } from 'lucide-react';\r\n\r\ninterface NavbarProps {\r\n logo?: React.ReactNode;\r\n links?: { label: string; href: string }[];\r\n actions?: React.ReactNode;\r\n className?: string;\r\n maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\r\n}\r\n\r\nconst maxWidthClasses = {\r\n sm: 'max-w-screen-sm',\r\n md: 'max-w-screen-md',\r\n lg: 'max-w-screen-lg',\r\n xl: 'max-w-screen-xl',\r\n '2xl': 'max-w-screen-2xl',\r\n full: 'max-w-full',\r\n};\r\n\r\nexport function Navbar({\r\n logo,\r\n links = [],\r\n actions,\r\n className,\r\n maxWidth = 'xl',\r\n}: NavbarProps) {\r\n const [isScrolled, setIsScrolled] = useState(false);\r\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n setIsScrolled(window.scrollY > 20);\r\n };\r\n window.addEventListener('scroll', handleScroll);\r\n return () => window.removeEventListener('scroll', handleScroll);\r\n }, []);\r\n\r\n return (\r\n <nav\r\n className={cn(\r\n 'fixed top-0 left-0 right-0 z-50 transition-all duration-300 px-4 py-4',\r\n isScrolled ? 'py-3' : 'py-6',\r\n className\r\n )}\r\n >\r\n <div className={cn('mx-auto transition-all duration-300', maxWidthClasses[maxWidth])}>\r\n <Surface\r\n className={cn(\r\n 'flex items-center justify-between px-6 py-3 transition-all duration-300',\r\n isScrolled \r\n ? 'rounded-2xl border-white/10 bg-white/70 dark:bg-zinc-900/70 backdrop-blur-xl shadow-lg' \r\n : 'rounded-2xl border-transparent bg-transparent dark:bg-transparent backdrop-blur-none shadow-none'\r\n )}\r\n >\r\n {/* Logo */}\r\n <div className=\"flex items-center gap-2\">\r\n {logo || <span className=\"text-xl font-bold tracking-tighter\">PIXON</span>}\r\n </div>\r\n\r\n {/* Desktop Links */}\r\n <div className=\"hidden md:flex items-center gap-8\">\r\n {links.map((link) => (\r\n <a\r\n key={link.label}\r\n href={link.href}\r\n className=\"text-sm font-medium text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white transition-colors\"\r\n >\r\n {link.label}\r\n </a>\r\n ))}\r\n </div>\r\n\r\n {/* Actions & Mobile Toggle */}\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"hidden md:flex items-center gap-2\">\r\n {actions}\r\n </div>\r\n \r\n <button\r\n className=\"md:hidden p-2 text-zinc-600 dark:text-zinc-400 hover:bg-zinc-100 dark:hover:bg-white/[0.03] rounded-2xl transition-colors\"\r\n onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\r\n >\r\n {isMobileMenuOpen ? <X size={20} /> : <Menu size={20} />}\r\n </button>\r\n </div>\r\n </Surface>\r\n\r\n {/* Mobile Menu */}\r\n <div\r\n className={cn(\r\n 'md:hidden absolute top-full left-4 right-4 mt-2 transition-all duration-300 origin-top',\r\n isMobileMenuOpen \r\n ? 'opacity-100 scale-100 translate-y-0' \r\n : 'opacity-0 scale-95 -translate-y-4 pointer-events-none'\r\n )}\r\n >\r\n <Surface className=\"p-4 flex flex-col gap-4 shadow-2xl border-white/10 bg-white/90 dark:bg-zinc-900/90 backdrop-blur-2xl\">\r\n {links.map((link) => (\r\n <a\r\n key={link.label}\r\n href={link.href}\r\n className=\"text-base font-medium px-4 py-2 rounded-2xl hover:bg-zinc-100 dark:hover:bg-white/[0.03] text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white transition-all\"\r\n onClick={() => setIsMobileMenuOpen(false)}\r\n >\r\n {link.label}\r\n </a>\r\n ))}\r\n <div className=\"pt-4 border-t border-zinc-200 dark:border-white/10 flex flex-col gap-2\">\r\n {actions}\r\n </div>\r\n </Surface>\r\n </div>\r\n </div>\r\n </nav>\r\n );\r\n}\r\n","import React, { createContext, useContext, useState, useRef, useEffect, useLayoutEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';import { useFloating } from '../../hooks/useFloating';\r\ninterface DropdownMenuContextValue {\r\n isOpen: boolean;\r\n setIsOpen: (isOpen: boolean) => void;\r\n triggerRef: React.RefObject<HTMLElement>;\r\n}\r\n\r\nconst DropdownMenuContext = createContext<DropdownMenuContextValue | undefined>(undefined);\r\n\r\nexport interface DropdownMenuProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function DropdownMenu({ children }: DropdownMenuProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const triggerRef = useRef<HTMLElement>(null);\r\n\r\n return (\r\n <DropdownMenuContext.Provider value={{ isOpen, setIsOpen, triggerRef }}>\r\n <div className=\"relative inline-block text-left\">\r\n {children}\r\n </div>\r\n </DropdownMenuContext.Provider>\r\n );\r\n}\r\n\r\nexport interface DropdownMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function DropdownMenuTrigger({ className, children, ...props }: DropdownMenuTriggerProps) {\r\n const context = useContext(DropdownMenuContext);\r\n if (!context) throw new Error('DropdownMenuTrigger must be used within DropdownMenu');\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n context.setIsOpen(!context.isOpen);\r\n props.onClick?.(e as any);\r\n };\r\n\r\n return (\r\n <button\r\n ref={context.triggerRef as any}\r\n type=\"button\"\r\n aria-haspopup=\"menu\"\r\n aria-expanded={context.isOpen ? \"true\" : \"false\"}\r\n onClick={handleClick}\r\n className={cn(\"inline-flex items-center justify-center\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport interface DropdownMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n align?: 'start' | 'end' | 'center';\r\n side?: 'top' | 'bottom' | 'left' | 'right';\r\n}\r\n\r\nexport function DropdownMenuContent({ className, children, align = 'start', side = 'bottom', ...props }: DropdownMenuContentProps) {\r\n const context = useContext(DropdownMenuContext);\r\n if (!context) throw new Error('DropdownMenuContent must be used within DropdownMenu');\r\n\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const { position, isPositioned } = useFloating(context.triggerRef, contentRef, {\r\n side,\r\n align,\r\n isOpen: context.isOpen,\r\n });\r\n\r\n useEffect(() => {\r\n if (context.isOpen) {\r\n const handleOutsideClick = (e: MouseEvent) => {\r\n if (\r\n contentRef.current &&\r\n !contentRef.current.contains(e.target as Node) &&\r\n context.triggerRef.current &&\r\n !context.triggerRef.current.contains(e.target as Node)\r\n ) {\r\n context.setIsOpen(false);\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n context.setIsOpen(false);\r\n context.triggerRef.current?.focus();\r\n }\r\n \r\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n const items = contentRef.current?.querySelectorAll('[role=\"menuitem\"]') as NodeListOf<HTMLElement>;\r\n if (!items.length) return;\r\n \r\n const currentIndex = Array.from(items).indexOf(document.activeElement as HTMLElement);\r\n let nextIndex = 0;\r\n \r\n if (e.key === 'ArrowDown') {\r\n nextIndex = (currentIndex + 1) % items.length;\r\n } else {\r\n nextIndex = (currentIndex - 1 + items.length) % items.length;\r\n }\r\n \r\n items[nextIndex]?.focus();\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleOutsideClick);\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n document.removeEventListener('mousedown', handleOutsideClick);\r\n document.removeEventListener('keydown', handleKeyDown);\r\n };\r\n }\r\n }, [context.isOpen, context.setIsOpen, context.triggerRef]);\r\n\r\n if (!context.isOpen) return null;\r\n\r\n const getTransformOrigin = () => {\r\n if (side === 'bottom') {\r\n if (align === 'start') return 'top left';\r\n if (align === 'end') return 'top right';\r\n return 'top center';\r\n }\r\n if (side === 'top') {\r\n if (align === 'start') return 'bottom left';\r\n if (align === 'end') return 'bottom right';\r\n return 'bottom center';\r\n }\r\n if (side === 'left') {\r\n if (align === 'start') return 'top right';\r\n if (align === 'end') return 'bottom right';\r\n return 'center right';\r\n }\r\n if (side === 'right') {\r\n if (align === 'start') return 'top left';\r\n if (align === 'end') return 'bottom left';\r\n return 'center left';\r\n }\r\n return 'center center';\r\n };\r\n\r\n return createPortal(\r\n <div\r\n ref={contentRef}\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n style={{ \r\n top: position.top, \r\n left: position.left,\r\n transformOrigin: getTransformOrigin(),\r\n }}\r\n className={cn(\r\n \"fixed z-50 min-w-[8rem] overflow-hidden rounded-2xl border border-gray-200 dark:border-white/10 bg-white/80 dark:bg-white/[0.03] backdrop-blur-xl p-1 shadow-md duration-100\",\r\n isPositioned ? \"animate-in fade-in zoom-in-95 opacity-100\" : \"opacity-0\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>,\r\n document.body\r\n );\r\n}\r\n\r\nexport interface DropdownMenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function DropdownMenuItem({ className, children, ...props }: DropdownMenuItemProps) {\r\n const context = useContext(DropdownMenuContext);\r\n \r\n const handleClick = (e: React.MouseEvent) => {\r\n context?.setIsOpen(false);\r\n props.onClick?.(e as any);\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n role=\"menuitem\"\r\n onClick={handleClick}\r\n className={cn(\r\n \"relative flex w-full cursor-pointer select-none items-center rounded-2xl px-3 py-2 text-sm outline-none transition-colors\",\r\n \"text-gray-700 dark:text-white/80\",\r\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-white/[0.06] dark:hover:text-white\",\r\n \"focus:bg-gray-100 focus:text-gray-900 dark:focus:bg-white/[0.06] dark:focus:text-white\",\r\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport function DropdownMenuLabel({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"px-2 py-1.5 text-sm font-semibold text-gray-900 dark:text-white\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DropdownMenuSeparator({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"-mx-1 my-1 h-px bg-gray-200 dark:bg-white/[0.03]\", className)} {...props} />\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Settings, LogOut, User } from 'lucide-react';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { \r\n DropdownMenu, \r\n DropdownMenuTrigger, \r\n DropdownMenuContent, \r\n DropdownMenuItem, \r\n DropdownMenuSeparator,\r\n DropdownMenuLabel\r\n} from '../overlay/DropdownMenu';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface UserMenuProps {\r\n name: string;\r\n description?: string;\r\n avatarSrc?: string;\r\n avatarFallback?: string;\r\n className?: string;\r\n side?: 'top' | 'bottom' | 'left' | 'right';\r\n align?: 'start' | 'end' | 'center';\r\n}\r\n\r\nexport function UserMenu({ \r\n name, \r\n description, \r\n avatarSrc, \r\n avatarFallback,\r\n className,\r\n side = 'top',\r\n align = 'start'\r\n}: UserMenuProps) {\r\n return (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger className={cn(\"w-full outline-none\", className)}>\r\n <div className=\"group flex w-full items-center gap-3 rounded-2xl border border-gray-200 dark:border-white/5 bg-white dark:bg-white/[0.03] p-3 transition-colors hover:bg-gray-50 dark:hover:bg-white/[0.06]\">\r\n <Avatar src={avatarSrc} fallback={avatarFallback || name.charAt(0)} size=\"sm\" />\r\n <div className=\"flex flex-1 flex-col items-start text-left\">\r\n <span className=\"text-xs font-medium text-gray-900 dark:text-white\">{name}</span>\r\n {description && <span className=\"text-[10px] text-gray-500 dark:text-white/50\">{description}</span>}\r\n </div>\r\n <Settings className=\"h-4 w-4 text-gray-400 dark:text-white/50 transition-colors group-hover:text-gray-900 dark:group-hover:text-white\" />\r\n </div>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent className=\"w-56\" align={align} side={side}>\r\n <DropdownMenuLabel>My Account</DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem>\r\n <User className=\"mr-2 h-4 w-4\" />\r\n <span>Profile</span>\r\n </DropdownMenuItem>\r\n <DropdownMenuItem>\r\n <Settings className=\"mr-2 h-4 w-4\" />\r\n <span>Settings</span>\r\n </DropdownMenuItem>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem className=\"text-rose-400 focus:text-rose-400\">\r\n <LogOut className=\"mr-2 h-4 w-4\" />\r\n <span>Log out</span>\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst Breadcrumb = React.forwardRef<\r\n HTMLElement,\r\n React.ComponentPropsWithoutRef<\"nav\"> & {\r\n separator?: React.ReactNode\r\n }\r\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\r\nBreadcrumb.displayName = \"Breadcrumb\"\r\n\r\nconst BreadcrumbList = React.forwardRef<\r\n HTMLOListElement,\r\n React.ComponentPropsWithoutRef<\"ol\">\r\n>(({ className, ...props }, ref) => (\r\n <ol\r\n ref={ref}\r\n className={cn(\r\n \"flex flex-wrap items-center gap-1.5 break-words text-sm text-gray-500 dark:text-white/50 sm:gap-2.5\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nBreadcrumbList.displayName = \"BreadcrumbList\"\r\n\r\nconst BreadcrumbItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentPropsWithoutRef<\"li\">\r\n>(({ className, ...props }, ref) => (\r\n <li\r\n ref={ref}\r\n className={cn(\"inline-flex items-center gap-1.5\", className)}\r\n {...props}\r\n />\r\n))\r\nBreadcrumbItem.displayName = \"BreadcrumbItem\"\r\n\r\nconst BreadcrumbLink = React.forwardRef<\r\n HTMLAnchorElement,\r\n React.ComponentPropsWithoutRef<\"a\"> & {\r\n asChild?: boolean\r\n }\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <a\r\n ref={ref}\r\n className={cn(\"transition-colors hover:text-gray-900 dark:hover:text-white\", className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nBreadcrumbLink.displayName = \"BreadcrumbLink\"\r\n\r\nconst BreadcrumbPage = React.forwardRef<\r\n HTMLSpanElement,\r\n React.ComponentPropsWithoutRef<\"span\">\r\n>(({ className, ...props }, ref) => (\r\n <span\r\n ref={ref}\r\n role=\"link\"\r\n aria-disabled=\"true\"\r\n aria-current=\"page\"\r\n className={cn(\"font-normal text-gray-900 dark:text-white\", className)}\r\n {...props}\r\n />\r\n))\r\nBreadcrumbPage.displayName = \"BreadcrumbPage\"\r\n\r\nconst BreadcrumbSeparator = ({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"li\">) => (\r\n <li\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"[&>svg]:size-3.5\", className)}\r\n {...props}\r\n >\r\n {children ?? (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </svg>\r\n )}\r\n </li>\r\n)\r\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\"\r\n\r\nconst BreadcrumbEllipsis = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) => (\r\n <span\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\r\n </svg>\r\n <span className=\"sr-only\">More</span>\r\n </span>\r\n)\r\nBreadcrumbEllipsis.displayName = \"BreadcrumbElipssis\"\r\n\r\nexport {\r\n Breadcrumb,\r\n BreadcrumbList,\r\n BreadcrumbItem,\r\n BreadcrumbLink,\r\n BreadcrumbPage,\r\n BreadcrumbSeparator,\r\n BreadcrumbEllipsis,\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { PrimaryButton } from '../button/PrimaryButton';\r\n\r\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\r\n <nav\r\n role=\"navigation\"\r\n aria-label=\"pagination\"\r\n className={cn(\"mx-auto flex w-full justify-center\", className)}\r\n {...props}\r\n />\r\n)\r\nPagination.displayName = \"Pagination\"\r\n\r\nconst PaginationContent = React.forwardRef<\r\n HTMLUListElement,\r\n React.ComponentProps<\"ul\">\r\n>(({ className, ...props }, ref) => (\r\n <ul\r\n ref={ref}\r\n className={cn(\"flex flex-row items-center gap-1\", className)}\r\n {...props}\r\n />\r\n))\r\nPaginationContent.displayName = \"PaginationContent\"\r\n\r\nconst PaginationItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentProps<\"li\">\r\n>(({ className, ...props }, ref) => (\r\n <li ref={ref} className={cn(\"\", className)} {...props} />\r\n))\r\nPaginationItem.displayName = \"PaginationItem\"\r\n\r\ntype PaginationLinkProps = {\r\n isActive?: boolean\r\n} & React.ComponentProps<\"a\">\r\n\r\nconst PaginationLink = ({\r\n className,\r\n isActive,\r\n ...props\r\n}: PaginationLinkProps) => (\r\n <a\r\n aria-current={isActive ? \"page\" : undefined}\r\n className={cn(\r\n \"inline-flex h-9 w-9 items-center justify-center rounded-2xl text-sm font-medium transition-colors\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.03] hover:text-gray-900 dark:hover:text-white\",\r\n isActive ? \"bg-gray-100 text-gray-900 dark:bg-white/[0.06] dark:text-white\" : \"text-gray-500 dark:text-white/60\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nPaginationLink.displayName = \"PaginationLink\"\r\n\r\nconst PaginationPrevious = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) => (\r\n <PaginationLink\r\n aria-label=\"Go to previous page\"\r\n className={cn(\"w-auto gap-1 px-2.5\", className)}\r\n {...props}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <path d=\"m15 18-6-6 6-6\" />\r\n </svg>\r\n <span>Previous</span>\r\n </PaginationLink>\r\n)\r\nPaginationPrevious.displayName = \"PaginationPrevious\"\r\n\r\nconst PaginationNext = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) => (\r\n <PaginationLink\r\n aria-label=\"Go to next page\"\r\n className={cn(\"w-auto gap-1 px-2.5\", className)}\r\n {...props}\r\n >\r\n <span>Next</span>\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </svg>\r\n </PaginationLink>\r\n)\r\nPaginationNext.displayName = \"PaginationNext\"\r\n\r\nconst PaginationEllipsis = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) => (\r\n <span\r\n aria-hidden\r\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\r\n </svg>\r\n <span className=\"sr-only\">More pages</span>\r\n </span>\r\n)\r\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\r\n\r\nexport {\r\n Pagination,\r\n PaginationContent,\r\n PaginationEllipsis,\r\n PaginationItem,\r\n PaginationLink,\r\n PaginationNext,\r\n PaginationPrevious,\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { Heading } from '../typography/Heading';\r\nimport { Text } from '../typography/Text';\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Modal({ isOpen, onClose, children, className }: ModalProps) {\r\n const dialogRef = useRef<HTMLDialogElement>(null);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n if (isOpen) {\r\n if (!dialog.open) {\r\n dialog.showModal();\r\n document.body.style.overflow = 'hidden';\r\n }\r\n } else {\r\n if (dialog.open) {\r\n dialog.close();\r\n document.body.style.overflow = 'unset';\r\n }\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n const handleCancel = (e: Event) => {\r\n e.preventDefault();\r\n onClose();\r\n };\r\n\r\n dialog.addEventListener('cancel', handleCancel);\r\n return () => dialog.removeEventListener('cancel', handleCancel);\r\n }, [onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === dialogRef.current) {\r\n onClose();\r\n }\r\n };\r\n\r\n return createPortal(\r\n <dialog\r\n ref={dialogRef}\r\n onClick={handleBackdropClick}\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-transparent p-0 backdrop:bg-black/60 backdrop:backdrop-blur-sm open:flex open:items-center open:justify-center\",\r\n \"animate-in fade-in duration-200\",\r\n className\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"relative w-full max-w-lg scale-100 gap-4 border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A]/90 p-6 shadow-2xl backdrop-blur-xl transition-all sm:rounded-2xl\",\r\n \"animate-in fade-in zoom-in-95 duration-200 slide-in-from-bottom-2\"\r\n )}\r\n >\r\n {children}\r\n <button\r\n onClick={onClose}\r\n 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-gray-400 dark:focus:ring-white/20 disabled:pointer-events-none\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-gray-900 dark:text-white\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n <span className=\"sr-only\">Close</span>\r\n </button>\r\n </div>\r\n </dialog>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function ModalHeader({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left mb-4\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function ModalFooter({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function ModalTitle({ className, children }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <Heading as=\"h2\" className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}>\r\n {children}\r\n </Heading>\r\n );\r\n}\r\n\r\nexport function ModalDescription({ className, children }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <Text variant=\"muted\" className={cn(\"text-sm\", className)}>\r\n {children}\r\n </Text>\r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { Heading } from '../typography/Heading';\r\n\r\nexport interface DialogProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Dialog({ isOpen, onClose, children, className }: DialogProps) {\r\n const dialogRef = useRef<HTMLDialogElement>(null);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n if (isOpen) {\r\n if (!dialog.open) {\r\n dialog.showModal();\r\n }\r\n } else {\r\n if (dialog.open) {\r\n dialog.close();\r\n }\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n const handleCancel = (e: Event) => {\r\n e.preventDefault();\r\n onClose();\r\n };\r\n\r\n dialog.addEventListener('cancel', handleCancel);\r\n return () => dialog.removeEventListener('cancel', handleCancel);\r\n }, [onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === dialogRef.current) {\r\n onClose();\r\n }\r\n };\r\n\r\n return createPortal(\r\n <dialog\r\n ref={dialogRef}\r\n onClick={handleBackdropClick}\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-transparent p-0 backdrop:bg-black/60 backdrop:backdrop-blur-sm\",\r\n \"open:animate-in open:fade-in open:duration-200\",\r\n className\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"relative w-full max-w-lg scale-100 gap-4 border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A]/90 p-6 shadow-2xl backdrop-blur-xl transition-all sm:rounded-2xl\",\r\n \"animate-in fade-in zoom-in-95 duration-200 slide-in-from-bottom-2\"\r\n )}\r\n >\r\n {children}\r\n <button\r\n onClick={onClose}\r\n 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-gray-400 dark:focus:ring-white/20 disabled:pointer-events-none\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-gray-900 dark:text-white\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n <span className=\"sr-only\">Close</span>\r\n </button>\r\n </div>\r\n </dialog>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function DialogHeader({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left mb-4\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DialogFooter({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DialogTitle({ className, children }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <Heading as=\"h2\" className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}>\r\n {children}\r\n </Heading>\r\n );\r\n}\r\n\r\nexport function DialogDescription({ className, children }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <p className={cn(\"text-sm text-gray-500 dark:text-gray-400\", className)}>\r\n {children}\r\n </p>\r\n );\r\n}\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { Heading } from '../typography/Heading';\r\nimport { Text } from '../typography/Text';\r\n\r\nexport interface DrawerProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n position?: 'left' | 'right' | 'bottom';\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Drawer({ \r\n isOpen, \r\n onClose, \r\n position = 'right', \r\n children, \r\n className \r\n}: DrawerProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [shouldRender, setShouldRender] = useState(false);\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setShouldRender(true);\r\n // Small delay to allow render before animating in\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n });\r\n });\r\n document.body.style.overflow = 'hidden';\r\n } else {\r\n setIsVisible(false);\r\n const timer = setTimeout(() => {\r\n setShouldRender(false);\r\n document.body.style.overflow = 'unset';\r\n }, 300); // Match transition duration\r\n return () => clearTimeout(timer);\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === overlayRef.current) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (!shouldRender) return null;\r\n\r\n const positionClasses = {\r\n left: \"left-0 h-full w-3/4 max-w-sm border-r\",\r\n right: \"right-0 h-full w-3/4 max-w-sm border-l\",\r\n bottom: \"bottom-0 w-full h-auto max-h-[90vh] border-t rounded-t-2xl\",\r\n };\r\n\r\n const translateClasses = {\r\n left: isVisible ? \"translate-x-0\" : \"-translate-x-full\",\r\n right: isVisible ? \"translate-x-0\" : \"translate-x-full\",\r\n bottom: isVisible ? \"translate-y-0\" : \"translate-y-full\",\r\n };\r\n\r\n return createPortal(\r\n <div\r\n ref={overlayRef}\r\n onClick={handleBackdropClick}\r\n className={cn(\r\n \"fixed inset-0 z-50 flex bg-black/60 backdrop-blur-sm transition-opacity duration-300\",\r\n isVisible ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n <div\r\n className={cn(\r\n \"absolute bg-white dark:bg-[#0A0A0A] border-gray-200 dark:border-white/10 p-6 shadow-2xl transition-transform duration-300 ease-in-out\",\r\n positionClasses[position],\r\n translateClasses[position],\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function DrawerHeader({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left mb-6\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DrawerFooter({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-auto pt-6\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DrawerTitle({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <Heading as=\"h2\" className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)} {...props}>\r\n {children}\r\n </Heading>\r\n );\r\n}\r\n\r\nexport function DrawerDescription({ className, children, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <Text variant=\"muted\" className={cn(\"text-sm\", className)} {...props}>\r\n {children}\r\n </Text>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { useFloating } from '../../hooks/useFloating';\r\n\r\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\r\n\r\nexport interface TooltipProps {\r\n content: React.ReactNode;\r\n children: React.ReactNode;\r\n position?: TooltipPosition;\r\n delay?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Tooltip({ \r\n content, \r\n children, \r\n position = 'top', \r\n delay = 200,\r\n className \r\n}: TooltipProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n\r\n const { position: floatingPosition, isPositioned } = useFloating(triggerRef, contentRef, {\r\n side: position,\r\n align: 'center',\r\n sideOffset: 8,\r\n isOpen: isVisible,\r\n });\r\n\r\n const showTooltip = () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => setIsVisible(true), delay);\r\n };\r\n\r\n const hideTooltip = () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n setIsVisible(false);\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n };\r\n }, []);\r\n\r\n const animationClasses = {\r\n top: 'slide-in-from-bottom-2',\r\n bottom: 'slide-in-from-top-2',\r\n left: 'slide-in-from-right-2',\r\n right: 'slide-in-from-left-2',\r\n };\r\n\r\n return (\r\n <div \r\n ref={triggerRef}\r\n className=\"relative inline-flex\" \r\n onMouseEnter={showTooltip} \r\n onMouseLeave={hideTooltip}\r\n onFocus={showTooltip}\r\n onBlur={hideTooltip}\r\n >\r\n {children}\r\n {isVisible && createPortal(\r\n <div\r\n ref={contentRef}\r\n role=\"tooltip\"\r\n style={{\r\n top: floatingPosition.top,\r\n left: floatingPosition.left,\r\n }}\r\n className={cn(\r\n \"fixed z-[100] min-w-max max-w-xs rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A]/90 px-3 py-1.5 text-xs text-gray-900 dark:text-white shadow-xl backdrop-blur-md\",\r\n \"duration-200\",\r\n isPositioned ? \"animate-in fade-in opacity-100\" : \"opacity-0\",\r\n animationClasses[position],\r\n className\r\n )}\r\n >\r\n {content}\r\n </div>,\r\n document.body\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport type { ComboboxProps } from '../form/Combobox';\r\nimport { Combobox, ComboboxInput, ComboboxList, ComboboxItem, ComboboxEmpty } from '../form/Combobox';\r\nimport { Search } from 'lucide-react';\r\n\r\nexport interface CommandDialogProps extends ComboboxProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n}\r\n\r\nexport function Command({ children, ...props }: ComboboxProps) {\r\n return (\r\n <div className=\"flex h-full w-full flex-col overflow-hidden rounded-2xl bg-white dark:bg-black/90 text-gray-900 dark:text-white\">\r\n <Combobox usePopover={false} {...props}>\r\n {children}\r\n </Combobox>\r\n </div>\r\n );\r\n}\r\n\r\nexport function CommandDialog({ \r\n children, \r\n open, \r\n onOpenChange,\r\n ...props \r\n}: CommandDialogProps) {\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onOpenChange(false);\r\n };\r\n\r\n if (open) {\r\n document.addEventListener('keydown', handleEscape);\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n document.body.style.overflow = 'unset';\r\n };\r\n }, [open, onOpenChange]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === overlayRef.current) {\r\n onOpenChange(false);\r\n }\r\n };\r\n\r\n if (!open) return null;\r\n\r\n return createPortal(\r\n <div\r\n ref={overlayRef}\r\n onClick={handleBackdropClick}\r\n className=\"fixed inset-0 z-50 flex items-start justify-center bg-black/60 backdrop-blur-sm animate-in fade-in duration-200 pt-[20vh]\"\r\n >\r\n <div className=\"relative w-full max-w-lg overflow-hidden rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-black/90 shadow-2xl animate-in zoom-in-95 duration-200\">\r\n <Combobox usePopover={false} {...props}>\r\n {children}\r\n </Combobox>\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function CommandInput({ className, ...props }: React.InputHTMLAttributes<HTMLInputElement>) {\r\n return (\r\n <div className=\"flex items-center border-b border-gray-200 dark:border-white/10 px-3\" cmdk-input-wrapper=\"\">\r\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\r\n <ComboboxInput \r\n className={cn(\r\n \"flex h-12 w-full rounded-md bg-transparent py-3 text-sm text-gray-900 dark:text-white outline-none placeholder:text-gray-400 dark:placeholder:text-white/50 disabled:cursor-not-allowed disabled:opacity-50 border-none focus:ring-0 px-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport function CommandList({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <ComboboxList \r\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden p-2\", className)} \r\n {...props} \r\n />\r\n );\r\n}\r\n\r\nexport function CommandEmpty(props: React.HTMLAttributes<HTMLDivElement>) {\r\n return <ComboboxEmpty className=\"py-6 text-center text-sm\" {...props} />;\r\n}\r\n\r\nexport function CommandGroup({ \r\n children, \r\n heading, \r\n className, \r\n ...props \r\n}: React.HTMLAttributes<HTMLDivElement> & { heading?: React.ReactNode }) {\r\n return (\r\n <div className={cn(\"overflow-hidden p-1 text-gray-900 dark:text-white\", className)} {...props}>\r\n {heading && (\r\n <div className=\"px-2 py-1.5 text-xs font-medium text-gray-500 dark:text-white/50\">\r\n {heading}\r\n </div>\r\n )}\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function CommandItem({ \r\n className, \r\n ...props \r\n}: React.ComponentProps<typeof ComboboxItem>) {\r\n return (\r\n <ComboboxItem \r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-2xl px-2 py-1.5 text-sm outline-none text-gray-900 dark:text-white aria-selected:bg-gray-100 dark:aria-selected:bg-white/[0.06] aria-selected:text-gray-900 dark:aria-selected:text-white data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )} \r\n {...props} \r\n />\r\n );\r\n}\r\n\r\nexport function CommandShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\r\n return (\r\n <span\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-gray-400 dark:text-white/50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n","import { useContext } from 'react';\r\nimport { ToastContext } from '../components/feedback/ToastProvider';\r\n\r\nexport function useToast() {\r\n const context = useContext(ToastContext);\r\n if (!context) {\r\n throw new Error('useToast must be used within a ToastProvider');\r\n }\r\n return context;\r\n}\r\n","import { useState, useEffect, useCallback, useRef } from 'react';\r\n\r\nexport function useTimer(initialSeconds: number = 0) {\r\n const [seconds, setSeconds] = useState(initialSeconds);\r\n const [isActive, setIsActive] = useState(false);\r\n const intervalRef = useRef<any>(null);\r\n\r\n const start = useCallback(() => {\r\n if (!isActive) {\r\n setIsActive(true);\r\n intervalRef.current = setInterval(() => {\r\n setSeconds((prev) => prev + 1);\r\n }, 1000);\r\n }\r\n }, [isActive]);\r\n\r\n const pause = useCallback(() => {\r\n if (isActive && intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n setIsActive(false);\r\n }\r\n }, [isActive]);\r\n\r\n const reset = useCallback(() => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n }\r\n setIsActive(false);\r\n setSeconds(0);\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n const formatTime = (totalSeconds: number) => {\r\n const hours = Math.floor(totalSeconds / 3600);\r\n const minutes = Math.floor((totalSeconds % 3600) / 60);\r\n const secs = totalSeconds % 60;\r\n return [hours, minutes, secs]\r\n .map((v) => (v < 10 ? '0' + v : v))\r\n .filter((v, i) => v !== '00' || i > 0)\r\n .join(':');\r\n };\r\n\r\n return {\r\n seconds,\r\n isActive,\r\n start,\r\n pause,\r\n reset,\r\n formattedTime: formatTime(seconds),\r\n };\r\n}\r\n","import type { RefObject } from 'react';\r\nimport { useState, useEffect, useRef } from 'react';\r\n\r\ninterface UseIntersectionOptions extends IntersectionObserverInit {\r\n freezeOnceVisible?: boolean;\r\n}\r\n\r\nexport function useIntersection(\r\n elementRef: RefObject<Element>,\r\n {\r\n threshold = 0,\r\n root = null,\r\n rootMargin = '0%',\r\n freezeOnceVisible = false,\r\n }: UseIntersectionOptions = {}\r\n): IntersectionObserverEntry | undefined {\r\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\r\n\r\n const frozen = entry?.isIntersecting && freezeOnceVisible;\r\n\r\n const updateEntry = ([entry]: IntersectionObserverEntry[]): void => {\r\n setEntry(entry);\r\n };\r\n\r\n useEffect(() => {\r\n const node = elementRef?.current;\r\n const hasIOSupport = !!window.IntersectionObserver;\r\n\r\n if (!hasIOSupport || frozen || !node) return;\r\n\r\n const observerParams = { threshold, root, rootMargin };\r\n const observer = new IntersectionObserver(updateEntry, observerParams);\r\n\r\n observer.observe(node);\r\n\r\n return () => observer.disconnect();\r\n }, [elementRef, threshold, root, rootMargin, frozen]);\r\n\r\n return entry;\r\n}\r\n","import type { FormEvent } from 'react';\r\nimport { useState, useCallback } from 'react';\r\n\r\ninterface UseFormOptions<T> {\r\n initialValues: T;\r\n onSubmit: (values: T) => void | Promise<void>;\r\n}\r\n\r\nexport function useForm<T extends Record<string, unknown>>({\r\n initialValues,\r\n onSubmit,\r\n}: UseFormOptions<T>) {\r\n const [values, setValues] = useState<T>(initialValues);\r\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n const handleChange = useCallback((\r\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>\r\n ) => {\r\n const { name, value, type } = e.target;\r\n const val = type === 'checkbox' ? (e.target as HTMLInputElement).checked : value;\r\n\r\n setValues((prev) => ({ ...prev, [name]: val }));\r\n \r\n // Clear error when user starts typing\r\n if (errors[name as keyof T]) {\r\n setErrors((prev) => ({ ...prev, [name]: '' }));\r\n }\r\n }, [errors]);\r\n\r\n const handleSubmit = useCallback(async (e: FormEvent<HTMLFormElement>) => {\r\n e.preventDefault();\r\n const form = e.currentTarget;\r\n \r\n if (!form.checkValidity()) {\r\n const newErrors: Partial<Record<keyof T, string>> = {};\r\n Array.from(form.elements).forEach((element) => {\r\n const input = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (input.name && !input.validity.valid) {\r\n newErrors[input.name as keyof T] = input.validationMessage;\r\n }\r\n });\r\n setErrors(newErrors);\r\n return;\r\n }\r\n\r\n setIsSubmitting(true);\r\n try {\r\n await onSubmit(values);\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n }, [values, onSubmit]);\r\n\r\n const register = useCallback((name: keyof T) => ({\r\n name: name as string,\r\n value: values[name] as string | number | readonly string[] | undefined,\r\n onChange: handleChange,\r\n error: errors[name],\r\n }), [values, errors, handleChange]);\r\n\r\n return {\r\n values,\r\n errors,\r\n isSubmitting,\r\n handleChange,\r\n handleSubmit,\r\n register,\r\n setValues,\r\n setErrors,\r\n };\r\n}\r\n","import type { RefObject } from 'react';\r\nimport { useState, useEffect, useLayoutEffect } from 'react';\r\n\r\nexport type Breakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\r\n\r\nconst breakpoints: Record<Breakpoint, number> = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n};\r\n\r\nexport function useMediaQuery(query: string): boolean {\r\n const [matches, setMatches] = useState(false);\r\n\r\n useEffect(() => {\r\n const media = window.matchMedia(query);\r\n setMatches(media.matches);\r\n \r\n const listener = () => setMatches(media.matches);\r\n media.addEventListener('change', listener);\r\n return () => media.removeEventListener('change', listener);\r\n }, [query]);\r\n\r\n return matches;\r\n}\r\n\r\nexport function useBreakpoint(breakpoint: Breakpoint): boolean {\r\n return useMediaQuery(`(min-width: ${breakpoints[breakpoint]}px)`);\r\n}\r\n\r\ninterface ContainerSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport function useContainerQuery(ref: RefObject<HTMLElement>): ContainerSize {\r\n const [size, setSize] = useState<ContainerSize>({ width: 0, height: 0 });\r\n\r\n useLayoutEffect(() => {\r\n if (!ref.current) return;\r\n\r\n const observer = new ResizeObserver((entries) => {\r\n for (const entry of entries) {\r\n setSize({\r\n width: entry.contentRect.width,\r\n height: entry.contentRect.height,\r\n });\r\n }\r\n });\r\n\r\n observer.observe(ref.current);\r\n return () => observer.disconnect();\r\n }, [ref]);\r\n\r\n return size;\r\n}\r\n","import { useState, useEffect, useCallback } from 'react';\r\n\r\nexport interface ScrollValues {\r\n scrollX: number;\r\n scrollY: number;\r\n scrollProgressX: number;\r\n scrollProgressY: number;\r\n}\r\n\r\nexport function useScroll(): ScrollValues {\r\n const [values, setValues] = useState<ScrollValues>({\r\n scrollX: 0,\r\n scrollY: 0,\r\n scrollProgressX: 0,\r\n scrollProgressY: 0,\r\n });\r\n\r\n const handleScroll = useCallback(() => {\r\n const x = window.scrollX;\r\n const y = window.scrollY;\r\n \r\n const width = document.documentElement.scrollWidth - document.documentElement.clientWidth;\r\n const height = document.documentElement.scrollHeight - document.documentElement.clientHeight;\r\n \r\n setValues({\r\n scrollX: x,\r\n scrollY: y,\r\n scrollProgressX: width > 0 ? x / width : 0,\r\n scrollProgressY: height > 0 ? y / height : 0,\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n \r\n return () => window.removeEventListener('scroll', handleScroll);\r\n }, [handleScroll]);\r\n\r\n return values;\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../utils/cn';\r\nimport { useScroll } from '../hooks/useScroll';\r\n\r\nexport interface ScrollProgressProps extends React.HTMLAttributes<HTMLDivElement> {\r\n color?: string;\r\n height?: number | string;\r\n position?: 'top' | 'bottom';\r\n}\r\n\r\nexport function ScrollProgress({ \r\n className, \r\n color = 'bg-blue-500', \r\n height = 2, \r\n position = 'top',\r\n ...props \r\n}: ScrollProgressProps) {\r\n const { scrollProgressY } = useScroll();\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"fixed left-0 right-0 z-[100] w-full pointer-events-none\",\r\n position === 'top' ? 'top-0' : 'bottom-0',\r\n className\r\n )}\r\n style={{ height }}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\"h-full transition-all duration-75 ease-out\", color)}\r\n style={{ \r\n width: `${scrollProgressY * 100}%`,\r\n boxShadow: scrollProgressY > 0 ? `0 0 10px ${color.replace('bg-', 'var(--')}` : 'none'\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils/cn';\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex items-center gap-1 rounded-full border px-2.5 py-1 text-xs font-medium whitespace-nowrap transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-gray-100 text-gray-700 border-gray-200 dark:bg-white/[0.06] dark:text-white/70 dark:border-white/10\",\r\n neutral: \"bg-gray-100 text-gray-700 border-gray-200 dark:bg-white/[0.06] dark:text-white/70 dark:border-white/10\",\r\n success: \"bg-emerald-100 text-emerald-700 border-emerald-200 dark:bg-emerald-400/15 dark:text-emerald-200 dark:border-emerald-400/20\",\r\n warning: \"bg-amber-100 text-amber-700 border-amber-200 dark:bg-amber-400/15 dark:text-amber-200 dark:border-amber-400/20\",\r\n danger: \"bg-rose-100 text-rose-700 border-rose-200 dark:bg-rose-400/15 dark:text-rose-200 dark:border-rose-400/20\",\r\n info: \"bg-sky-100 text-sky-700 border-sky-200 dark:bg-sky-400/15 dark:text-sky-200 dark:border-sky-400/20\",\r\n outline: \"bg-transparent text-white/60 border-white/10 hover:bg-white/[0.06]\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface BadgeProps \r\n extends React.HTMLAttributes<HTMLSpanElement>,\r\n VariantProps<typeof badgeVariants> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\r\n ({ className, variant, ...props }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(badgeVariants({ variant }), className)}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\n\r\nBadge.displayName = 'Badge';\r\n","import React from 'react';\r\nimport { cn } from '../utils/cn';\r\n\r\ninterface DividerProps extends React.HTMLAttributes<HTMLHRElement> {\r\n orientation?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport const Divider = React.forwardRef<HTMLHRElement, DividerProps>(\r\n ({ orientation = 'horizontal', className, ...props }, ref) => {\r\n return (\r\n <hr\r\n ref={ref}\r\n className={cn(\r\n 'border-0 bg-gray-200 dark:bg-white/10',\r\n {\r\n 'h-px w-full': orientation === 'horizontal',\r\n 'h-full w-px': orientation === 'vertical',\r\n },\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\n\r\nDivider.displayName = 'Divider';\r\n","import React from 'react';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(\r\n ({ children, className, ...props }, ref) => {\r\n return (\r\n <kbd\r\n ref={ref}\r\n className={cn(\r\n 'rounded-lg border border-gray-200 dark:border-white/10 bg-gray-100 dark:bg-white/[0.03] px-2 py-1 text-[11px] font-semibold text-gray-500 dark:text-white/65',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </kbd>\r\n );\r\n }\r\n);\r\n\r\nKbd.displayName = 'Kbd';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Info } from 'lucide-react';\r\n\r\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\r\n icon?: React.ReactNode;\r\n title: string;\r\n description?: string;\r\n action?: React.ReactNode;\r\n}\r\n\r\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\r\n ({ icon, title, description, action, className, ...props }, ref) => {\r\n return (\r\n <Surface\r\n ref={ref}\r\n className={cn('p-8 text-center', className)}\r\n {...props}\r\n >\r\n <div className=\"mx-auto w-full max-w-md space-y-3\">\r\n <div className=\"mx-auto grid h-12 w-12 place-items-center rounded-2xl border border-white/10 bg-white/[0.03] text-white/70\">\r\n {icon ?? <Info className=\"h-5 w-5\" />}\r\n </div>\r\n <div className=\"text-lg font-semibold text-white\">{title}</div>\r\n {description ? <div className=\"text-sm text-white/55\">{description}</div> : null}\r\n {action ? <div className=\"pt-2 flex justify-center\">{action}</div> : null}\r\n </div>\r\n </Surface>\r\n );\r\n }\r\n);\r\n\r\nEmptyState.displayName = 'EmptyState';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\r\n variant?: 'default' | 'circle' | 'text';\r\n}\r\n\r\nexport function Skeleton({ className, variant = 'default', ...props }: SkeletonProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"animate-pulse bg-gray-200 dark:bg-white/[0.03]\",\r\n variant === 'circle' && \"rounded-full\",\r\n variant === 'default' && \"rounded-2xl\",\r\n variant === 'text' && \"rounded h-4 w-full\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ScrollArea } from './ScrollArea';\r\n\r\ninterface TableContextValue {\r\n // Add context values if needed in the future\r\n}\r\n\r\nconst TableContext = React.createContext<TableContextValue | null>(null);\r\n\r\nexport interface TableProps extends React.HTMLAttributes<HTMLTableElement> {\r\n wrapperClassName?: string;\r\n rounded?: boolean;\r\n maxHeight?: string | number;\r\n}\r\n\r\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\r\n ({ className, wrapperClassName, rounded = false, maxHeight, ...props }, ref) => (\r\n <ScrollArea \r\n className={cn(\"w-full\", rounded && \"rounded-2xl border border-white/10\", wrapperClassName)}\r\n style={{ maxHeight }}\r\n orientation={maxHeight ? \"both\" : \"horizontal\"}\r\n scrollbarSize=\"sm\"\r\n >\r\n <table\r\n ref={ref}\r\n className={cn('w-full caption-bottom text-sm text-left', className)}\r\n {...props}\r\n />\r\n </ScrollArea>\r\n )\r\n);\r\nTable.displayName = 'Table';\r\n\r\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\r\n ({ className, ...props }, ref) => (\r\n <thead ref={ref} className={cn('bg-white/[0.02] text-white/55', className)} {...props} />\r\n )\r\n);\r\nTableHeader.displayName = 'TableHeader';\r\n\r\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\r\n ({ className, ...props }, ref) => (\r\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\r\n )\r\n);\r\nTableBody.displayName = 'TableBody';\r\n\r\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\r\n hoverable?: boolean;\r\n optimized?: boolean;\r\n}\r\n\r\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\r\n ({ className, hoverable = true, optimized = false, ...props }, ref) => (\r\n <tr\r\n ref={ref}\r\n className={cn(\r\n 'border-t border-white/10 transition-colors data-[state=selected]:bg-white/[0.04]',\r\n hoverable && 'hover:bg-white/[0.02]',\r\n className\r\n )}\r\n style={optimized ? {\r\n contentVisibility: 'auto',\r\n containIntrinsicSize: '0 56px', // Estimated row height\r\n } : undefined}\r\n {...props}\r\n />\r\n )\r\n);\r\nTableRow.displayName = 'TableRow';\r\n\r\nexport const TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\r\n ({ className, ...props }, ref) => (\r\n <th\r\n ref={ref}\r\n className={cn(\r\n 'h-10 px-5 py-3 text-left align-middle font-semibold text-white/55 [&:has([role=checkbox])]:pr-0 whitespace-nowrap',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n);\r\nTableHead.displayName = 'TableHead';\r\n\r\nexport const TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\r\n ({ className, ...props }, ref) => (\r\n <td\r\n ref={ref}\r\n className={cn('p-5 align-middle [&:has([role=checkbox])]:pr-0 text-white/85 whitespace-nowrap', className)}\r\n {...props}\r\n />\r\n )\r\n);\r\nTableCell.displayName = 'TableCell';\r\n","import React, { useState, useMemo } from 'react';\r\nimport { Search, ArrowUpDown, ArrowUp, ArrowDown } from 'lucide-react';\r\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from './Table';\r\nimport { TextInput } from '../form/TextInput';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface Column<T> {\r\n key: keyof T | string;\r\n header: string;\r\n sortable?: boolean;\r\n render?: (item: T) => React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface DataTableProps<T> {\r\n data: T[];\r\n columns: Column<T>[];\r\n searchPlaceholder?: string;\r\n searchKeys?: (keyof T)[];\r\n onRowClick?: (item: T) => void;\r\n className?: string;\r\n maxHeight?: number;\r\n rounded?: boolean;\r\n}\r\n\r\nexport function DataTable<T extends Record<string, unknown>>({\r\n data,\r\n columns,\r\n searchPlaceholder = \"Search...\",\r\n searchKeys,\r\n onRowClick,\r\n className,\r\n maxHeight,\r\n rounded = true\r\n}: DataTableProps<T>) {\r\n const [search, setSearch] = useState('');\r\n const [sortConfig, setSortConfig] = useState<{ key: keyof T | string; direction: 'asc' | 'desc' | null }>({\r\n key: '',\r\n direction: null\r\n });\r\n\r\n // Optimized search and sort logic with useMemo\r\n const processedData = useMemo(() => {\r\n let filtered = [...data];\r\n\r\n // Search\r\n if (search && searchKeys) {\r\n filtered = filtered.filter(item =>\r\n searchKeys.some(key => \r\n String(item[key] ?? '').toLowerCase().includes(search.toLowerCase())\r\n )\r\n );\r\n }\r\n\r\n // Sort\r\n if (sortConfig.key && sortConfig.direction) {\r\n filtered.sort((a, b) => {\r\n const aValue = a[sortConfig.key as keyof T];\r\n const bValue = b[sortConfig.key as keyof T];\r\n \r\n if (aValue === undefined || aValue === null || bValue === undefined || bValue === null) return 0;\r\n if (aValue < bValue) return sortConfig.direction === 'asc' ? -1 : 1;\r\n if (aValue > bValue) return sortConfig.direction === 'asc' ? 1 : -1;\r\n return 0;\r\n });\r\n }\r\n\r\n return filtered;\r\n }, [data, search, searchKeys, sortConfig]);\r\n\r\n const handleSort = (key: keyof T | string) => {\r\n setSortConfig(prev => ({\r\n key,\r\n direction: prev.key === key && prev.direction === 'asc' ? 'desc' : 'asc'\r\n }));\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-4\", className)}>\r\n {searchKeys && (\r\n <div className=\"relative max-w-sm\">\r\n <TextInput\r\n placeholder={searchPlaceholder}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n leftIcon={<Search className=\"w-4 h-4 text-white/40\" />}\r\n />\r\n </div>\r\n )}\r\n\r\n <Table rounded={rounded} maxHeight={maxHeight}>\r\n <TableHeader>\r\n <TableRow>\r\n {columns.map((col) => (\r\n <TableHead \r\n key={String(col.key)} \r\n className={cn(col.sortable && \"cursor-pointer select-none hover:text-cyan-500 transition-colors\", col.className)}\r\n onClick={() => col.sortable && handleSort(col.key)}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {col.header}\r\n {col.sortable && (\r\n <span className=\"text-white/30\">\r\n {sortConfig.key === col.key ? (\r\n sortConfig.direction === 'asc' ? <ArrowUp className=\"w-3 h-3 text-cyan-500\" /> : <ArrowDown className=\"w-3 h-3 text-cyan-500\" />\r\n ) : (\r\n <ArrowUpDown className=\"w-3 h-3\" />\r\n )}\r\n </span>\r\n )}\r\n </div>\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {processedData.map((item, idx) => (\r\n <TableRow \r\n key={idx} \r\n onClick={() => onRowClick?.(item)}\r\n className={cn(onRowClick && \"cursor-pointer hover:bg-white/[0.03] transition-colors group\")}\r\n >\r\n {columns.map((col) => (\r\n <TableCell key={String(col.key)} className={col.className}>\r\n {col.render ? col.render(item) : (item[col.key as keyof T] as React.ReactNode)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))}\r\n {processedData.length === 0 && (\r\n <TableRow>\r\n <TableCell colSpan={columns.length} className=\"h-32 text-center text-white/40\">\r\n No results found for \"{search}\"\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n}\r\n","import { useMemo, useState, useCallback } from 'react';\r\nimport type { KanbanTask, KanbanColumn, SortConfig } from './types';\r\n\r\ninterface UseKanbanTasksProps {\r\n tasks: KanbanTask[];\r\n columns: KanbanColumn[];\r\n groupBy?: keyof KanbanTask;\r\n pageSize: number;\r\n}\r\n\r\nexport function useKanbanTasks({ tasks, columns, groupBy, pageSize }: UseKanbanTasksProps) {\r\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\r\n const [visibleCounts, setVisibleCounts] = useState<Record<string, number>>({});\r\n\r\n const sortedTasks = useMemo(() => {\r\n if (!sortConfig) return tasks;\r\n\r\n return [...tasks].sort((a, b) => {\r\n const { field, direction } = sortConfig;\r\n let comparison = 0;\r\n\r\n if (field === 'title') {\r\n comparison = a.title.localeCompare(b.title);\r\n } else if (field === 'priority') {\r\n const priorityOrder = { urgent: 4, high: 3, medium: 2, low: 1, neutral: 0 };\r\n const aPrio = priorityOrder[a.priority as keyof typeof priorityOrder] || 0;\r\n const bPrio = priorityOrder[b.priority as keyof typeof priorityOrder] || 0;\r\n comparison = aPrio - bPrio;\r\n } else if (field === 'dueDate') {\r\n comparison = (a.dueDate || '').localeCompare(b.dueDate || '');\r\n }\r\n\r\n return direction === 'asc' ? comparison : -comparison;\r\n });\r\n }, [tasks, sortConfig]);\r\n\r\n const tasksByGroupAndColumn = useMemo(() => {\r\n const groups: Record<string, Record<string, KanbanTask[]>> = {};\r\n\r\n if (groupBy) {\r\n sortedTasks.forEach(task => {\r\n const groupValue = String(task[groupBy] || 'Other');\r\n if (!groups[groupValue]) groups[groupValue] = {};\r\n const group = groups[groupValue]!;\r\n if (!group[task.columnId]) group[task.columnId] = [];\r\n group[task.columnId]!.push(task);\r\n });\r\n } else {\r\n groups['default'] = {};\r\n const defaultGroup = groups['default']!;\r\n columns.forEach(col => {\r\n defaultGroup[col.id] = sortedTasks.filter(t => t.columnId === col.id);\r\n });\r\n }\r\n\r\n return groups;\r\n }, [sortedTasks, columns, groupBy]);\r\n\r\n const handleLoadMore = useCallback((columnId: string) => {\r\n setVisibleCounts(prev => ({\r\n ...prev,\r\n [columnId]: (prev[columnId] || pageSize) + pageSize\r\n }));\r\n }, [pageSize]);\r\n\r\n return {\r\n tasksByGroupAndColumn,\r\n sortConfig,\r\n setSortConfig,\r\n visibleCounts,\r\n handleLoadMore,\r\n sortedTasks\r\n };\r\n}\r\n","import { useState, useCallback, useRef } from 'react';\r\nimport type { KanbanTask, KanbanColumn, DropPosition } from './types';\r\n\r\ninterface UseKanbanDragAndDropProps {\r\n tasks: KanbanTask[];\r\n columns: KanbanColumn[];\r\n selectedTaskIds: string[];\r\n onTaskMove?: (taskId: string, toColumnId: string, toTaskId?: string, position?: 'top' | 'bottom') => void;\r\n onColumnMove?: (columnId: string, toColumnId: string, position?: 'left' | 'right') => void;\r\n onTaskDrop?: (taskId: string, fromColumnId: string, toColumnId: string, index: number) => void;\r\n onTaskDragStart?: (taskId: string) => void;\r\n onTaskDragEnd?: (taskId: string) => void;\r\n}\r\n\r\nexport function useKanbanDragAndDrop({\r\n tasks,\r\n columns,\r\n selectedTaskIds,\r\n onTaskMove,\r\n onColumnMove,\r\n onTaskDrop,\r\n onTaskDragStart,\r\n onTaskDragEnd\r\n}: UseKanbanDragAndDropProps) {\r\n const [draggedTaskId, setDraggedTaskId] = useState<string | null>(null);\r\n const [draggedColumnId, setDraggedColumnId] = useState<string | null>(null);\r\n const [dragOverColumnId, setDragOverColumnId] = useState<string | null>(null);\r\n const [dragOverTaskId, setDragOverTaskId] = useState<string | null>(null);\r\n const [dropPosition, setDropPosition] = useState<DropPosition | null>(null);\r\n \r\n const touchTimeout = useRef<any>(null);\r\n const lastTouchPos = useRef<{ x: number, y: number } | null>(null);\r\n\r\n const handleDragStart = (e: React.DragEvent, id: string, type: 'task' | 'column') => {\r\n if (type === 'task') {\r\n setDraggedTaskId(id);\r\n e.dataTransfer.setData('taskId', id);\r\n onTaskDragStart?.(id);\r\n } else {\r\n setDraggedColumnId(id);\r\n e.dataTransfer.setData('columnId', id);\r\n }\r\n e.dataTransfer.effectAllowed = 'move';\r\n };\r\n\r\n const handleDragEnd = useCallback(() => {\r\n if (draggedTaskId) {\r\n onTaskDragEnd?.(draggedTaskId);\r\n }\r\n setDraggedTaskId(null);\r\n setDraggedColumnId(null);\r\n setDragOverColumnId(null);\r\n setDragOverTaskId(null);\r\n setDropPosition(null);\r\n }, [draggedTaskId, onTaskDragEnd]);\r\n\r\n const handleDragOver = (e: React.DragEvent, columnId: string, taskId?: string) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = 'move';\r\n \r\n if (draggedColumnId) {\r\n setDragOverColumnId(columnId);\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\r\n const midpoint = rect.left + rect.width / 2;\r\n setDropPosition(e.clientX < midpoint ? 'left' : 'right');\r\n } else {\r\n setDragOverColumnId(columnId);\r\n \r\n if (taskId) {\r\n setDragOverTaskId(taskId);\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\r\n const midpoint = rect.top + rect.height / 2;\r\n setDropPosition(e.clientY < midpoint ? 'top' : 'bottom');\r\n } else if (e.target === e.currentTarget) {\r\n setDragOverTaskId(null);\r\n setDropPosition(null);\r\n }\r\n }\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent, toColumnId: string, toTaskId?: string) => {\r\n e.preventDefault();\r\n const taskId = draggedTaskId || e.dataTransfer.getData('taskId');\r\n const columnId = draggedColumnId || e.dataTransfer.getData('columnId');\r\n\r\n if (columnId && onColumnMove) {\r\n onColumnMove(columnId, toColumnId, dropPosition === 'right' ? 'right' : 'left');\r\n } else if (taskId && onTaskMove) {\r\n const task = tasks.find(t => t.id === taskId);\r\n if (!task) return;\r\n\r\n const tasksToMove = selectedTaskIds.includes(taskId) \r\n ? selectedTaskIds \r\n : [taskId];\r\n\r\n tasksToMove.forEach((id) => {\r\n const currentTask = tasks.find(t => t.id === id);\r\n const fromColumnId = currentTask?.columnId || '';\r\n onTaskMove(id, toColumnId, toTaskId, dropPosition === 'bottom' ? 'bottom' : 'top');\r\n onTaskDrop?.(id, fromColumnId, toColumnId, 0);\r\n });\r\n }\r\n\r\n handleDragEnd();\r\n };\r\n\r\n const handleTouchStart = (e: React.TouchEvent, id: string, type: 'task' | 'column') => {\r\n const touch = e.touches[0];\r\n if (!touch) return;\r\n\r\n touchTimeout.current = setTimeout(() => {\r\n if (type === 'task') {\r\n setDraggedTaskId(id);\r\n onTaskDragStart?.(id);\r\n } else {\r\n setDraggedColumnId(id);\r\n }\r\n lastTouchPos.current = { x: touch.clientX, y: touch.clientY };\r\n }, 500);\r\n };\r\n\r\n const handleTouchMove = (e: React.TouchEvent) => {\r\n if (!draggedTaskId && !draggedColumnId) return;\r\n e.preventDefault();\r\n \r\n const touch = e.touches[0];\r\n if (!touch) return;\r\n\r\n const target = document.elementFromPoint(touch.clientX, touch.clientY);\r\n if (!target) return;\r\n\r\n const columnEl = target.closest('[data-column-id]');\r\n const taskEl = target.closest('[data-task-id]');\r\n\r\n if (columnEl) {\r\n const columnId = columnEl.getAttribute('data-column-id')!;\r\n setDragOverColumnId(columnId);\r\n \r\n if (draggedColumnId) {\r\n const rect = columnEl.getBoundingClientRect();\r\n const midpoint = rect.left + rect.width / 2;\r\n setDropPosition(touch.clientX < midpoint ? 'left' : 'right');\r\n } else if (taskEl) {\r\n const taskId = taskEl.getAttribute('data-task-id')!;\r\n setDragOverTaskId(taskId);\r\n const rect = taskEl.getBoundingClientRect();\r\n const midpoint = rect.top + rect.height / 2;\r\n setDropPosition(touch.clientY < midpoint ? 'top' : 'bottom');\r\n }\r\n }\r\n };\r\n\r\n const handleTouchEnd = (e: React.TouchEvent) => {\r\n clearTimeout(touchTimeout.current);\r\n if (draggedTaskId || draggedColumnId) {\r\n if (dragOverColumnId) {\r\n const taskId = draggedTaskId;\r\n const columnId = draggedColumnId;\r\n\r\n if (columnId && onColumnMove) {\r\n onColumnMove(columnId, dragOverColumnId, dropPosition === 'right' ? 'right' : 'left');\r\n } else if (taskId && onTaskMove) {\r\n onTaskMove(taskId, dragOverColumnId, dragOverTaskId || undefined, dropPosition === 'bottom' ? 'bottom' : 'top');\r\n }\r\n }\r\n handleDragEnd();\r\n }\r\n };\r\n\r\n return {\r\n draggedTaskId,\r\n draggedColumnId,\r\n dragOverColumnId,\r\n dragOverTaskId,\r\n dropPosition,\r\n handleDragStart,\r\n handleDragEnd,\r\n handleDragOver,\r\n handleDrop,\r\n handleTouchStart,\r\n handleTouchMove,\r\n handleTouchEnd,\r\n setDraggedTaskId\r\n };\r\n}\r\n","import { useState, useRef, useCallback } from 'react';\r\n\r\nexport function useKanbanBoardScroll() {\r\n const [isDraggingBoard, setIsDraggingBoard] = useState(false);\r\n const [startX, setStartX] = useState(0);\r\n const [scrollLeft, setScrollLeft] = useState(0);\r\n const boardRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleBoardMouseDown = (e: React.MouseEvent) => {\r\n if ((e.target as HTMLElement).closest('button') || \r\n (e.target as HTMLElement).closest('[draggable=\"true\"]') ||\r\n (e.target as HTMLElement).closest('.no-drag')) return;\r\n \r\n setIsDraggingBoard(true);\r\n setStartX(e.pageX - (boardRef.current?.offsetLeft || 0));\r\n setScrollLeft(boardRef.current?.scrollLeft || 0);\r\n };\r\n\r\n const handleBoardMouseMove = (e: React.MouseEvent) => {\r\n if (!isDraggingBoard) return;\r\n e.preventDefault();\r\n const x = e.pageX - (boardRef.current?.offsetLeft || 0);\r\n const walk = (x - startX) * 2;\r\n if (boardRef.current) {\r\n boardRef.current.scrollLeft = scrollLeft - walk;\r\n }\r\n };\r\n\r\n const handleBoardMouseUp = () => {\r\n setIsDraggingBoard(false);\r\n };\r\n\r\n return {\r\n boardRef,\r\n isDraggingBoard,\r\n handleBoardMouseDown,\r\n handleBoardMouseMove,\r\n handleBoardMouseUp\r\n };\r\n}\r\n","import React from 'react';\r\nimport { Lock, Trash2, GripVertical, MessageSquare, Paperclip, Clock, Play, Pause } from 'lucide-react';\r\nimport { Surface } from '../../../primitives/Surface';\r\nimport { Badge } from '../../../primitives/Badge';\r\nimport { Text } from '../../typography/Text';\r\nimport { Checkbox } from '../../form/Checkbox';\r\nimport { cn } from '../../../utils/cn';\r\nimport type { KanbanTask } from './types';\r\n\r\ninterface KanbanCardProps {\r\n task: KanbanTask;\r\n columnId: string;\r\n selectedTaskIds: string[];\r\n activeTimerTaskId?: string | null;\r\n selectable?: boolean;\r\n cardClassName?: string;\r\n onTaskClick?: (e: React.MouseEvent, task: KanbanTask) => void;\r\n onTaskSelectionChange?: (selectedIds: string[]) => void;\r\n onTaskRemove?: (taskId: string) => void;\r\n onTaskTimerToggle?: (taskId: string) => void;\r\n renderCard?: (task: KanbanTask) => React.ReactNode;\r\n}\r\n\r\nexport const KanbanCard = React.memo(({\r\n task,\r\n columnId,\r\n selectedTaskIds,\r\n activeTimerTaskId,\r\n selectable,\r\n cardClassName,\r\n onTaskClick,\r\n onTaskSelectionChange,\r\n onTaskRemove,\r\n onTaskTimerToggle,\r\n renderCard\r\n}: KanbanCardProps) => {\r\n if (renderCard) return <>{renderCard(task)}</>;\r\n\r\n const getPriorityColor = (priority?: string) => {\r\n switch (priority) {\r\n case 'urgent': return 'danger';\r\n case 'high': return 'warning';\r\n case 'medium': return 'info';\r\n case 'low': return 'success';\r\n default: return 'neutral';\r\n }\r\n };\r\n\r\n const isSelected = selectedTaskIds.includes(task.id);\r\n\r\n return (\r\n <Surface \r\n onClick={(e) => onTaskClick?.(e, task)}\r\n className={cn(\r\n \"p-6 border border-white/10 bg-white/[0.03] hover:bg-white/[0.06] transition-all duration-200 rounded-2xl group\",\r\n task.blockedBy && task.blockedBy.length > 0 && \"border-red-500/30 bg-red-500/[0.02]\",\r\n isSelected && \"ring-2 ring-cyan-500/50 bg-cyan-500/[0.02]\",\r\n cardClassName\r\n )}\r\n >\r\n <div className=\"flex flex-col gap-3\">\r\n <div className=\"flex items-start justify-between gap-2\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {selectable && (\r\n <Checkbox \r\n checked={isSelected}\r\n onChange={(e) => {\r\n const checked = e.target.checked;\r\n const newSelection = checked \r\n ? [...selectedTaskIds, task.id]\r\n : selectedTaskIds.filter(id => id !== task.id);\r\n onTaskSelectionChange?.(newSelection);\r\n }}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"mr-1\"\r\n />\r\n )}\r\n {task.blockedBy && task.blockedBy.length > 0 && (\r\n <Lock className=\"h-3.5 w-3.5 text-red-500 flex-shrink-0\" />\r\n )}\r\n <Text className={cn(\r\n \"font-medium text-sm leading-tight group-hover:text-cyan-400 transition-colors truncate\",\r\n task.blockedBy && task.blockedBy.length > 0 && \"text-red-400/80\"\r\n )}>\r\n {task.title}\r\n </Text>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n {onTaskRemove && (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onTaskRemove(task.id);\r\n }}\r\n className=\"p-1 rounded-md hover:bg-red-500/20 text-white/20 hover:text-red-400 transition-colors\"\r\n >\r\n <Trash2 className=\"h-3.5 w-3.5\" />\r\n </button>\r\n )}\r\n <GripVertical className=\"h-4 w-4 text-white/20 opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0\" />\r\n </div>\r\n </div>\r\n\r\n {task.description && (\r\n <Text className=\"text-xs text-white/50 line-clamp-2\">\r\n {task.description}\r\n </Text>\r\n )}\r\n\r\n {task.progress !== undefined && (\r\n <div className=\"space-y-1.5\">\r\n <div className=\"flex items-center justify-between text-[10px]\">\r\n <span className=\"text-white/30 uppercase font-bold tracking-wider\">Progress</span>\r\n <span className=\"text-white/50\">{task.progress}%</span>\r\n </div>\r\n <div className=\"h-1 w-full bg-white/[0.03] rounded-full overflow-hidden\">\r\n <div \r\n className=\"h-full bg-cyan-500 transition-all duration-500\" \r\n style={{ width: `${task.progress}%` }}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-1\">\r\n {task.priority && (\r\n <Badge variant={getPriorityColor(task.priority)} className=\"text-[10px] px-1.5 py-0 uppercase font-bold\">\r\n {task.priority}\r\n </Badge>\r\n )}\r\n {task.tags?.map(tag => (\r\n <Badge key={tag} variant=\"neutral\" className=\"text-[10px] px-1.5 py-0 bg-white/[0.03] border-white/5\">\r\n {tag}\r\n </Badge>\r\n ))}\r\n </div>\r\n\r\n <div className=\"flex items-center justify-between mt-2 pt-3 border-t border-white/5\">\r\n <div className=\"flex items-center gap-3 text-[10px] text-white/30\">\r\n {task.timeSpent !== undefined && (\r\n <div className={cn(\r\n \"flex items-center gap-1 px-1.5 py-0.5 rounded-md transition-colors\",\r\n activeTimerTaskId === task.id ? \"bg-cyan-500/20 text-cyan-400\" : \"bg-white/[0.03]\"\r\n )}>\r\n {activeTimerTaskId === task.id ? (\r\n <Pause \r\n className=\"h-2.5 w-2.5 cursor-pointer hover:scale-110 transition-transform\" \r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onTaskTimerToggle?.(task.id);\r\n }}\r\n />\r\n ) : (\r\n <Play \r\n className=\"h-2.5 w-2.5 cursor-pointer hover:scale-110 transition-transform\" \r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onTaskTimerToggle?.(task.id);\r\n }}\r\n />\r\n )}\r\n <span className=\"font-mono\">\r\n {Math.floor(task.timeSpent / 3600)}h {Math.floor((task.timeSpent % 3600) / 60)}m\r\n </span>\r\n </div>\r\n )}\r\n {task.comments !== undefined && (\r\n <div className=\"flex items-center gap-1\">\r\n <MessageSquare className=\"h-3 w-3\" />\r\n {task.comments}\r\n </div>\r\n )}\r\n {task.attachments !== undefined && (\r\n <div className=\"flex items-center gap-1\">\r\n <Paperclip className=\"h-3 w-3\" />\r\n {task.attachments}\r\n </div>\r\n )}\r\n {task.dueDate && (\r\n <div className=\"flex items-center gap-1\">\r\n <Clock className=\"h-3 w-3\" />\r\n {task.dueDate}\r\n </div>\r\n )}\r\n </div>\r\n \r\n {task.assignee && (\r\n <div className=\"flex -space-x-2\">\r\n <div className=\"h-6 w-6 rounded-full border-2 border-[#0a0a0a] bg-white/[0.06] flex items-center justify-center text-[10px] font-bold overflow-hidden\">\r\n {task.assignee.avatar ? (\r\n <img src={task.assignee.avatar} alt={task.assignee.name} className=\"h-full w-full object-cover\" />\r\n ) : (\r\n task.assignee.name[0]\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </Surface>\r\n );\r\n});\r\n\r\nKanbanCard.displayName = 'KanbanCard';\r\n","import React from 'react';\r\nimport { Plus, LayoutGrid } from 'lucide-react';\r\nimport { Button } from '../../button/Button';\r\nimport { Text } from '../../typography/Text';\r\nimport { cn } from '../../../utils/cn';\r\nimport type { KanbanTask, KanbanColumn, DropPosition } from './types';\r\nimport { KanbanCard } from './KanbanCard';\r\n\r\ninterface KanbanColumnContentProps {\r\n column: KanbanColumn;\r\n columnMap: Record<string, KanbanTask[]>;\r\n groupName: string;\r\n visibleCount: number;\r\n pageSize: number;\r\n columnHeight?: number | string;\r\n draggedTaskId: string | null;\r\n draggedColumnId: string | null;\r\n dragOverTaskId: string | null;\r\n dragOverColumnId: string | null;\r\n dropPosition: DropPosition | null;\r\n quickAddColumnId: string | null;\r\n quickAddValue: string;\r\n selectedTaskIds: string[];\r\n activeTimerTaskId?: string | null;\r\n handleDragStart: (e: React.DragEvent, id: string, type: 'task' | 'column') => void;\r\n handleDragEnd: () => void;\r\n handleDragOver: (e: React.DragEvent, columnId: string, taskId?: string) => void;\r\n handleDrop: (e: React.DragEvent, toColumnId: string, toTaskId?: string) => void;\r\n handleTouchStart: (e: React.TouchEvent, id: string, type: 'task' | 'column') => void;\r\n handleTouchMove: (e: React.TouchEvent) => void;\r\n handleTouchEnd: (e: React.TouchEvent) => void;\r\n handleKeyDown: (e: React.KeyboardEvent, taskId: string, columnId: string) => void;\r\n handleLoadMore: (columnId: string) => void;\r\n handleSetQuickAdd: (columnId: string, groupName?: string) => void;\r\n handleQuickAdd: (columnId: string, groupName?: string) => void;\r\n setQuickAddValue: (value: string) => void;\r\n setQuickAddColumnId: (id: string | null) => void;\r\n onTaskClick: (e: React.MouseEvent, task: KanbanTask) => void;\r\n onTaskFullAdd?: (columnId: string) => void;\r\n onTaskRemove?: (taskId: string) => void;\r\n onTaskTimerToggle?: (taskId: string) => void;\r\n onTaskSelectionChange?: (selectedIds: string[]) => void;\r\n renderCard?: (task: KanbanTask) => React.ReactNode;\r\n selectable?: boolean;\r\n cardClassName?: string;\r\n}\r\n\r\nexport const KanbanColumnContent = ({\r\n column,\r\n columnMap,\r\n groupName,\r\n visibleCount,\r\n pageSize,\r\n draggedTaskId,\r\n draggedColumnId,\r\n dragOverTaskId,\r\n dragOverColumnId,\r\n dropPosition,\r\n quickAddColumnId,\r\n quickAddValue,\r\n selectedTaskIds,\r\n activeTimerTaskId,\r\n handleDragStart,\r\n handleDragEnd,\r\n handleDragOver,\r\n handleDrop,\r\n handleTouchStart,\r\n handleTouchMove,\r\n handleTouchEnd,\r\n handleKeyDown,\r\n handleLoadMore,\r\n handleSetQuickAdd,\r\n handleQuickAdd,\r\n setQuickAddValue,\r\n setQuickAddColumnId,\r\n onTaskClick,\r\n onTaskFullAdd,\r\n onTaskRemove,\r\n onTaskTimerToggle,\r\n onTaskSelectionChange,\r\n renderCard,\r\n selectable,\r\n cardClassName\r\n}: KanbanColumnContentProps) => {\r\n const columnTasks = columnMap[column.id] || [];\r\n const visibleTasks = columnTasks.slice(0, visibleCount);\r\n const hasMore = columnTasks.length > visibleCount;\r\n\r\n return (\r\n <div className=\"flex flex-col gap-4 h-full min-h-0\">\r\n {/* Quick Add Input */}\r\n {quickAddColumnId === `${groupName}-${column.id}` ? (\r\n <div className=\"p-4 bg-white/[0.03] border border-cyan-500/30 rounded-2xl animate-in fade-in slide-in-from-top-2 duration-200\">\r\n <input\r\n autoFocus\r\n className=\"w-full bg-transparent border-none outline-none text-sm text-white placeholder:text-white/20\"\r\n placeholder=\"Task title...\"\r\n value={quickAddValue}\r\n onChange={(e) => setQuickAddValue(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') handleQuickAdd(column.id, groupName);\r\n if (e.key === 'Escape') setQuickAddColumnId(null);\r\n }}\r\n onBlur={() => {\r\n if (!quickAddValue.trim()) setQuickAddColumnId(null);\r\n }}\r\n />\r\n <div className=\"flex items-center justify-between mt-3\">\r\n <Text className=\"text-[10px] text-white/30 uppercase font-bold\">Press Enter to save</Text>\r\n <div className=\"flex gap-1\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n className=\"h-7 px-2 text-[10px] hover:bg-white/[0.06]\"\r\n onClick={() => setQuickAddColumnId(null)}\r\n >\r\n Cancel\r\n </Button>\r\n <Button \r\n variant=\"primary\" \r\n size=\"sm\" \r\n className=\"h-7 px-3 text-[10px] bg-cyan-500 hover:bg-cyan-400 text-black font-bold\"\r\n onClick={() => handleQuickAdd(column.id, groupName)}\r\n >\r\n Add Task\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n ) : (\r\n <button \r\n onClick={() => handleSetQuickAdd(column.id, groupName)}\r\n className=\"group/add flex items-center justify-center gap-2 p-4 border border-dashed border-white/10 hover:border-cyan-500/30 hover:bg-cyan-500/[0.02] rounded-2xl transition-all duration-200\"\r\n >\r\n <Plus className=\"h-4 w-4 text-white/20 group-hover/add:text-cyan-400 transition-colors\" />\r\n <Text className=\"text-xs font-bold text-white/20 group-hover/add:text-cyan-400 uppercase tracking-widest transition-colors\">\r\n Add New Task\r\n </Text>\r\n </button>\r\n )}\r\n\r\n {/* Tasks List */}\r\n <div \r\n role=\"list\"\r\n aria-label={`Tasks in ${column.title}`}\r\n className=\"flex-1 overflow-y-auto pr-2 custom-scrollbar flex flex-col gap-4 min-h-0 pb-20\"\r\n >\r\n {visibleTasks.map((task) => (\r\n <React.Fragment key={task.id}>\r\n {/* Task Ghost Placeholder TOP */}\r\n {draggedTaskId && dragOverTaskId === task.id && dropPosition === 'top' && draggedTaskId !== task.id && (\r\n <div className=\"h-1 bg-cyan-500/50 rounded-full animate-pulse\" />\r\n )}\r\n\r\n <div\r\n draggable\r\n role=\"listitem\"\r\n aria-label={`Task: ${task.title}`}\r\n onDragStart={(e) => handleDragStart(e, task.id, 'task')}\r\n onDragEnd={handleDragEnd}\r\n onDragOver={(e) => handleDragOver(e, column.id, task.id)}\r\n onDrop={(e) => handleDrop(e, column.id, task.id)}\r\n onTouchStart={(e) => handleTouchStart(e, task.id, 'task')}\r\n onTouchMove={handleTouchMove}\r\n onTouchEnd={handleTouchEnd}\r\n onKeyDown={(e) => handleKeyDown(e, task.id, column.id)}\r\n tabIndex={0}\r\n data-task-id={task.id}\r\n className={cn(\r\n \"outline-none transition-all duration-200\",\r\n draggedTaskId === task.id ? \"opacity-20 scale-95\" : \"opacity-100 scale-100\",\r\n dragOverTaskId === task.id && draggedTaskId ? \"ring-2 ring-cyan-500/30 rounded-2xl\" : \"\"\r\n )}\r\n >\r\n <KanbanCard \r\n task={task}\r\n columnId={column.id}\r\n selectedTaskIds={selectedTaskIds}\r\n activeTimerTaskId={activeTimerTaskId}\r\n selectable={selectable}\r\n cardClassName={cardClassName}\r\n onTaskClick={onTaskClick}\r\n onTaskSelectionChange={onTaskSelectionChange}\r\n onTaskRemove={onTaskRemove}\r\n onTaskTimerToggle={onTaskTimerToggle}\r\n renderCard={renderCard}\r\n />\r\n </div>\r\n\r\n {/* Task Ghost Placeholder BOTTOM */}\r\n {draggedTaskId && dragOverTaskId === task.id && dropPosition === 'bottom' && draggedTaskId !== task.id && (\r\n <div className=\"h-1 bg-cyan-500/50 rounded-full animate-pulse\" />\r\n )}\r\n </React.Fragment>\r\n ))}\r\n\r\n {/* Load More Trigger */}\r\n {hasMore && (\r\n <button\r\n onClick={() => handleLoadMore(column.id)}\r\n className=\"flex items-center justify-center gap-2 p-4 text-white/30 hover:text-cyan-400 transition-colors\"\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n <span className=\"text-xs font-bold uppercase tracking-widest\">\r\n Load {columnTasks.length - visibleCount} more tasks\r\n </span>\r\n </button>\r\n )}\r\n\r\n {/* Empty State */}\r\n {columnTasks.length === 0 && !draggedTaskId && (\r\n <div className=\"flex flex-col items-center justify-center py-12 px-4 border border-dashed border-white/5 rounded-[2rem] opacity-20\">\r\n <LayoutGrid className=\"h-8 w-8 mb-3\" />\r\n <Text className=\"text-xs font-medium\">No tasks yet</Text>\r\n </div>\r\n )}\r\n\r\n {/* Drop Zone for empty column */}\r\n {columnTasks.length === 0 && draggedTaskId && (\r\n <div \r\n className=\"flex-1 min-h-[200px] border-2 border-dashed border-cyan-500/20 rounded-[2rem] bg-cyan-500/[0.02] flex items-center justify-center\"\r\n onDragOver={(e) => handleDragOver(e, column.id)}\r\n onDrop={(e) => handleDrop(e, column.id)}\r\n >\r\n <Text className=\"text-xs font-bold text-cyan-500/40 uppercase tracking-widest\">Drop here</Text>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport { \r\n Plus, \r\n MoreHorizontal, \r\n Settings, \r\n SortAsc, \r\n ArrowUpDown, \r\n CalendarDays, \r\n Archive, \r\n Trash2,\r\n AlertTriangle\r\n} from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Button } from '../button/Button';\r\nimport { Badge } from '../../primitives/Badge';\r\nimport { Heading } from '../typography/Heading';\r\nimport { Text } from '../typography/Text';\r\nimport { \r\n DropdownMenu, \r\n DropdownMenuTrigger, \r\n DropdownMenuContent, \r\n DropdownMenuItem \r\n} from '../overlay/DropdownMenu';\r\n\r\nimport type { KanbanProps, KanbanTask, KanbanColumn } from './kanban/types';\r\nexport type { KanbanProps, KanbanTask, KanbanColumn };\r\nimport { useKanbanTasks } from './kanban/useKanbanTasks';\r\nimport { useKanbanDragAndDrop } from './kanban/useKanbanDragAndDrop';\r\nimport { useKanbanBoardScroll } from './kanban/useKanbanBoardScroll';\r\nimport { KanbanColumnContent } from './kanban/KanbanColumnContent';\r\n\r\nexport function Kanban({\r\n columns,\r\n tasks,\r\n onTaskMove,\r\n onColumnMove,\r\n onTaskClick,\r\n onTaskAdd,\r\n onTaskFullAdd,\r\n onTaskRemove,\r\n onColumnAction,\r\n onTaskDrop,\r\n onTaskDragStart,\r\n onTaskDragEnd,\r\n onTaskSelectionChange,\r\n onTaskTimerToggle,\r\n renderCard,\r\n className,\r\n columnClassName,\r\n cardClassName,\r\n groupBy,\r\n accentColor = 'cyan',\r\n showTaskCount = true,\r\n showDividers = true,\r\n columnHeight = 'calc(100vh - 200px)',\r\n pageSize = 10,\r\n selectable = false,\r\n selectedTaskIds = [],\r\n activeTimerTaskId = null,\r\n}: KanbanProps) {\r\n const [quickAddColumnId, setQuickAddColumnId] = useState<string | null>(null);\r\n const [quickAddValue, setQuickAddValue] = useState('');\r\n\r\n const {\r\n tasksByGroupAndColumn,\r\n sortConfig,\r\n setSortConfig,\r\n visibleCounts,\r\n handleLoadMore\r\n } = useKanbanTasks({ tasks, columns, groupBy, pageSize });\r\n\r\n const {\r\n draggedTaskId,\r\n draggedColumnId,\r\n dragOverColumnId,\r\n dragOverTaskId,\r\n dropPosition,\r\n handleDragStart,\r\n handleDragEnd,\r\n handleDragOver,\r\n handleDrop,\r\n handleTouchStart,\r\n handleTouchMove,\r\n handleTouchEnd,\r\n setDraggedTaskId\r\n } = useKanbanDragAndDrop({\r\n tasks,\r\n columns,\r\n selectedTaskIds,\r\n onTaskMove,\r\n onColumnMove,\r\n onTaskDrop,\r\n onTaskDragStart,\r\n onTaskDragEnd\r\n });\r\n\r\n const {\r\n boardRef,\r\n isDraggingBoard,\r\n handleBoardMouseDown,\r\n handleBoardMouseMove,\r\n handleBoardMouseUp\r\n } = useKanbanBoardScroll();\r\n\r\n const handleSetQuickAdd = (columnId: string, groupName: string = 'default') => {\r\n setQuickAddColumnId(`${groupName}-${columnId}`);\r\n };\r\n\r\n const handleQuickAdd = (columnId: string, groupName: string = 'default') => {\r\n if (quickAddValue.trim() && onTaskAdd) {\r\n onTaskAdd(columnId, quickAddValue.trim());\r\n setQuickAddValue('');\r\n setQuickAddColumnId(null);\r\n }\r\n };\r\n\r\n const handleTaskClickInternal = useCallback((e: React.MouseEvent, task: KanbanTask) => {\r\n if (selectable && (e.ctrlKey || e.metaKey)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const isSelected = selectedTaskIds.includes(task.id);\r\n const newSelection = isSelected\r\n ? selectedTaskIds.filter(id => id !== task.id)\r\n : [...selectedTaskIds, task.id];\r\n onTaskSelectionChange?.(newSelection);\r\n } else {\r\n onTaskClick?.(task);\r\n }\r\n }, [selectable, selectedTaskIds, onTaskSelectionChange, onTaskClick]);\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent, taskId: string, columnId: string) => {\r\n if (e.key === ' ' || e.key === 'Enter') {\r\n e.preventDefault();\r\n if (draggedTaskId === taskId) {\r\n if (onTaskMove) {\r\n onTaskMove(draggedTaskId, columnId);\r\n }\r\n handleDragEnd();\r\n } else {\r\n setDraggedTaskId(taskId);\r\n }\r\n }\r\n\r\n if (draggedTaskId === taskId) {\r\n const colIndex = columns.findIndex(c => c.id === columnId);\r\n \r\n let taskIndex = -1;\r\n let currentGroupName = 'default';\r\n \r\n for (const [groupName, columnMap] of Object.entries(tasksByGroupAndColumn)) {\r\n const groupTasks = columnMap[columnId] || [];\r\n const idx = groupTasks.findIndex(t => t.id === taskId);\r\n if (idx !== -1) {\r\n taskIndex = idx;\r\n currentGroupName = groupName;\r\n break;\r\n }\r\n }\r\n\r\n const columnTasks = tasksByGroupAndColumn[currentGroupName]?.[columnId] || [];\r\n\r\n if (e.key === 'ArrowRight' && colIndex < columns.length - 1) {\r\n onTaskMove?.(taskId, columns[colIndex + 1]!.id);\r\n } else if (e.key === 'ArrowLeft' && colIndex > 0) {\r\n onTaskMove?.(taskId, columns[colIndex - 1]!.id);\r\n } else if (e.key === 'ArrowDown' && taskIndex < columnTasks.length - 1) {\r\n const nextTask = columnTasks[taskIndex + 1];\r\n if (nextTask) onTaskMove?.(taskId, columnId, nextTask.id, 'bottom');\r\n } else if (e.key === 'ArrowUp' && taskIndex > 0) {\r\n const prevTask = columnTasks[taskIndex - 1];\r\n if (prevTask) onTaskMove?.(taskId, columnId, prevTask.id, 'top');\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div \r\n ref={boardRef}\r\n role=\"list\"\r\n aria-label=\"Kanban Board\"\r\n onMouseDown={handleBoardMouseDown}\r\n onMouseMove={handleBoardMouseMove}\r\n onMouseUp={handleBoardMouseUp}\r\n onMouseLeave={handleBoardMouseUp}\r\n className={cn(\r\n \"flex flex-col overflow-x-auto overflow-y-hidden pb-4 select-none board-scroll-container snap-x snap-mandatory scroll-smooth\",\r\n isDraggingBoard ? \"cursor-grabbing\" : \"cursor-grab\",\r\n className\r\n )}\r\n style={{ height: typeof columnHeight === 'number' ? `${columnHeight}px` : columnHeight }}\r\n >\r\n {/* Column Headers (Sticky) */}\r\n <div className=\"flex sticky top-0 z-20 bg-[#0a0a0a]/80 backdrop-blur-md border-b border-white/10 w-fit\">\r\n {columns.map((column, idx) => {\r\n const columnTasks = tasks.filter(t => t.columnId === column.id);\r\n const isOverLimit = column.limit && columnTasks.length > column.limit;\r\n\r\n return (\r\n <div \r\n key={column.id}\r\n role=\"listitem\"\r\n aria-label={`Column: ${column.title}`}\r\n className={cn(\r\n \"flex-shrink-0 w-[480px] flex items-center justify-between px-8 py-6 group/header snap-start\",\r\n showDividers && idx > 0 && \"border-l border-white/10\"\r\n )}\r\n onDragOver={(e) => handleDragOver(e, column.id)}\r\n onDrop={(e) => handleDrop(e, column.id)}\r\n >\r\n <div \r\n draggable\r\n onDragStart={(e) => handleDragStart(e, column.id, 'column')}\r\n onDragEnd={handleDragEnd}\r\n onTouchStart={(e) => handleTouchStart(e, column.id, 'column')}\r\n onTouchMove={handleTouchMove}\r\n onTouchEnd={handleTouchEnd}\r\n className=\"flex items-center gap-3 cursor-grab active:cursor-grabbing flex-1 min-w-0\"\r\n >\r\n <div \r\n className=\"w-2.5 h-2.5 rounded-full shadow-[0_0_10px_rgba(0,0,0,0.5)]\" \r\n style={{ backgroundColor: column.color || `var(--${accentColor}-500)` }} \r\n />\r\n <Heading as=\"h4\" className=\"text-sm font-bold uppercase tracking-[0.1em] text-white/90 truncate\">\r\n {column.title}\r\n </Heading>\r\n {showTaskCount && (\r\n <Badge \r\n variant={isOverLimit ? \"danger\" : \"neutral\"} \r\n className={cn(\r\n \"ml-1 text-[10px] px-2 py-0.5 rounded-full font-bold\",\r\n !isOverLimit && \"bg-white/[0.06] border-white/5 text-white/60\"\r\n )}\r\n >\r\n {columnTasks.length}{column.limit ? ` / ${column.limit}` : ''}\r\n </Badge>\r\n )}\r\n {isOverLimit && (\r\n <AlertTriangle className=\"h-3.5 w-3.5 text-amber-500 animate-pulse\" />\r\n )}\r\n </div>\r\n <div className=\"flex items-center gap-1.5 opacity-0 group-hover/header:opacity-100 transition-all duration-200\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n className=\"h-8 w-8 p-0 hover:bg-white/[0.06] rounded-full text-white/40 hover:text-white\"\r\n onClick={() => handleSetQuickAdd(column.id)}\r\n >\r\n <Plus className=\"h-4.5 w-4.5\" />\r\n </Button>\r\n \r\n <DropdownMenu>\r\n <DropdownMenuTrigger className=\"h-8 w-8 p-0 hover:bg-white/[0.06] rounded-full flex items-center justify-center text-white/40 hover:text-white transition-colors\">\r\n <MoreHorizontal className=\"h-4.5 w-4.5\" />\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-56 bg-[#1a1a1a]/95 backdrop-blur-xl border border-white/10 p-1.5 shadow-2xl z-50 rounded-2xl\">\r\n <div className=\"px-2 py-1.5 mb-1\">\r\n <Text className=\"text-[10px] font-bold uppercase tracking-widest text-white/30\">Column Actions</Text>\r\n </div>\r\n \r\n <DropdownMenuItem \r\n onClick={() => onColumnAction?.(column.id, 'settings')}\r\n className=\"gap-2.5 text-xs text-white/70 hover:text-white hover:bg-white/[0.03] rounded-2xl py-2\"\r\n >\r\n <Settings className=\"h-4 w-4\" /> Column Settings\r\n </DropdownMenuItem>\r\n\r\n <div className=\"h-px bg-white/[0.03] my-1.5\" />\r\n \r\n <div className=\"px-2 py-1.5 mb-1\">\r\n <Text className=\"text-[10px] font-bold uppercase tracking-widest text-white/30\">Sort Tasks</Text>\r\n </div>\r\n\r\n <DropdownMenuItem \r\n onClick={() => setSortConfig({ field: 'title', direction: sortConfig?.field === 'title' && sortConfig.direction === 'asc' ? 'desc' : 'asc' })}\r\n className={cn(\r\n \"gap-2.5 text-xs hover:bg-white/[0.03] rounded-2xl py-2\",\r\n sortConfig?.field === 'title' ? \"text-cyan-400 bg-cyan-500/5\" : \"text-white/70 hover:text-white\"\r\n )}\r\n >\r\n <SortAsc className=\"h-4 w-4\" /> Sort by Title\r\n {sortConfig?.field === 'title' && (\r\n <span className=\"ml-auto text-[10px] uppercase font-bold opacity-50\">{sortConfig.direction}</span>\r\n )}\r\n </DropdownMenuItem>\r\n\r\n <DropdownMenuItem \r\n onClick={() => setSortConfig({ field: 'priority', direction: sortConfig?.field === 'priority' && sortConfig.direction === 'desc' ? 'asc' : 'desc' })}\r\n className={cn(\r\n \"gap-2.5 text-xs hover:bg-white/[0.03] rounded-2xl py-2\",\r\n sortConfig?.field === 'priority' ? \"text-cyan-400 bg-cyan-500/5\" : \"text-white/70 hover:text-white\"\r\n )}\r\n >\r\n <ArrowUpDown className=\"h-4 w-4\" /> Sort by Priority\r\n {sortConfig?.field === 'priority' && (\r\n <span className=\"ml-auto text-[10px] uppercase font-bold opacity-50\">{sortConfig.direction}</span>\r\n )}\r\n </DropdownMenuItem>\r\n\r\n <DropdownMenuItem \r\n onClick={() => setSortConfig({ field: 'dueDate', direction: sortConfig?.field === 'dueDate' && sortConfig.direction === 'asc' ? 'desc' : 'asc' })}\r\n className={cn(\r\n \"gap-2.5 text-xs hover:bg-white/[0.03] rounded-2xl py-2\",\r\n sortConfig?.field === 'dueDate' ? \"text-cyan-400 bg-cyan-500/5\" : \"text-white/70 hover:text-white\"\r\n )}\r\n >\r\n <CalendarDays className=\"h-4 w-4\" /> Sort by Date\r\n {sortConfig?.field === 'dueDate' && (\r\n <span className=\"ml-auto text-[10px] uppercase font-bold opacity-50\">{sortConfig.direction}</span>\r\n )}\r\n </DropdownMenuItem>\r\n\r\n <div className=\"h-px bg-white/[0.03] my-1.5\" />\r\n\r\n <DropdownMenuItem className=\"gap-2.5 text-xs text-white/70 hover:text-white hover:bg-white/[0.03] rounded-2xl py-2\">\r\n <Archive className=\"h-4 w-4\" /> Archive All Tasks\r\n </DropdownMenuItem>\r\n \r\n <DropdownMenuItem className=\"gap-2.5 text-xs text-red-400 hover:text-red-300 hover:bg-red-500/10 rounded-2xl py-2\">\r\n <Trash2 className=\"h-4 w-4\" /> Delete Column\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Swimlanes / Groups */}\r\n <div className=\"flex-1 min-h-0 overflow-y-auto w-fit\">\r\n {Object.entries(tasksByGroupAndColumn).map(([groupName, columnMap]) => (\r\n <div key={groupName} className=\"flex flex-col h-full min-h-0\">\r\n {groupBy && (\r\n <div className=\"sticky top-0 z-10 flex items-center gap-3 px-6 py-2 bg-[#0a0a0a]/60 backdrop-blur-sm border-b border-white/5\">\r\n <Badge variant=\"neutral\" className=\"bg-white/[0.06] border-white/10 text-[10px] uppercase font-bold tracking-widest px-3\">\r\n {groupName}\r\n </Badge>\r\n <div className=\"h-px flex-1 bg-white/[0.03]\" />\r\n </div>\r\n )}\r\n \r\n <div className=\"flex min-w-max h-full min-h-0\">\r\n {columns.map((column, idx) => (\r\n <React.Fragment key={column.id}>\r\n {/* Column Ghost Placeholder LEFT */}\r\n {draggedColumnId && dragOverColumnId === column.id && dropPosition === 'left' && draggedColumnId !== column.id && (\r\n <div className=\"flex-shrink-0 w-1 bg-cyan-500/50 mx-2 rounded-full animate-pulse\" />\r\n )}\r\n\r\n <div \r\n key={column.id}\r\n data-column-id={column.id}\r\n className={cn(\r\n \"flex-shrink-0 w-[480px] flex flex-col gap-6 transition-all duration-300 p-4 rounded-[2rem] snap-start h-full min-h-0 overflow-hidden\",\r\n showDividers && idx > 0 && \"border-l border-white/10\",\r\n draggedColumnId === column.id ? \"opacity-20\" : \"opacity-100\",\r\n dragOverColumnId === column.id && draggedColumnId ? \"bg-cyan-500/5\" : \"\",\r\n column.limit && (columnMap[column.id] || []).length > column.limit && \"bg-red-500/[0.02] ring-1 ring-inset ring-red-500/20\",\r\n columnClassName\r\n )}\r\n onDragOver={(e) => handleDragOver(e, column.id)}\r\n onDrop={(e) => handleDrop(e, column.id)}\r\n >\r\n <KanbanColumnContent \r\n column={column}\r\n columnMap={columnMap}\r\n groupName={groupName}\r\n visibleCount={visibleCounts[column.id] || pageSize}\r\n pageSize={pageSize}\r\n draggedTaskId={draggedTaskId}\r\n draggedColumnId={draggedColumnId}\r\n dragOverTaskId={dragOverTaskId}\r\n dragOverColumnId={dragOverColumnId}\r\n dropPosition={dropPosition}\r\n quickAddColumnId={quickAddColumnId}\r\n quickAddValue={quickAddValue}\r\n selectedTaskIds={selectedTaskIds}\r\n activeTimerTaskId={activeTimerTaskId}\r\n handleDragStart={handleDragStart}\r\n handleDragEnd={handleDragEnd}\r\n handleDragOver={handleDragOver}\r\n handleDrop={handleDrop}\r\n handleTouchStart={handleTouchStart}\r\n handleTouchMove={handleTouchMove}\r\n handleTouchEnd={handleTouchEnd}\r\n handleKeyDown={handleKeyDown}\r\n handleLoadMore={handleLoadMore}\r\n handleSetQuickAdd={handleSetQuickAdd}\r\n handleQuickAdd={handleQuickAdd}\r\n setQuickAddValue={setQuickAddValue}\r\n setQuickAddColumnId={setQuickAddColumnId}\r\n onTaskClick={handleTaskClickInternal}\r\n onTaskFullAdd={onTaskFullAdd}\r\n onTaskRemove={onTaskRemove}\r\n onTaskTimerToggle={onTaskTimerToggle}\r\n onTaskSelectionChange={onTaskSelectionChange}\r\n renderCard={renderCard}\r\n selectable={selectable}\r\n cardClassName={cardClassName}\r\n />\r\n </div>\r\n\r\n {/* Column Ghost Placeholder RIGHT */}\r\n {draggedColumnId && dragOverColumnId === column.id && dropPosition === 'right' && draggedColumnId !== column.id && (\r\n <div className=\"flex-shrink-0 w-1 bg-cyan-500/50 mx-2 rounded-full animate-pulse\" />\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Upload, X, File as FileIcon } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst dropzoneVariants = cva(\r\n \"relative flex flex-col items-center justify-center rounded-2xl border-2 border-dashed transition-all duration-200 text-center\",\r\n {\r\n variants: {\r\n isDragActive: {\r\n true: \"border-blue-500 bg-blue-50 dark:bg-blue-500/10\",\r\n false: \"border-gray-200 bg-gray-50 hover:bg-gray-100 dark:border-white/10 dark:bg-white/[0.02] dark:hover:bg-white/[0.05]\",\r\n },\r\n error: {\r\n true: \"border-rose-500 bg-rose-50 dark:bg-rose-500/10\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n isDragActive: false,\r\n error: false,\r\n },\r\n }\r\n);\r\n\r\nexport interface FileDropzoneProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onDrop'> {\r\n onDrop?: (files: File[]) => void;\r\n accept?: Record<string, string[]>; // e.g. { 'image/*': ['.png', '.jpg'] }\r\n maxFiles?: number;\r\n maxSize?: number; // in bytes\r\n label?: string;\r\n description?: string;\r\n}\r\n\r\nexport const FileDropzone = React.forwardRef<HTMLDivElement, FileDropzoneProps>(\r\n ({ className, onDrop, maxFiles = 1, maxSize, label = \"Upload files\", description = \"Drag & drop or click to upload\", ...props }, ref) => {\r\n const [isDragActive, setIsDragActive] = useState(false);\r\n const [files, setFiles] = useState<File[]>([]);\r\n const [error, setError] = useState<string | null>(null);\r\n const inputRef = React.useRef<HTMLInputElement>(null);\r\n\r\n const handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setIsDragActive(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setIsDragActive(false);\r\n };\r\n\r\n const validateFiles = (fileList: File[]) => {\r\n if (maxFiles && fileList.length > maxFiles) {\r\n setError(`Max ${maxFiles} files allowed`);\r\n return false;\r\n }\r\n if (maxSize) {\r\n const oversized = fileList.some(f => f.size > maxSize);\r\n if (oversized) {\r\n setError(`File too large (max ${maxSize / 1024 / 1024}MB)`);\r\n return false;\r\n }\r\n }\r\n setError(null);\r\n return true;\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setIsDragActive(false);\r\n \r\n const droppedFiles = Array.from(e.dataTransfer.files);\r\n if (validateFiles(droppedFiles)) {\r\n setFiles(droppedFiles);\r\n onDrop?.(droppedFiles);\r\n }\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files) {\r\n const selectedFiles = Array.from(e.target.files);\r\n if (validateFiles(selectedFiles)) {\r\n setFiles(selectedFiles);\r\n onDrop?.(selectedFiles);\r\n }\r\n }\r\n };\r\n\r\n const removeFile = (index: number, e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n const newFiles = files.filter((_, i) => i !== index);\r\n setFiles(newFiles);\r\n onDrop?.(newFiles);\r\n };\r\n\r\n return (\r\n <div className=\"w-full space-y-4\">\r\n <div\r\n ref={ref}\r\n className={cn(dropzoneVariants({ isDragActive, error: !!error, className }), \"p-8 cursor-pointer\")}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n onClick={() => inputRef.current?.click()}\r\n {...props}\r\n >\r\n <input \r\n ref={inputRef}\r\n type=\"file\" \r\n className=\"hidden\" \r\n multiple={maxFiles > 1} \r\n onChange={handleChange} \r\n />\r\n \r\n <div className=\"mb-4 rounded-full bg-gray-100 p-3 dark:bg-white/[0.06]\">\r\n <Upload className=\"h-6 w-6 text-gray-500 dark:text-white/70\" />\r\n </div>\r\n <div className=\"text-sm font-medium text-gray-900 dark:text-white\">\r\n {label}\r\n </div>\r\n <div className=\"mt-1 text-xs text-gray-500 dark:text-white/50\">\r\n {description}\r\n </div>\r\n {error && (\r\n <div className=\"mt-2 text-xs font-medium text-rose-500\">\r\n {error}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {files.length > 0 && (\r\n <div className=\"grid gap-2\">\r\n {files.map((file, i) => (\r\n <div key={i} className=\"flex items-center justify-between rounded-xl border border-gray-200 bg-white p-3 dark:border-white/10 dark:bg-white/[0.03]\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-gray-100 dark:bg-white/[0.06]\">\r\n <FileIcon className=\"h-4 w-4 text-gray-500 dark:text-white/70\" />\r\n </div>\r\n <div className=\"flex flex-col\">\r\n <span className=\"text-sm font-medium text-gray-900 dark:text-white truncate max-w-[200px]\">{file.name}</span>\r\n <span className=\"text-xs text-gray-500 dark:text-white/50\">{(file.size / 1024).toFixed(1)} KB</span>\r\n </div>\r\n </div>\r\n <button \r\n onClick={(e) => removeFile(i, e)}\r\n className=\"rounded-full p-1 hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-500 dark:text-white/50\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\nFileDropzone.displayName = 'FileDropzone';\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Modal, ModalHeader, ModalTitle, ModalFooter } from '../overlay/Modal';\r\nimport { Button } from '../button/Button';\r\nimport { TextInput } from '../form/TextInput';\r\nimport { Textarea } from '../form/Textarea';\r\nimport { Select } from '../form/Select';\r\nimport { Label } from '../form/Label';\r\nimport { FileDropzone } from '../form/FileDropzone';\r\nimport type { KanbanTask } from './Kanban';\r\nimport { X, Paperclip, Tag, AlertCircle } from 'lucide-react';\r\n\r\nexport interface KanbanTaskModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onSave: (task: Partial<KanbanTask>) => void;\r\n task?: KanbanTask;\r\n columnId?: string;\r\n}\r\n\r\nexport function KanbanTaskModal({ isOpen, onClose, onSave, task, columnId }: KanbanTaskModalProps) {\r\n const [title, setTitle] = useState('');\r\n const [description, setDescription] = useState('');\r\n const [priority, setPriority] = useState<'low' | 'medium' | 'high' | 'urgent'>('medium');\r\n const [tags, setTags] = useState<string[]>([]);\r\n const [tagInput, setTagInput] = useState('');\r\n\r\n useEffect(() => {\r\n if (task) {\r\n setTitle(task.title || '');\r\n setDescription(task.description || '');\r\n setPriority(task.priority || 'medium');\r\n setTags(task.tags || []);\r\n } else {\r\n setTitle('');\r\n setDescription('');\r\n setPriority('medium');\r\n setTags([]);\r\n }\r\n }, [task, isOpen]);\r\n\r\n const handleSave = () => {\r\n if (!title.trim()) return;\r\n onSave({\r\n ...task,\r\n title,\r\n description,\r\n priority,\r\n tags,\r\n columnId: task?.columnId || columnId\r\n });\r\n onClose();\r\n };\r\n\r\n const addTag = () => {\r\n if (tagInput.trim() && !tags.includes(tagInput.trim())) {\r\n setTags([...tags, tagInput.trim()]);\r\n setTagInput('');\r\n }\r\n };\r\n\r\n const removeTag = (tagToRemove: string) => {\r\n setTags(tags.filter(t => t !== tagToRemove));\r\n };\r\n\r\n return (\r\n <Modal isOpen={isOpen} onClose={onClose}>\r\n <ModalHeader>\r\n <ModalTitle>{task ? 'Edit Task' : 'Create New Task'}</ModalTitle>\r\n </ModalHeader>\r\n \r\n <div className=\"space-y-6 py-4\">\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"task-title\">Title</Label>\r\n <TextInput \r\n id=\"task-title\"\r\n placeholder=\"What needs to be done?\" \r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n autoFocus\r\n />\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"task-desc\">Description</Label>\r\n <Textarea \r\n id=\"task-desc\"\r\n placeholder=\"Add more details...\" \r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n rows={4}\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div className=\"space-y-2\">\r\n <Label>Priority</Label>\r\n <Select \r\n options={[\r\n { label: 'Low', value: 'low' },\r\n { label: 'Medium', value: 'medium' },\r\n { label: 'High', value: 'high' },\r\n { label: 'Urgent', value: 'urgent' },\r\n ]}\r\n value={priority}\r\n onChange={(val) => setPriority(val as any)}\r\n />\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label>Tags</Label>\r\n <div className=\"flex gap-2\">\r\n <TextInput \r\n placeholder=\"Add tag...\" \r\n value={tagInput}\r\n onChange={(e) => setTagInput(e.target.value)}\r\n onKeyDown={(e) => e.key === 'Enter' && (e.preventDefault(), addTag())}\r\n />\r\n <Button variant=\"outline\" onClick={addTag} type=\"button\">Add</Button>\r\n </div>\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {tags.map(tag => (\r\n <span key={tag} className=\"flex items-center gap-1 px-2 py-1 rounded-2xl bg-white/[0.03] border border-white/10 text-xs text-white/70\">\r\n {tag}\r\n <X size={12} className=\"cursor-pointer hover:text-white\" onClick={() => removeTag(tag)} />\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label>Attachments</Label>\r\n <FileDropzone \r\n onDrop={(files: File[]) => console.log('Files selected:', files)}\r\n className=\"border-dashed border-white/10 bg-white/[0.02]\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <ModalFooter>\r\n <Button variant=\"ghost\" onClick={onClose}>Cancel</Button>\r\n <Button variant=\"primary\" onClick={handleSave} disabled={!title.trim()}>\r\n {task ? 'Save Changes' : 'Create Task'}\r\n </Button>\r\n </ModalFooter>\r\n </Modal>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Search, Filter, X, ChevronDown, Check } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Button } from '../button/Button';\r\nimport { Badge } from '../../primitives/Badge';\r\nimport { Popover, PopoverTrigger, PopoverContent } from '../overlay/Popover';\r\nimport { Command, CommandInput, CommandList, CommandItem, CommandGroup } from '../overlay/Command';\r\n\r\nexport interface FilterOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface KanbanFilterBarProps {\r\n onSearchChange?: (query: string) => void;\r\n onFilterChange?: (filters: Record<string, string[]>) => void;\r\n priorityOptions?: FilterOption[];\r\n tagOptions?: FilterOption[];\r\n assigneeOptions?: FilterOption[];\r\n className?: string;\r\n}\r\n\r\nexport function KanbanFilterBar({\r\n onSearchChange,\r\n onFilterChange,\r\n priorityOptions = [],\r\n tagOptions = [],\r\n assigneeOptions = [],\r\n className\r\n}: KanbanFilterBarProps) {\r\n const [search, setSearch] = useState('');\r\n const [activeFilters, setActiveFilters] = useState<Record<string, string[]>>({});\r\n\r\n const toggleFilter = (category: string, value: string) => {\r\n const current = activeFilters[category] || [];\r\n const next = current.includes(value)\r\n ? current.filter(v => v !== value)\r\n : [...current, value];\r\n \r\n const newFilters = { ...activeFilters, [category]: next };\r\n if (next.length === 0) delete newFilters[category];\r\n \r\n setActiveFilters(newFilters);\r\n onFilterChange?.(newFilters);\r\n };\r\n\r\n const clearFilters = () => {\r\n setActiveFilters({});\r\n onFilterChange?.({});\r\n };\r\n\r\n const activeCount = Object.values(activeFilters).flat().length;\r\n\r\n return (\r\n <Surface className={cn(\"p-2 flex flex-wrap items-center gap-3\", className)}>\r\n <div className=\"relative flex-1 min-w-[200px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-white/20\" />\r\n <input \r\n type=\"text\"\r\n placeholder=\"Search tasks...\"\r\n className=\"w-full pl-10 pr-4 py-2 text-sm rounded-2xl border border-white/10 bg-white/[0.03] focus:outline-none focus:ring-2 focus:ring-cyan-500/50 transition-all placeholder:text-white/20\"\r\n value={search}\r\n onChange={(e) => {\r\n setSearch(e.target.value);\r\n onSearchChange?.(e.target.value);\r\n }}\r\n />\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n {/* Priority Filter */}\r\n <FilterPopover \r\n label=\"Priority\" \r\n options={priorityOptions} \r\n selected={activeFilters['priority'] || []}\r\n onSelect={(val) => toggleFilter('priority', val)}\r\n />\r\n\r\n {/* Tags Filter */}\r\n <FilterPopover \r\n label=\"Tags\" \r\n options={tagOptions} \r\n selected={activeFilters['tags'] || []}\r\n onSelect={(val) => toggleFilter('tags', val)}\r\n />\r\n\r\n {activeCount > 0 && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n onClick={clearFilters}\r\n className=\"h-9 px-3 text-xs text-white/40 hover:text-white gap-2\"\r\n >\r\n <X className=\"h-3.5 w-3.5\" /> Clear Filters\r\n <Badge variant=\"neutral\" className=\"bg-white/[0.06] border-white/10 ml-1\">\r\n {activeCount}\r\n </Badge>\r\n </Button>\r\n )}\r\n </div>\r\n </Surface>\r\n );\r\n}\r\n\r\nfunction FilterPopover({ label, options, selected, onSelect }: { \r\n label: string; \r\n options: FilterOption[]; \r\n selected: string[];\r\n onSelect: (val: string) => void;\r\n}) {\r\n return (\r\n <Popover>\r\n <PopoverTrigger \r\n className={cn(\r\n \"h-9 px-3 text-xs gap-2 border border-transparent hover:border-white/10 rounded-2xl transition-all\",\r\n selected.length > 0 ? \"bg-cyan-500/10 text-cyan-400 border-cyan-500/20\" : \"text-white/60\"\r\n )}\r\n >\r\n <Filter className=\"h-3.5 w-3.5\" />\r\n {label}\r\n {selected.length > 0 && (\r\n <Badge variant=\"info\" className=\"h-4 min-w-[16px] px-1 bg-cyan-500 text-black border-none\">\r\n {selected.length}\r\n </Badge>\r\n )}\r\n <ChevronDown className=\"h-3.5 w-3.5 opacity-40\" />\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-56 p-0 bg-[#1a1a1a] border-white/10 shadow-2xl\">\r\n <Command>\r\n <CommandInput placeholder={`Search ${label}...`} />\r\n <CommandList>\r\n <CommandGroup>\r\n {options.map(opt => (\r\n <CommandItem \r\n key={opt.value} \r\n value={opt.value}\r\n onSelect={() => onSelect(opt.value)}\r\n className=\"flex items-center justify-between\"\r\n >\r\n <span>{opt.label}</span>\r\n {selected.includes(opt.value) && <Check className=\"h-3.5 w-3.5 text-cyan-400\" />}\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Text } from '../typography/Text';\r\nimport { Button } from '../button/Button';\r\nimport { ChevronLeft, ChevronRight, Plus } from 'lucide-react';\r\nimport type { KanbanTask } from './Kanban';\r\n\r\ninterface KanbanCalendarViewProps {\r\n tasks: KanbanTask[];\r\n onTaskClick?: (task: KanbanTask) => void;\r\n onAddTask?: (date: Date) => void;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanCalendarView({ \r\n tasks, \r\n onTaskClick, \r\n onAddTask,\r\n className \r\n}: KanbanCalendarViewProps) {\r\n const [currentDate, setCurrentDate] = useState(new Date());\r\n\r\n const daysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\r\n const firstDayOfMonth = (year: number, month: number) => new Date(year, month, 1).getDay();\r\n\r\n const year = currentDate.getFullYear();\r\n const month = currentDate.getMonth();\r\n const totalDays = daysInMonth(year, month);\r\n const startDay = firstDayOfMonth(year, month);\r\n\r\n const prevMonth = () => setCurrentDate(new Date(year, month - 1, 1));\r\n const nextMonth = () => setCurrentDate(new Date(year, month + 1, 1));\r\n\r\n const monthNames = [\r\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n ];\r\n\r\n const days = [];\r\n // Add empty slots for previous month\r\n for (let i = 0; i < startDay; i++) {\r\n days.push(null);\r\n }\r\n // Add days of current month\r\n for (let i = 1; i <= totalDays; i++) {\r\n days.push(new Date(year, month, i));\r\n }\r\n\r\n const getTasksForDate = (date: Date) => {\r\n return tasks.filter(task => {\r\n if (!task.dueDate) return false;\r\n // Simple string matching for demo, in real app use proper date objects\r\n // Assuming dueDate is like \"Dec 24\" or ISO string\r\n const taskDate = new Date(task.dueDate);\r\n if (isNaN(taskDate.getTime())) {\r\n // Fallback for demo strings like \"Dec 24\"\r\n const currentYear = new Date().getFullYear();\r\n const d = new Date(`${task.dueDate} ${currentYear}`);\r\n return d.getDate() === date.getDate() && \r\n d.getMonth() === date.getMonth() && \r\n d.getFullYear() === date.getFullYear();\r\n }\r\n return taskDate.getDate() === date.getDate() && \r\n taskDate.getMonth() === date.getMonth() && \r\n taskDate.getFullYear() === date.getFullYear();\r\n });\r\n };\r\n\r\n return (\r\n <Surface className={cn(\"flex flex-col h-[700px] overflow-hidden\", className)}>\r\n {/* Calendar Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-white/10\">\r\n <div className=\"flex flex-col\">\r\n <Text className=\"text-xl font-bold text-white\">{monthNames[month]} {year}</Text>\r\n <Text className=\"text-xs text-white/40 uppercase tracking-widest font-bold\">Monthly Schedule</Text>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <Button variant=\"outline\" size=\"sm\" onClick={prevMonth}>\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <Button variant=\"outline\" size=\"sm\" onClick={() => setCurrentDate(new Date())}>\r\n Today\r\n </Button>\r\n <Button variant=\"outline\" size=\"sm\" onClick={nextMonth}>\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Weekdays Header */}\r\n <div className=\"grid grid-cols-7 border-b border-white/10 bg-white/[0.02]\">\r\n {['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'].map(day => (\r\n <div key={day} className=\"py-2 text-center\">\r\n <Text className=\"text-xs font-bold text-white/40 uppercase tracking-wider\">{day}</Text>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Calendar Grid */}\r\n <div className=\"flex-1 grid grid-cols-7 auto-rows-fr overflow-y-auto\">\r\n {days.map((date, i) => {\r\n if (!date) return <div key={`empty-${i}`} className=\"border-r border-b border-white/5 bg-white/[0.01]\" />;\r\n \r\n const dateTasks = getTasksForDate(date);\r\n const isToday = new Date().toDateString() === date.toDateString();\r\n\r\n return (\r\n <div \r\n key={date.toISOString()} \r\n className={cn(\r\n \"group relative border-r border-b border-white/10 p-2 min-h-[100px] transition-colors hover:bg-white/[0.02]\",\r\n isToday && \"bg-cyan-500/[0.03]\"\r\n )}\r\n >\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <span className={cn(\r\n \"text-sm font-medium w-7 h-7 flex items-center justify-center rounded-full transition-colors\",\r\n isToday ? \"bg-cyan-500 text-white\" : \"text-white/60 group-hover:text-white\"\r\n )}>\r\n {date.getDate()}\r\n </span>\r\n <button \r\n onClick={() => onAddTask?.(date)}\r\n className=\"opacity-0 group-hover:opacity-100 p-1 hover:bg-white/[0.06] rounded-md transition-all text-white/40 hover:text-white\"\r\n >\r\n <Plus className=\"h-3 w-3\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-1\">\r\n {dateTasks.map(task => (\r\n <div \r\n key={task.id}\r\n onClick={() => onTaskClick?.(task)}\r\n className={cn(\r\n \"px-2 py-1 text-[10px] rounded-md border cursor-pointer transition-all truncate\",\r\n task.priority === 'urgent' ? \"bg-red-500/10 border-red-500/20 text-red-400\" :\r\n task.priority === 'high' ? \"bg-orange-500/10 border-orange-500/20 text-orange-400\" :\r\n task.priority === 'medium' ? \"bg-cyan-500/10 border-cyan-500/20 text-cyan-400\" :\r\n \"bg-gray-500/10 border-gray-500/20 text-gray-400\"\r\n )}\r\n >\r\n {task.title}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </Surface>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\n\r\nexport const Card = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <Surface\r\n ref={ref}\r\n className={className}\r\n {...props}\r\n />\r\n));\r\nCard.displayName = \"Card\";\r\n\r\nexport const CardHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\r\n {...props}\r\n />\r\n));\r\nCardHeader.displayName = \"CardHeader\";\r\n\r\nexport const CardTitle = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLHeadingElement>\r\n>(({ className, ...props }, ref) => (\r\n <h3\r\n ref={ref}\r\n className={cn(\r\n \"text-2xl font-semibold leading-none tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nCardTitle.displayName = \"CardTitle\";\r\n\r\nexport const CardDescription = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, ...props }, ref) => (\r\n <p\r\n ref={ref}\r\n className={cn(\"text-sm text-gray-500 dark:text-white/50\", className)}\r\n {...props}\r\n />\r\n));\r\nCardDescription.displayName = \"CardDescription\";\r\n\r\nexport const CardContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\r\n));\r\nCardContent.displayName = \"CardContent\";\r\n\r\nexport const CardFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex items-center p-6 pt-0\", className)}\r\n {...props}\r\n />\r\n));\r\nCardFooter.displayName = \"CardFooter\";\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Skeleton } from '../feedback/Skeleton';\r\n\r\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\r\n fallback?: React.ReactNode;\r\n containerClassName?: string;\r\n}\r\n\r\nexport const Image = React.forwardRef<HTMLImageElement, ImageProps>(\r\n ({ className, containerClassName, alt, src, fallback, onLoad, onError, ...props }, ref) => {\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [hasError, setHasError] = useState(false);\r\n\r\n const handleLoad = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\r\n setIsLoading(false);\r\n onLoad?.(e);\r\n };\r\n\r\n const handleError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\r\n setIsLoading(false);\r\n setHasError(true);\r\n onError?.(e);\r\n };\r\n\r\n if (hasError && fallback) {\r\n return <>{fallback}</>;\r\n }\r\n\r\n return (\r\n <div className={cn(\"relative overflow-hidden rounded-2xl bg-gray-100 dark:bg-white/[0.02] border border-gray-200 dark:border-white/10\", containerClassName)}>\r\n {isLoading && (\r\n <Skeleton className=\"absolute inset-0 h-full w-full\" />\r\n )}\r\n <img\r\n ref={ref}\r\n src={src}\r\n alt={alt}\r\n onLoad={handleLoad}\r\n onError={handleError}\r\n className={cn(\r\n \"h-full w-full object-cover transition-opacity duration-300\",\r\n isLoading ? \"opacity-0\" : \"opacity-100\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nImage.displayName = \"Image\";\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\r\n}\r\n\r\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\r\n ({ className, size = 'lg', ...props }, ref) => {\r\n const sizes = {\r\n sm: 'max-w-screen-sm',\r\n md: 'max-w-screen-md',\r\n lg: 'max-w-screen-lg',\r\n xl: 'max-w-screen-xl',\r\n full: 'max-w-full',\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn('mx-auto w-full px-4', sizes[size], className)}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nContainer.displayName = 'Container';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\r\n direction?: 'row' | 'col' | 'row-reverse' | 'col-reverse';\r\n gap?: number | string;\r\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\r\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\r\n wrap?: boolean;\r\n}\r\n\r\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\r\n ({ className, direction = 'col', gap = 4, align, justify, wrap, style, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'flex',\r\n {\r\n 'flex-row': direction === 'row',\r\n 'flex-col': direction === 'col',\r\n 'flex-row-reverse': direction === 'row-reverse',\r\n 'flex-col-reverse': direction === 'col-reverse',\r\n 'flex-wrap': wrap,\r\n 'items-start': align === 'start',\r\n 'items-end': align === 'end',\r\n 'items-center': align === 'center',\r\n 'items-baseline': align === 'baseline',\r\n 'items-stretch': align === 'stretch',\r\n 'justify-start': justify === 'start',\r\n 'justify-end': justify === 'end',\r\n 'justify-center': justify === 'center',\r\n 'justify-between': justify === 'between',\r\n 'justify-around': justify === 'around',\r\n 'justify-evenly': justify === 'evenly',\r\n },\r\n className\r\n )}\r\n style={{\r\n gap: typeof gap === 'number' ? `${gap * 0.25}rem` : gap,\r\n ...style\r\n }}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nStack.displayName = 'Stack';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\r\n cols?: number;\r\n sm?: number;\r\n md?: number;\r\n lg?: number;\r\n xl?: number;\r\n gap?: number | string;\r\n}\r\n\r\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\r\n ({ className, cols = 1, sm, md, lg, xl, gap = 4, style, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'grid',\r\n sm && `sm:grid-cols-${sm}`,\r\n md && `md:grid-cols-${md}`,\r\n lg && `lg:grid-cols-${lg}`,\r\n xl && `xl:grid-cols-${xl}`,\r\n className\r\n )}\r\n style={{\r\n gridTemplateColumns: cols ? `repeat(${cols}, minmax(0, 1fr))` : undefined,\r\n gap: typeof gap === 'number' ? `${gap * 0.25}rem` : gap,\r\n ...style\r\n }}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nGrid.displayName = 'Grid';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface BackgroundProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * The pattern variant to display\r\n * @default 'none'\r\n */\r\n variant?: 'dots' | 'grid' | 'mesh' | 'gradient' | 'beams' | 'none';\r\n /**\r\n * Add a subtle noise/grain texture\r\n * @default false\r\n */\r\n noise?: boolean;\r\n /**\r\n * The color of the pattern (CSS color or variable)\r\n * @default 'rgba(255,255,255,0.08)'\r\n */\r\n patternColor?: string;\r\n /**\r\n * The size of the pattern (spacing between dots/lines)\r\n * @default 24\r\n */\r\n size?: number;\r\n /**\r\n * Apply a radial mask to fade the edges\r\n * @default 'none'\r\n */\r\n mask?: 'fade' | 'none';\r\n /**\r\n * Enable subtle animations for mesh or gradient variants\r\n * @default false\r\n */\r\n animate?: boolean;\r\n /**\r\n * Make the background follow the mouse (requires relative parent)\r\n * @default false\r\n */\r\n followMouse?: boolean;\r\n /**\r\n * The background color of the container. \r\n * Can be a Tailwind class (e.g., 'bg-zinc-950') or a CSS color.\r\n */\r\n bgColor?: string;\r\n}\r\n\r\nexport const Background = React.forwardRef<HTMLDivElement, BackgroundProps>(\r\n ({ \r\n variant = 'none', \r\n noise = false,\r\n patternColor, \r\n size = 24, \r\n mask = 'none', \r\n animate = false,\r\n followMouse = false,\r\n bgColor,\r\n className, \r\n children,\r\n style,\r\n ...props \r\n }, ref) => {\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n\r\n React.useEffect(() => {\r\n if (!followMouse) return;\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n const rect = el.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n el.style.setProperty('--mouse-x', `${x}px`);\r\n el.style.setProperty('--mouse-y', `${y}px`);\r\n };\r\n\r\n window.addEventListener('mousemove', handleMouseMove);\r\n return () => window.removeEventListener('mousemove', handleMouseMove);\r\n }, [followMouse]);\r\n \r\n const getBackgroundStyle = (): React.CSSProperties => {\r\n const baseStyle: React.CSSProperties = {};\r\n \r\n // Use CSS variables for ultra-performance (no React re-renders)\r\n const effectiveColor = patternColor || 'var(--pattern-color, rgba(255,255,255,0.08))';\r\n\r\n if (variant === 'dots') {\r\n return {\r\n ...baseStyle,\r\n backgroundImage: `radial-gradient(${effectiveColor} 1px, transparent 1px)`,\r\n backgroundSize: `${size}px ${size}px`,\r\n transform: followMouse ? 'translate3d(calc((var(--mouse-x, 0) - 24px) / 40), calc((var(--mouse-y, 0) - 24px) / 40), 0)' : undefined,\r\n };\r\n }\r\n if (variant === 'grid') {\r\n return {\r\n ...baseStyle,\r\n backgroundImage: `\r\n linear-gradient(to right, ${effectiveColor} 1px, transparent 1px),\r\n linear-gradient(to bottom, ${effectiveColor} 1px, transparent 1px)\r\n `,\r\n backgroundSize: `${size}px ${size}px`,\r\n transform: followMouse ? 'translate3d(calc((var(--mouse-x, 0) - 24px) / 40), calc((var(--mouse-y, 0) - 24px) / 40), 0)' : undefined,\r\n };\r\n }\r\n if (variant === 'gradient') {\r\n return {\r\n ...baseStyle,\r\n background: followMouse \r\n ? `radial-gradient(circle at var(--mouse-x, center) var(--mouse-y, center), ${effectiveColor}, transparent)`\r\n : `radial-gradient(circle at center, ${effectiveColor}, transparent)`,\r\n };\r\n }\r\n if (variant === 'beams') {\r\n return {\r\n ...baseStyle,\r\n background: `radial-gradient(60% 40% at 50% 0%, ${effectiveColor} 0%, transparent 100%)`,\r\n };\r\n }\r\n return baseStyle;\r\n };\r\n\r\n const maskStyle: React.CSSProperties = mask === 'fade' ? {\r\n maskImage: 'radial-gradient(ellipse at center, black, transparent 90%)',\r\n WebkitMaskImage: 'radial-gradient(ellipse at center, black, transparent 90%)',\r\n } : {};\r\n\r\n return (\r\n <div\r\n ref={(node) => {\r\n if (node) {\r\n (containerRef as React.MutableRefObject<HTMLDivElement>).current = node;\r\n }\r\n if (typeof ref === 'function') ref(node);\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\r\n }}\r\n className={cn(\r\n 'absolute inset-0 overflow-hidden pointer-events-none transition-transform duration-300 ease-out',\r\n 'z-0',\r\n '[--pattern-color:rgba(0,0,0,0.05)] dark:[--pattern-color:rgba(255,255,255,0.08)]',\r\n bgColor?.startsWith('bg-') ? bgColor : '',\r\n className\r\n )}\r\n style={{ \r\n ...getBackgroundStyle(), \r\n ...maskStyle, \r\n ...style,\r\n backgroundColor: bgColor && !bgColor.startsWith('bg-') ? bgColor : undefined \r\n }}\r\n {...props}\r\n >\r\n {noise && (\r\n <div \r\n className=\"absolute inset-0 opacity-[0.03] pointer-events-none brightness-100 contrast-150\" \r\n style={{ backgroundImage: `url(\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E\")` }} \r\n />\r\n )}\r\n\r\n {variant === 'beams' && (\r\n <div className=\"absolute inset-0 overflow-hidden\">\r\n <div className=\"absolute top-0 left-1/4 w-px h-full bg-gradient-to-b from-transparent via-white/10 to-transparent\" />\r\n <div className=\"absolute top-0 right-1/4 w-px h-full bg-gradient-to-b from-transparent via-white/10 to-transparent\" />\r\n </div>\r\n )}\r\n\r\n {variant === 'mesh' && (\r\n <div className={cn(\r\n \"absolute inset-0 opacity-30 blur-[100px]\",\r\n animate && \"animate-pulse\"\r\n )}>\r\n <div className=\"absolute top-[-10%] left-[-10%] w-[50%] h-[50%] rounded-full bg-blue-500/20\" />\r\n <div className=\"absolute bottom-[-10%] right-[-10%] w-[50%] h-[50%] rounded-full bg-purple-500/20\" />\r\n <div className=\"absolute top-[20%] right-[10%] w-[40%] h-[40%] rounded-full bg-indigo-500/10\" />\r\n </div>\r\n )}\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nBackground.displayName = 'Background';\r\n","import React, { createContext, useContext, useEffect, useState } from \"react\"\r\n\r\ntype Theme = \"dark\" | \"light\" | \"system\"\r\n\r\ntype ThemeProviderProps = {\r\n children: React.ReactNode\r\n defaultTheme?: Theme\r\n storageKey?: string\r\n}\r\n\r\ntype ThemeProviderState = {\r\n theme: Theme\r\n setTheme: (theme: Theme) => void\r\n}\r\n\r\nconst initialState: ThemeProviderState = {\r\n theme: \"system\",\r\n setTheme: () => null,\r\n}\r\n\r\nconst ThemeProviderContext = createContext<ThemeProviderState>(initialState)\r\n\r\nexport function ThemeProvider({\r\n children,\r\n defaultTheme = \"system\",\r\n storageKey = \"vite-ui-theme\",\r\n ...props\r\n}: ThemeProviderProps) {\r\n const [theme, setTheme] = useState<Theme>(\r\n () => (localStorage.getItem(storageKey) as Theme) || defaultTheme\r\n )\r\n\r\n useEffect(() => {\r\n const root = window.document.documentElement\r\n\r\n root.classList.remove(\"light\", \"dark\")\r\n\r\n if (theme === \"system\") {\r\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\")\r\n \r\n const applySystemTheme = () => {\r\n root.classList.remove(\"light\", \"dark\")\r\n root.classList.add(mediaQuery.matches ? \"dark\" : \"light\")\r\n }\r\n\r\n applySystemTheme()\r\n \r\n mediaQuery.addEventListener(\"change\", applySystemTheme)\r\n return () => mediaQuery.removeEventListener(\"change\", applySystemTheme)\r\n }\r\n\r\n root.classList.add(theme)\r\n }, [theme])\r\n\r\n const value = {\r\n theme,\r\n setTheme: (theme: Theme) => {\r\n localStorage.setItem(storageKey, theme)\r\n setTheme(theme)\r\n },\r\n }\r\n\r\n return (\r\n <ThemeProviderContext.Provider {...props} value={value}>\r\n {children}\r\n </ThemeProviderContext.Provider>\r\n )\r\n}\r\n\r\nexport const useTheme = () => {\r\n const context = useContext(ThemeProviderContext)\r\n\r\n if (context === undefined)\r\n throw new Error(\"useTheme must be used within a ThemeProvider\")\r\n\r\n return context\r\n}\r\n","import React from \"react\"\r\nimport { Moon, Sun } from \"lucide-react\"\r\nimport { useTheme } from \"./ThemeProvider\"\r\nimport { Button } from \"../components/button/Button\"\r\n\r\nexport function ThemeToggle() {\r\n const { setTheme, theme } = useTheme()\r\n\r\n return (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => setTheme(theme === \"light\" ? \"dark\" : \"light\")}\r\n >\r\n <Sun className=\"h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0\" />\r\n <Moon className=\"absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100\" />\r\n <span className=\"sr-only\">Toggle theme</span>\r\n </Button>\r\n )\r\n}\r\n","import React, { createContext, useContext, useState, useMemo } from 'react';\r\nimport { cn } from '../../../utils/cn';\r\n\r\n// --- Types ---\r\nexport type ChartDataPoint<T = Record<string, any>> = {\r\n label: string;\r\n value: number;\r\n} & T;\r\n\r\nexport interface ChartContextValue<T = any> {\r\n width: number;\r\n height: number;\r\n data: ChartDataPoint<T>[];\r\n maxValue: number;\r\n padding: { top: number; right: number; bottom: number; left: number };\r\n hoveredIndex: number | null;\r\n setHoveredIndex: (index: number | null) => void;\r\n}\r\n\r\n// --- Context ---\r\nconst ChartContext = createContext<ChartContextValue<any> | undefined>(undefined);\r\n\r\nexport function useChart<T = any>() {\r\n const context = useContext(ChartContext);\r\n if (!context) throw new Error('Chart components must be used within a ChartContainer');\r\n return context as ChartContextValue<T>;\r\n}\r\n\r\n// --- Utils ---\r\nexport function normalize(value: number, max: number, height: number) {\r\n if (max === 0) return 0;\r\n return (value / max) * height;\r\n}\r\n\r\n// --- Components ---\r\n\r\nexport interface ChartContainerProps<T = any> extends React.HTMLAttributes<HTMLDivElement> {\r\n data: ChartDataPoint<T>[];\r\n height?: number;\r\n padding?: { top: number; right: number; bottom: number; left: number };\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function ChartContainer<T = any>({\r\n data,\r\n height = 300,\r\n padding = { top: 20, right: 20, bottom: 40, left: 40 },\r\n className,\r\n children,\r\n ...props\r\n}: ChartContainerProps<T>) {\r\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\r\n const [containerWidth, setContainerWidth] = useState(0);\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n\r\n // Responsive width\r\n React.useEffect(() => {\r\n if (!containerRef.current) return;\r\n const observer = new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n setContainerWidth(entries[0].contentRect.width);\r\n }\r\n });\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const maxValue = useMemo(() => {\r\n return Math.max(...data.map((d) => d.value)) * 1.1; // Add 10% headroom\r\n }, [data]);\r\n\r\n return (\r\n <ChartContext.Provider\r\n value={{\r\n width: containerWidth,\r\n height,\r\n data,\r\n maxValue,\r\n padding,\r\n hoveredIndex,\r\n setHoveredIndex,\r\n }}\r\n >\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative w-full select-none\", className)}\r\n style={{ height }}\r\n {...props}\r\n >\r\n {containerWidth > 0 && (\r\n <svg\r\n width=\"100%\"\r\n height=\"100%\"\r\n viewBox={`0 0 ${containerWidth} ${height}`}\r\n className=\"overflow-visible\"\r\n >\r\n {children}\r\n </svg>\r\n )}\r\n </div>\r\n </ChartContext.Provider>\r\n );\r\n}\r\n\r\nexport function ChartGrid({ lines = 5 }: { lines?: number }) {\r\n const { width, height, padding } = useChart();\r\n const chartHeight = height - padding.top - padding.bottom;\r\n\r\n return (\r\n <g className=\"text-gray-200 dark:text-white/5\">\r\n {Array.from({ length: lines + 1 }).map((_, i) => {\r\n const y = padding.top + (chartHeight / lines) * i;\r\n return (\r\n <line\r\n key={i}\r\n x1={padding.left}\r\n y1={y}\r\n x2={width - padding.right}\r\n y2={y}\r\n stroke=\"currentColor\"\r\n strokeWidth={1}\r\n strokeDasharray=\"4 4\"\r\n />\r\n );\r\n })}\r\n </g>\r\n );\r\n}\r\n\r\nexport function ChartXAxis() {\r\n const { width, height, padding, data } = useChart();\r\n const chartWidth = width - padding.left - padding.right;\r\n const itemWidth = chartWidth / data.length;\r\n\r\n return (\r\n <g>\r\n {data.map((point, i) => {\r\n const x = padding.left + itemWidth * i + itemWidth / 2;\r\n const y = height - padding.bottom + 20;\r\n return (\r\n <text\r\n key={i}\r\n x={x}\r\n y={y}\r\n textAnchor=\"middle\"\r\n className=\"fill-gray-400 dark:fill-white/40 text-xs font-medium\"\r\n >\r\n {point.label}\r\n </text>\r\n );\r\n })}\r\n </g>\r\n );\r\n}\r\n\r\nexport function ChartTooltip({ \r\n renderTooltip \r\n}: { \r\n renderTooltip?: (data: ChartDataPoint) => React.ReactNode \r\n}) {\r\n const { hoveredIndex, data, width, padding } = useChart();\r\n \r\n if (hoveredIndex === null) return null;\r\n\r\n const chartWidth = width - padding.left - padding.right;\r\n const itemWidth = chartWidth / data.length;\r\n const x = padding.left + itemWidth * hoveredIndex + itemWidth / 2;\r\n const point = data[hoveredIndex];\r\n\r\n if (!point) return null;\r\n\r\n // Simple default tooltip if none provided\r\n const content = renderTooltip ? renderTooltip(point) : (\r\n <div className=\"rounded-xl border border-gray-200 dark:border-white/10 bg-white/90 dark:bg-black/80 px-3 py-2 text-xs shadow-xl backdrop-blur-md\">\r\n <div className=\"font-semibold text-gray-900 dark:text-white\">{point.label}</div>\r\n <div className=\"text-gray-500 dark:text-white/70\">Value: {point.value}</div>\r\n </div>\r\n );\r\n\r\n return (\r\n <foreignObject\r\n x={x - 75} // Center roughly (150px width assumed)\r\n y={0}\r\n width={150}\r\n height=\"100%\"\r\n className=\"pointer-events-none overflow-visible\"\r\n >\r\n <div className=\"flex h-full flex-col justify-center items-center\">\r\n <div className=\"animate-in fade-in zoom-in-95 duration-200\">\r\n {content}\r\n </div>\r\n </div>\r\n </foreignObject>\r\n );\r\n}\r\n\r\nexport function ChartSkeleton() {\r\n return (\r\n <div className=\"w-full h-full flex items-end justify-between gap-2 p-4 animate-pulse bg-gray-100 dark:bg-white/[0.02] rounded-2xl border border-gray-200 dark:border-white/5\">\r\n {[...Array(12)].map((_, i) => (\r\n <div \r\n key={i} \r\n className=\"w-full bg-gray-200 dark:bg-white/[0.03] rounded-t-lg\" \r\n style={{ height: `${Math.random() * 60 + 20}%` }}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart, normalize } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface BarChartProps<T = any> {\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose';\r\n showValues?: boolean;\r\n animationDelay?: number;\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function BarChart<T = any>({ \r\n color = 'cyan', \r\n showValues = false, \r\n animationDelay = 0,\r\n onValueClick \r\n}: BarChartProps<T>) {\r\n const { width, height, padding, data, maxValue, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n const chartWidth = width - padding.left - padding.right;\r\n const chartHeight = height - padding.top - padding.bottom;\r\n const itemWidth = chartWidth / data.length;\r\n const barWidth = itemWidth * 0.6; // 60% of slot width\r\n\r\n const colors = {\r\n cyan: 'from-cyan-500 to-blue-600',\r\n purple: 'from-purple-500 to-indigo-600',\r\n emerald: 'from-emerald-500 to-teal-600',\r\n amber: 'from-amber-400 to-orange-600',\r\n rose: 'from-rose-500 to-pink-600',\r\n };\r\n\r\n return (\r\n <g>\r\n {data.map((point, i) => {\r\n const barHeight = normalize(point.value, maxValue, chartHeight);\r\n const x = padding.left + itemWidth * i + (itemWidth - barWidth) / 2;\r\n const y = height - padding.bottom - barHeight;\r\n const isHovered = hoveredIndex === i;\r\n const delay = i * 0.1 + animationDelay; // Slower stagger for smoothness\r\n\r\n return (\r\n <g \r\n key={i} \r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n onClick={() => onValueClick?.(point)}\r\n className={cn(\"cursor-pointer\", onValueClick && \"cursor-pointer\")}\r\n >\r\n {/* Invisible hit area for easier hovering */}\r\n <rect\r\n x={padding.left + itemWidth * i}\r\n y={padding.top}\r\n width={itemWidth}\r\n height={chartHeight}\r\n fill=\"transparent\"\r\n />\r\n \r\n {/* The Bar */}\r\n <rect\r\n x={x}\r\n y={y}\r\n width={barWidth}\r\n height={barHeight}\r\n rx={4}\r\n className={cn(\r\n \"transition-all duration-300 ease-out\",\r\n isHovered ? \"brightness-125 filter\" : \"opacity-80\"\r\n )}\r\n style={{\r\n transformOrigin: `center ${height - padding.bottom}px`,\r\n animation: `grow-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) ${delay}s backwards`\r\n }}\r\n >\r\n {/* Gradient Definition would be better in defs, but inline style works for dynamic colors if needed. \r\n Here we use classes for gradients. */}\r\n </rect>\r\n \r\n {/* Gradient Overlay via Class */}\r\n <rect\r\n x={x}\r\n y={y}\r\n width={barWidth}\r\n height={barHeight}\r\n rx={4}\r\n className={cn(\"bg-gradient-to-b\", colors[color])}\r\n style={{\r\n pointerEvents: 'none',\r\n transformOrigin: `center ${height - padding.bottom}px`,\r\n animation: `grow-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) ${delay}s backwards`\r\n }}\r\n />\r\n\r\n {/* Value Label */}\r\n {showValues && (\r\n <text\r\n x={x + barWidth / 2}\r\n y={y - 8}\r\n textAnchor=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={500}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in-up 0.5s ease-out ${delay + 0.4}s forwards`,\r\n textShadow: '0 2px 4px rgba(0,0,0,0.5)'\r\n }}\r\n >\r\n {point.value}\r\n </text>\r\n )}\r\n </g>\r\n );\r\n })}\r\n <style>{`\r\n @keyframes grow-up {\r\n from { transform: scaleY(0); }\r\n to { transform: scaleY(1); }\r\n }\r\n @keyframes fade-in-up {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart, normalize } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface AreaChartProps<T = any> {\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose';\r\n showValues?: boolean;\r\n animationDelay?: number;\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function AreaChart<T = any>({ \r\n color = 'purple', \r\n showValues = false, \r\n animationDelay = 0,\r\n onValueClick \r\n}: AreaChartProps<T>) {\r\n const { width, height, padding, data, maxValue, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n const chartWidth = width - padding.left - padding.right;\r\n const chartHeight = height - padding.top - padding.bottom;\r\n const itemWidth = chartWidth / (data.length - 1); // Points are on edges\r\n\r\n const colors = {\r\n cyan: { stroke: '#06b6d4', fill: 'rgba(6, 182, 212, 0.2)' },\r\n purple: { stroke: '#8b5cf6', fill: 'rgba(139, 92, 246, 0.2)' },\r\n emerald: { stroke: '#10b981', fill: 'rgba(16, 185, 129, 0.2)' },\r\n amber: { stroke: '#f59e0b', fill: 'rgba(245, 158, 11, 0.2)' },\r\n rose: { stroke: '#f43f5e', fill: 'rgba(244, 63, 94, 0.2)' },\r\n };\r\n\r\n const theme = colors[color];\r\n\r\n // Generate Path Data\r\n const points = data.map((point, i) => {\r\n const x = padding.left + itemWidth * i;\r\n const y = height - padding.bottom - normalize(point.value, maxValue, chartHeight);\r\n return { x, y, item: point };\r\n });\r\n\r\n // Simple Line Path\r\n const linePath = points.map((p, i) => (i === 0 ? `M ${p.x} ${p.y}` : `L ${p.x} ${p.y}`)).join(' ');\r\n\r\n // Area Path (closes the loop)\r\n const areaPath = `\r\n ${linePath}\r\n L ${width - padding.right} ${height - padding.bottom}\r\n L ${padding.left} ${height - padding.bottom}\r\n Z\r\n `;\r\n\r\n return (\r\n <g>\r\n {/* Area Fill */}\r\n <path\r\n d={areaPath}\r\n fill={theme.fill}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in 1s ease-out ${animationDelay}s forwards` \r\n }}\r\n />\r\n\r\n {/* Stroke Line */}\r\n <path\r\n d={linePath}\r\n fill=\"none\"\r\n stroke={theme.stroke}\r\n strokeWidth={3}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"animate-draw-line\"\r\n style={{\r\n strokeDasharray: 2000,\r\n strokeDashoffset: 2000,\r\n animation: `draw-line 2s ease-out ${animationDelay}s forwards`\r\n }}\r\n />\r\n\r\n {/* Interactive Points */}\r\n {points.map((p, i) => (\r\n <g \r\n key={i} \r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n onClick={() => onValueClick?.(p.item)}\r\n className={cn(\"cursor-crosshair\", onValueClick && \"cursor-pointer\")}\r\n >\r\n {/* Invisible Hit Area */}\r\n <rect \r\n x={p.x - itemWidth / 2} \r\n y={padding.top} \r\n width={itemWidth} \r\n height={chartHeight} \r\n fill=\"transparent\" \r\n />\r\n \r\n {/* Active Point Indicator */}\r\n {(hoveredIndex === i || showValues) && (\r\n <>\r\n {hoveredIndex === i && (\r\n <line\r\n x1={p.x}\r\n y1={padding.top}\r\n x2={p.x}\r\n y2={height - padding.bottom}\r\n stroke=\"white\"\r\n strokeWidth={1}\r\n strokeDasharray=\"4 4\"\r\n className=\"opacity-50\"\r\n />\r\n )}\r\n <circle\r\n cx={p.x}\r\n cy={p.y}\r\n r={hoveredIndex === i ? 6 : 4}\r\n fill={theme.stroke}\r\n stroke=\"white\"\r\n strokeWidth={2}\r\n style={{\r\n transition: 'r 0.2s ease-out'\r\n }}\r\n />\r\n {showValues && (\r\n <text\r\n x={p.x}\r\n y={p.y - 12}\r\n textAnchor=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={500}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in-up 0.5s ease-out ${animationDelay + 1 + i * 0.1}s forwards`,\r\n textShadow: '0 2px 4px rgba(0,0,0,0.5)'\r\n }}\r\n >\r\n {data[i]?.value}\r\n </text>\r\n )}\r\n </>\r\n )}\r\n </g>\r\n ))}\r\n\r\n <style>{`\r\n @keyframes draw-line {\r\n to { stroke-dashoffset: 0; }\r\n }\r\n @keyframes fade-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n @keyframes fade-in-up {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart, normalize } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface LineChartProps<T = any> {\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose';\r\n showValues?: boolean;\r\n animationDelay?: number;\r\n curve?: 'linear' | 'smooth' | 'step';\r\n strokeWidth?: number;\r\n align?: 'center' | 'edge';\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function LineChart<T = any>({ \r\n color = 'cyan', \r\n showValues = false, \r\n animationDelay = 0,\r\n curve = 'smooth',\r\n strokeWidth = 3,\r\n align = 'edge',\r\n onValueClick \r\n}: LineChartProps<T>) {\r\n const { width, height, padding, data, maxValue, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n const chartWidth = width - padding.left - padding.right;\r\n const chartHeight = height - padding.top - padding.bottom;\r\n \r\n // Align 'center' matches BarChart (bands), 'edge' matches AreaChart (points)\r\n const itemWidth = align === 'center' \r\n ? chartWidth / data.length \r\n : chartWidth / (data.length - 1);\r\n\r\n const colors = {\r\n cyan: '#06b6d4',\r\n purple: '#8b5cf6',\r\n emerald: '#10b981',\r\n amber: '#f59e0b',\r\n rose: '#f43f5e',\r\n };\r\n\r\n const strokeColor = colors[color];\r\n\r\n // Generate Points\r\n const points = data.map((point, i) => {\r\n let x;\r\n if (align === 'center') {\r\n // Center of the band\r\n x = padding.left + itemWidth * i + itemWidth / 2;\r\n } else {\r\n // Edge\r\n x = padding.left + itemWidth * i;\r\n }\r\n \r\n const y = height - padding.bottom - normalize(point.value, maxValue, chartHeight);\r\n return { x, y, item: point };\r\n });\r\n\r\n // Generate Path Command\r\n let d = '';\r\n if (points.length > 0) {\r\n d = `M ${points[0]!.x} ${points[0]!.y}`;\r\n \r\n if (curve === 'smooth') {\r\n // Simple Catmull-Rom or Bezier approximation could go here, \r\n // but for now let's use a simple cubic bezier strategy or just straight lines if complex.\r\n // Actually, let's do a simple smoothing by using midpoints for control points if requested,\r\n // or just standard SVG commands.\r\n // For simplicity and robustness without a library like d3-shape, let's stick to linear or a basic smooth approximation.\r\n \r\n // Basic smooth strategy: Cubic Bezier between points\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const p0 = points[i]!;\r\n const p1 = points[i + 1]!;\r\n const cp1x = p0.x + (p1.x - p0.x) / 2;\r\n const cp1y = p0.y;\r\n const cp2x = p0.x + (p1.x - p0.x) / 2;\r\n const cp2y = p1.y;\r\n d += ` C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${p1.x} ${p1.y}`;\r\n }\r\n } else if (curve === 'step') {\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const p0 = points[i]!;\r\n const p1 = points[i + 1]!;\r\n d += ` L ${p1.x} ${p0.y} L ${p1.x} ${p1.y}`;\r\n }\r\n } else {\r\n // Linear\r\n for (let i = 1; i < points.length; i++) {\r\n d += ` L ${points[i]!.x} ${points[i]!.y}`;\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <g>\r\n {/* The Line */}\r\n <path\r\n d={d}\r\n fill=\"none\"\r\n stroke={strokeColor}\r\n strokeWidth={strokeWidth}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"animate-draw-line\"\r\n style={{\r\n strokeDasharray: 3000,\r\n strokeDashoffset: 3000,\r\n animation: `draw-line 2.5s ease-out ${animationDelay}s forwards`\r\n }}\r\n />\r\n\r\n {/* Interactive Points */}\r\n {points.map((p, i) => (\r\n <g \r\n key={i} \r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n onClick={() => onValueClick?.(p.item)}\r\n className={cn(\"cursor-crosshair\", onValueClick && \"cursor-pointer\")}\r\n >\r\n {/* Invisible Hit Area */}\r\n <rect \r\n x={p.x - itemWidth / 2} \r\n y={padding.top} \r\n width={itemWidth} \r\n height={chartHeight} \r\n fill=\"transparent\" \r\n />\r\n \r\n {/* Active Point Indicator */}\r\n {(hoveredIndex === i || showValues) && (\r\n <>\r\n {hoveredIndex === i && (\r\n <line\r\n x1={p.x}\r\n y1={padding.top}\r\n x2={p.x}\r\n y2={height - padding.bottom}\r\n stroke=\"white\"\r\n strokeWidth={1}\r\n strokeDasharray=\"4 4\"\r\n className=\"opacity-50\"\r\n />\r\n )}\r\n <circle\r\n cx={p.x}\r\n cy={p.y}\r\n r={hoveredIndex === i ? 6 : 4}\r\n fill={strokeColor}\r\n stroke=\"white\"\r\n strokeWidth={2}\r\n style={{ transition: 'r 0.2s ease-out' }}\r\n />\r\n {showValues && (\r\n <text\r\n x={p.x}\r\n y={p.y - 12}\r\n textAnchor=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={500}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in-up 0.5s ease-out ${animationDelay + 1 + i * 0.1}s forwards`,\r\n textShadow: '0 2px 4px rgba(0,0,0,0.5)'\r\n }}\r\n >\r\n {data[i]?.value}\r\n </text>\r\n )}\r\n </>\r\n )}\r\n </g>\r\n ))}\r\n\r\n <style>{`\r\n @keyframes draw-line {\r\n to { stroke-dashoffset: 0; }\r\n }\r\n @keyframes fade-in-up {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React, { useMemo } from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface PieChartProps<T = any> {\r\n innerRadius?: number; // 0 for Pie, >0 for Donut (0-1 relative to radius, or absolute pixels?) Let's say 0-1 relative.\r\n padAngle?: number;\r\n showLabels?: boolean;\r\n colors?: string[];\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function PieChart<T = any>({ \r\n innerRadius = 0, \r\n padAngle = 0.02, \r\n showLabels = false,\r\n colors = ['#06b6d4', '#8b5cf6', '#10b981', '#f59e0b', '#f43f5e', '#3b82f6', '#ec4899'],\r\n onValueClick\r\n}: PieChartProps<T>) {\r\n const { width, height, data, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n \r\n const radius = Math.min(width, height) / 2 * 0.8; // 80% of half-size to leave room for labels/hover\r\n const centerX = width / 2;\r\n const centerY = height / 2;\r\n \r\n const total = useMemo(() => data.reduce((acc, cur) => acc + cur.value, 0), [data]);\r\n \r\n let currentAngle = 0;\r\n \r\n const slices = data.map((point, i) => {\r\n const percentage = point.value / total;\r\n const angle = percentage * 2 * Math.PI;\r\n \r\n const startAngle = currentAngle;\r\n const endAngle = currentAngle + angle;\r\n \r\n currentAngle += angle;\r\n \r\n return {\r\n ...point,\r\n startAngle,\r\n endAngle,\r\n color: colors[i % colors.length],\r\n percentage\r\n };\r\n });\r\n\r\n // Helper to get coordinates\r\n const getCoordinatesForPercent = (percent: number, r: number) => {\r\n const x = centerX + r * Math.cos(percent);\r\n const y = centerY + r * Math.sin(percent);\r\n return [x, y];\r\n };\r\n\r\n return (\r\n <g>\r\n {slices.map((slice, i) => {\r\n // Calculate path\r\n // We need to handle the gap (padAngle) if multiple slices\r\n const effectiveStartAngle = slice.startAngle + (slices.length > 1 ? padAngle / 2 : 0);\r\n const effectiveEndAngle = slice.endAngle - (slices.length > 1 ? padAngle / 2 : 0);\r\n \r\n // If the slice is too small due to padding, just skip or render a line? \r\n // For simplicity, let's just clamp.\r\n if (effectiveEndAngle <= effectiveStartAngle) return null;\r\n\r\n const [startX, startY] = getCoordinatesForPercent(effectiveStartAngle, radius);\r\n const [endX, endY] = getCoordinatesForPercent(effectiveEndAngle, radius);\r\n \r\n const largeArcFlag = effectiveEndAngle - effectiveStartAngle > Math.PI ? 1 : 0;\r\n \r\n // Inner radius (for donut)\r\n const rInner = radius * innerRadius;\r\n const [innerStartX, innerStartY] = getCoordinatesForPercent(effectiveEndAngle, rInner);\r\n const [innerEndX, innerEndY] = getCoordinatesForPercent(effectiveStartAngle, rInner);\r\n\r\n const pathData = [\r\n `M ${startX} ${startY}`,\r\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\r\n innerRadius > 0 ? `L ${innerStartX} ${innerStartY}` : `L ${centerX} ${centerY}`,\r\n innerRadius > 0 ? `A ${rInner} ${rInner} 0 ${largeArcFlag} 0 ${innerEndX} ${innerEndY}` : '',\r\n 'Z'\r\n ].join(' ');\r\n\r\n const isHovered = hoveredIndex === i;\r\n \r\n // Label position (centroid)\r\n const midAngle = (slice.startAngle + slice.endAngle) / 2;\r\n const labelRadius = radius * (innerRadius > 0 ? (1 + innerRadius) / 2 : 0.7);\r\n const [labelX, labelY] = getCoordinatesForPercent(midAngle, labelRadius);\r\n\r\n return (\r\n <g \r\n key={i}\r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n className=\"cursor-pointer\"\r\n >\r\n <path\r\n d={pathData}\r\n fill={slice.color}\r\n className={cn(\r\n \"transition-all duration-300 ease-out\",\r\n isHovered ? \"opacity-100 brightness-110\" : \"opacity-90\"\r\n )}\r\n style={{\r\n transformOrigin: `${centerX}px ${centerY}px`,\r\n transform: isHovered ? 'scale(1.05)' : 'scale(1)',\r\n animation: `pie-enter 0.6s ease-out ${i * 0.05}s backwards`\r\n }}\r\n />\r\n \r\n {(showLabels || isHovered) && (\r\n <text\r\n x={labelX}\r\n y={labelY}\r\n textAnchor=\"middle\"\r\n dominantBaseline=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={600}\r\n className=\"pointer-events-none\"\r\n style={{ textShadow: '0 1px 2px rgba(0,0,0,0.5)' }}\r\n >\r\n {Math.round(slice.percentage * 100)}%\r\n </text>\r\n )}\r\n </g>\r\n );\r\n })}\r\n <style>{`\r\n @keyframes pie-enter {\r\n from { opacity: 0; transform: scale(0.8) rotate(-10deg); }\r\n to { opacity: 0.9; transform: scale(1) rotate(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React, { useMemo, useState } from 'react';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport type RadarDataPoint<T = Record<string, any>> = {\r\n subject: string;\r\n} & T;\r\n\r\nexport interface RadarChartProps<T = any> extends React.HTMLAttributes<HTMLDivElement> {\r\n data: RadarDataPoint<T>[];\r\n keys: (keyof T)[]; // Keys to plot (e.g. ['A', 'B'])\r\n colors?: string[]; // Colors for each key\r\n maxValue?: number;\r\n height?: number;\r\n}\r\n\r\nexport function RadarChart<T = any>({\r\n data,\r\n keys,\r\n colors = ['cyan', 'purple', 'emerald'],\r\n maxValue: userMaxValue,\r\n height = 300,\r\n className,\r\n ...props\r\n}: RadarChartProps<T>) {\r\n const [containerWidth, setContainerWidth] = useState(0);\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n\r\n // Responsive width\r\n React.useEffect(() => {\r\n if (!containerRef.current) return;\r\n const observer = new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n setContainerWidth(entries[0].contentRect.width);\r\n }\r\n });\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const center = { x: containerWidth / 2, y: height / 2 };\r\n const radius = Math.min(containerWidth, height) / 2 - 40; // 40px padding\r\n\r\n const maxValue = useMemo(() => {\r\n if (userMaxValue) return userMaxValue;\r\n let max = 0;\r\n data.forEach(d => {\r\n keys.forEach(k => {\r\n const val = Number(d[k]) || 0;\r\n if (val > max) max = val;\r\n });\r\n });\r\n return max * 1.1 || 100;\r\n }, [data, keys, userMaxValue]);\r\n\r\n const angleSlice = (Math.PI * 2) / data.length;\r\n\r\n const colorMap: Record<string, string> = {\r\n cyan: 'rgba(6, 182, 212, 0.5)',\r\n purple: 'rgba(139, 92, 246, 0.5)',\r\n emerald: 'rgba(16, 185, 129, 0.5)',\r\n amber: 'rgba(245, 158, 11, 0.5)',\r\n rose: 'rgba(244, 63, 94, 0.5)',\r\n };\r\n \r\n const strokeMap: Record<string, string> = {\r\n cyan: '#06b6d4',\r\n purple: '#8b5cf6',\r\n emerald: '#10b981',\r\n amber: '#f59e0b',\r\n rose: '#f43f5e',\r\n };\r\n\r\n if (containerWidth === 0) return <div ref={containerRef} style={{ height }} />;\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative w-full select-none\", className)}\r\n style={{ height }}\r\n {...props}\r\n >\r\n <svg width=\"100%\" height=\"100%\" viewBox={`0 0 ${containerWidth} ${height}`} className=\"overflow-visible\">\r\n {/* Grid */}\r\n {[1, 2, 3, 4, 5].map((level) => {\r\n const levelRadius = (radius / 5) * level;\r\n const points = data.map((_, i) => {\r\n const angle = angleSlice * i - Math.PI / 2;\r\n return `${center.x + Math.cos(angle) * levelRadius},${center.y + Math.sin(angle) * levelRadius}`;\r\n }).join(' ');\r\n \r\n return (\r\n <polygon\r\n key={level}\r\n points={points}\r\n fill=\"none\"\r\n stroke=\"rgba(255,255,255,0.1)\"\r\n strokeWidth=\"1\"\r\n />\r\n );\r\n })}\r\n\r\n {/* Axes & Labels */}\r\n {data.map((d, i) => {\r\n const angle = angleSlice * i - Math.PI / 2;\r\n const x = center.x + Math.cos(angle) * radius;\r\n const y = center.y + Math.sin(angle) * radius;\r\n \r\n // Label position (slightly outside)\r\n const labelX = center.x + Math.cos(angle) * (radius + 20);\r\n const labelY = center.y + Math.sin(angle) * (radius + 20);\r\n\r\n return (\r\n <g key={i}>\r\n <line\r\n x1={center.x}\r\n y1={center.y}\r\n x2={x}\r\n y2={y}\r\n stroke=\"rgba(255,255,255,0.1)\"\r\n strokeWidth=\"1\"\r\n />\r\n <text\r\n x={labelX}\r\n y={labelY}\r\n textAnchor=\"middle\"\r\n dominantBaseline=\"middle\"\r\n fill=\"rgba(255,255,255,0.6)\"\r\n fontSize=\"12\"\r\n >\r\n {d.subject}\r\n </text>\r\n </g>\r\n );\r\n })}\r\n\r\n {/* Data Polygons */}\r\n {keys.map((key, kIndex) => {\r\n const points = data.map((d, i) => {\r\n const value = Number(d[key]) || 0;\r\n const r = (value / maxValue) * radius;\r\n const angle = angleSlice * i - Math.PI / 2;\r\n return `${center.x + Math.cos(angle) * r},${center.y + Math.sin(angle) * r}`;\r\n }).join(' ');\r\n\r\n const colorName = colors[kIndex % colors.length] || 'cyan';\r\n const fill = colorMap[colorName];\r\n const stroke = strokeMap[colorName];\r\n\r\n return (\r\n <polygon\r\n key={key as string}\r\n points={points}\r\n fill={fill}\r\n fillOpacity={0.3}\r\n stroke={stroke}\r\n strokeWidth={2}\r\n className=\"transition-all duration-500 ease-out hover:fill-opacity-50\"\r\n />\r\n );\r\n })}\r\n </svg>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface SparklineProps extends React.HTMLAttributes<HTMLDivElement> {\r\n data: number[];\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose' | 'white';\r\n height?: number;\r\n strokeWidth?: number;\r\n fill?: boolean;\r\n}\r\n\r\nexport function Sparkline({\r\n data,\r\n color = 'emerald',\r\n height = 40,\r\n strokeWidth = 2,\r\n fill = false,\r\n className,\r\n ...props\r\n}: SparklineProps) {\r\n const max = Math.max(...data);\r\n const min = Math.min(...data);\r\n const range = max - min || 1;\r\n\r\n const colors = {\r\n cyan: '#06b6d4',\r\n purple: '#8b5cf6',\r\n emerald: '#10b981',\r\n amber: '#f59e0b',\r\n rose: '#f43f5e',\r\n white: '#ffffff',\r\n };\r\n\r\n const strokeColor = colors[color];\r\n\r\n // Generate points\r\n // We assume width is 100% (viewBox 0 0 100 100) but we need aspect ratio.\r\n // To make it responsive without JS, we can use preserveAspectRatio=\"none\" on the SVG\r\n // and map x from 0 to 100.\r\n \r\n const points = data.map((val, i) => {\r\n const x = (i / (data.length - 1)) * 100;\r\n // Invert Y because SVG 0 is top\r\n // Normalize value between 0 and 100 (height of viewBox)\r\n // Add some padding (5%) so stroke doesn't clip\r\n const normalized = ((val - min) / range);\r\n const y = 95 - (normalized * 90); \r\n return { x, y };\r\n });\r\n\r\n let d = '';\r\n if (points.length > 0) {\r\n d = `M ${points[0]!.x} ${points[0]!.y}`;\r\n // Simple smoothing\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const p0 = points[i]!;\r\n const p1 = points[i + 1]!;\r\n const cp1x = p0.x + (p1.x - p0.x) / 2;\r\n const cp1y = p0.y;\r\n const cp2x = p0.x + (p1.x - p0.x) / 2;\r\n const cp2y = p1.y;\r\n d += ` C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${p1.x} ${p1.y}`;\r\n }\r\n }\r\n\r\n const fillPath = fill \r\n ? `${d} L 100 100 L 0 100 Z` \r\n : undefined;\r\n\r\n return (\r\n <div \r\n className={cn(\"w-full overflow-hidden\", className)} \r\n style={{ height }} \r\n {...props}\r\n >\r\n <svg\r\n width=\"100%\"\r\n height=\"100%\"\r\n viewBox=\"0 0 100 100\"\r\n preserveAspectRatio=\"none\"\r\n className=\"overflow-visible\"\r\n >\r\n {fill && (\r\n <path\r\n d={fillPath}\r\n fill={strokeColor}\r\n fillOpacity={0.1}\r\n stroke=\"none\"\r\n />\r\n )}\r\n <path\r\n d={d}\r\n fill=\"none\"\r\n stroke={strokeColor}\r\n strokeWidth={strokeWidth}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\" // Keeps stroke width constant despite scaling\r\n />\r\n </svg>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { useChart } from './Chart';\r\n\r\nexport interface YAxisProps {\r\n ticks?: number;\r\n format?: (value: number) => string;\r\n}\r\n\r\nexport function ChartYAxis({ ticks = 5, format = (v) => v.toString() }: YAxisProps) {\r\n const { height, padding, maxValue } = useChart();\r\n const chartHeight = height - padding.top - padding.bottom;\r\n\r\n return (\r\n <g>\r\n {Array.from({ length: ticks + 1 }).map((_, i) => {\r\n const value = (maxValue / ticks) * i;\r\n const y = height - padding.bottom - (chartHeight / ticks) * i;\r\n \r\n return (\r\n <text\r\n key={i}\r\n x={padding.left - 10}\r\n y={y}\r\n textAnchor=\"end\"\r\n dominantBaseline=\"middle\"\r\n className=\"fill-gray-400 dark:fill-white/40 text-xs font-medium\"\r\n >\r\n {format(Math.round(value))}\r\n </text>\r\n );\r\n })}\r\n </g>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Avatar } from './Avatar';\r\nimport { Button } from '../button/Button';\r\n\r\nconst userPreviewVariants = cva(\r\n \"flex flex-col gap-4 rounded-2xl border p-4 transition-all duration-200\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-white border-gray-200 dark:bg-white/[0.03] dark:border-white/10\",\r\n glass: \"backdrop-blur-md bg-white/80 border-white/20 dark:bg-black/40 dark:border-white/10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface UserPreviewProps \r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof userPreviewVariants> {\r\n user: {\r\n name: string;\r\n email?: string;\r\n avatarSrc?: string;\r\n role?: string;\r\n bio?: string;\r\n stats?: { label: string; value: string | number }[];\r\n };\r\n onFollow?: () => void;\r\n onMessage?: () => void;\r\n}\r\n\r\nexport const UserPreview = React.forwardRef<HTMLDivElement, UserPreviewProps>(\r\n ({ className, variant, user, onFollow, onMessage, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(userPreviewVariants({ variant, className }))} {...props}>\r\n <div className=\"flex items-start justify-between\">\r\n <div className=\"flex gap-3\">\r\n <Avatar src={user.avatarSrc} alt={user.name} size=\"lg\" />\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{user.name}</h4>\r\n {user.role && (\r\n <span className=\"text-xs text-gray-500 dark:text-white/50\">{user.role}</span>\r\n )}\r\n {user.email && (\r\n <div className=\"text-xs text-gray-400 dark:text-white/40 mt-0.5\">{user.email}</div>\r\n )}\r\n </div>\r\n </div>\r\n {onFollow && (\r\n <Button size=\"sm\" variant=\"outline\" onClick={onFollow}>Follow</Button>\r\n )}\r\n </div>\r\n \r\n {user.bio && (\r\n <p className=\"text-sm text-gray-600 dark:text-gray-300 line-clamp-2\">\r\n {user.bio}\r\n </p>\r\n )}\r\n\r\n {user.stats && (\r\n <div className=\"flex gap-4 border-t border-gray-100 pt-3 dark:border-white/5\">\r\n {user.stats.map((stat, i) => (\r\n <div key={i} className=\"flex flex-col\">\r\n <span className=\"text-xs font-medium text-gray-900 dark:text-white\">{stat.value}</span>\r\n <span className=\"text-[10px] text-gray-500 dark:text-white/40\">{stat.label}</span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n \r\n {onMessage && (\r\n <Button className=\"w-full mt-2\" onClick={onMessage}>Message</Button>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\nUserPreview.displayName = 'UserPreview';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst timelineItemVariants = cva(\r\n \"relative pl-8 pb-8 last:pb-0\",\r\n {\r\n variants: {\r\n status: {\r\n default: \"[&>div:first-child]:bg-gray-200 dark:[&>div:first-child]:bg-white/20\",\r\n active: \"[&>div:first-child]:bg-blue-500\",\r\n success: \"[&>div:first-child]:bg-emerald-500\",\r\n error: \"[&>div:first-child]:bg-rose-500\",\r\n }\r\n },\r\n defaultVariants: {\r\n status: \"default\"\r\n }\r\n }\r\n);\r\n\r\nexport interface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof timelineItemVariants> {\r\n title: string;\r\n date?: string;\r\n description?: React.ReactNode;\r\n icon?: React.ReactNode;\r\n isLast?: boolean;\r\n}\r\n\r\nexport const TimelineItem = React.forwardRef<HTMLDivElement, TimelineItemProps>(\r\n ({ className, status, title, date, description, icon, isLast, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(timelineItemVariants({ status, className }))} {...props}>\r\n {/* Line */}\r\n {!isLast && (\r\n <div className=\"absolute left-[11px] top-[24px] bottom-0 w-px bg-gray-200 dark:bg-white/[0.06]\" />\r\n )}\r\n \r\n {/* Dot / Icon */}\r\n <div className={cn(\r\n \"absolute left-0 top-1.5 flex h-6 w-6 items-center justify-center rounded-full border-2 border-white dark:border-black ring-1 ring-transparent transition-colors\",\r\n status === 'active' ? \"bg-blue-500 ring-blue-500/30\" : \r\n status === 'success' ? \"bg-emerald-500 ring-emerald-500/30\" :\r\n status === 'error' ? \"bg-rose-500 ring-rose-500/30\" :\r\n \"bg-gray-200 dark:bg-white/20\"\r\n )}>\r\n {icon && <span className=\"text-white text-[10px]\">{icon}</span>}\r\n </div>\r\n\r\n <div className=\"flex flex-col gap-1\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-medium text-gray-900 dark:text-white\">{title}</span>\r\n {date && <span className=\"text-xs text-gray-500 dark:text-white/40\">{date}</span>}\r\n </div>\r\n {description && (\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n {description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\nTimelineItem.displayName = 'TimelineItem';\r\n\r\nexport const Timeline = ({ children, className }: { children: React.ReactNode, className?: string }) => {\r\n return <div className={cn(\"flex flex-col\", className)}>{children}</div>;\r\n};\r\n","import React, { useState } from 'react';\r\nimport { ChevronRight, ChevronDown, Folder, File, FolderOpen } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface TreeNode {\r\n id: string;\r\n label: string;\r\n icon?: React.ReactNode;\r\n children?: TreeNode[];\r\n}\r\n\r\nexport interface TreeProps {\r\n data: TreeNode[];\r\n className?: string;\r\n onSelect?: (node: TreeNode) => void;\r\n}\r\n\r\nconst TreeNodeItem = ({ node, depth = 0, onSelect }: { node: TreeNode; depth?: number; onSelect?: (node: TreeNode) => void }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const hasChildren = node.children && node.children.length > 0;\r\n\r\n const handleToggle = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (hasChildren) {\r\n setIsOpen(!isOpen);\r\n }\r\n onSelect?.(node);\r\n };\r\n\r\n return (\r\n <div>\r\n <div\r\n className={cn(\r\n \"flex items-center gap-2 rounded-lg px-2 py-1.5 text-sm text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-white/[0.03] cursor-pointer\",\r\n )}\r\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\r\n onClick={handleToggle}\r\n >\r\n {hasChildren ? (\r\n <span className=\"text-gray-400 dark:text-white/40\">\r\n {isOpen ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronRight className=\"h-4 w-4\" />}\r\n </span>\r\n ) : (\r\n <span className=\"w-4\" /> \r\n )}\r\n \r\n {node.icon ? (\r\n <span className=\"text-gray-500 dark:text-white/50\">{node.icon}</span>\r\n ) : (\r\n <span className=\"text-blue-500 dark:text-blue-400\">\r\n {hasChildren ? (isOpen ? <FolderOpen className=\"h-4 w-4\" /> : <Folder className=\"h-4 w-4\" />) : <File className=\"h-4 w-4\" />}\r\n </span>\r\n )}\r\n \r\n <span className=\"truncate\">{node.label}</span>\r\n </div>\r\n \r\n {isOpen && hasChildren && (\r\n <div className=\"animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {node.children!.map((child) => (\r\n <TreeNodeItem key={child.id} node={child} depth={depth + 1} onSelect={onSelect} />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport const Tree = ({ data, className, onSelect }: TreeProps) => {\r\n return (\r\n <div className={cn(\"w-full select-none\", className)}>\r\n {data.map((node) => (\r\n <TreeNodeItem key={node.id} node={node} onSelect={onSelect} />\r\n ))}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface TerminalProps extends React.HTMLAttributes<HTMLDivElement> {\r\n title?: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Terminal = React.forwardRef<HTMLDivElement, TerminalProps>(\r\n ({ className, title = \"Terminal\", children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"overflow-hidden rounded-2xl border border-gray-200 bg-gray-950 shadow-xl dark:border-white/10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"flex items-center justify-between border-b border-white/10 bg-white/[0.03] px-4 py-2\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <div className=\"h-3 w-3 rounded-full bg-rose-500/80\" />\r\n <div className=\"h-3 w-3 rounded-full bg-amber-500/80\" />\r\n <div className=\"h-3 w-3 rounded-full bg-emerald-500/80\" />\r\n </div>\r\n <div className=\"text-xs font-medium text-white/50\">{title}</div>\r\n <div className=\"w-10\" /> {/* Spacer for centering */}\r\n </div>\r\n <div className=\"p-4 font-mono text-sm text-gray-300\">\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\nTerminal.displayName = \"Terminal\";\r\n\r\nexport const TerminalLine = ({ children, prefix = \"$\", className }: { children: React.ReactNode, prefix?: string, className?: string }) => (\r\n <div className={cn(\"flex gap-2\", className)}>\r\n <span className=\"select-none text-emerald-400\">{prefix}</span>\r\n <span>{children}</span>\r\n </div>\r\n);\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface MarqueeProps extends React.HTMLAttributes<HTMLDivElement> {\r\n pauseOnHover?: boolean;\r\n direction?: 'left' | 'right';\r\n speed?: 'slow' | 'normal' | 'fast';\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Marquee = ({ \r\n className, \r\n pauseOnHover = false, \r\n direction = 'left', \r\n speed = 'normal',\r\n children, \r\n ...props \r\n}: MarqueeProps) => {\r\n \r\n const speeds = {\r\n slow: \"40s\",\r\n normal: \"20s\",\r\n fast: \"10s\",\r\n };\r\n\r\n return (\r\n <div \r\n className={cn(\"group flex overflow-hidden p-2 [--gap:1rem] [gap:var(--gap)]\", className)} \r\n {...props}\r\n >\r\n <div \r\n className={cn(\r\n \"flex shrink-0 justify-around [gap:var(--gap)] min-w-full\",\r\n direction === 'left' ? \"animate-marquee\" : \"animate-marquee-reverse\",\r\n pauseOnHover && \"group-hover:[animation-play-state:paused]\"\r\n )}\r\n style={{ animationDuration: speeds[speed] }}\r\n >\r\n {children}\r\n </div>\r\n <div \r\n aria-hidden=\"true\"\r\n className={cn(\r\n \"flex shrink-0 justify-around [gap:var(--gap)] min-w-full\",\r\n direction === 'left' ? \"animate-marquee\" : \"animate-marquee-reverse\",\r\n pauseOnHover && \"group-hover:[animation-play-state:paused]\"\r\n )}\r\n style={{ animationDuration: speeds[speed] }}\r\n >\r\n {children}\r\n </div>\r\n <style>{`\r\n @keyframes marquee {\r\n from { transform: translateX(0); }\r\n to { transform: translateX(calc(-100% - var(--gap))); }\r\n }\r\n @keyframes marquee-reverse {\r\n from { transform: translateX(calc(-100% - var(--gap))); }\r\n to { transform: translateX(0); }\r\n }\r\n .animate-marquee {\r\n animation: marquee linear infinite;\r\n }\r\n .animate-marquee-reverse {\r\n animation: marquee-reverse linear infinite;\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst statusDotVariants = cva(\r\n \"inline-block rounded-full\",\r\n {\r\n variants: {\r\n variant: {\r\n success: \"bg-emerald-500\",\r\n warning: \"bg-amber-500\",\r\n error: \"bg-rose-500\",\r\n info: \"bg-blue-500\",\r\n neutral: \"bg-gray-400\",\r\n },\r\n size: {\r\n sm: \"h-2 w-2\",\r\n md: \"h-2.5 w-2.5\",\r\n lg: \"h-3 w-3\",\r\n },\r\n animate: {\r\n true: \"animate-pulse\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n variant: \"neutral\",\r\n size: \"md\",\r\n animate: false,\r\n }\r\n }\r\n);\r\n\r\nexport interface StatusDotProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof statusDotVariants> {}\r\n\r\nexport const StatusDot = React.forwardRef<HTMLSpanElement, StatusDotProps>(\r\n ({ className, variant, size, animate, ...props }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(statusDotVariants({ variant, size, animate, className }))}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nStatusDot.displayName = \"StatusDot\";\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst otpInputVariants = cva(\r\n \"flex items-center gap-2\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"[&>input]:h-8 [&>input]:w-8 [&>input]:text-sm\",\r\n md: \"[&>input]:h-10 [&>input]:w-10 [&>input]:text-base\",\r\n lg: \"[&>input]:h-12 [&>input]:w-12 [&>input]:text-lg\",\r\n }\r\n },\r\n defaultVariants: {\r\n size: \"md\"\r\n }\r\n }\r\n);\r\n\r\nexport interface OTPInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>, VariantProps<typeof otpInputVariants> {\r\n length?: number;\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n onComplete?: (value: string) => void;\r\n disabled?: boolean;\r\n error?: boolean;\r\n}\r\n\r\nexport const OTPInput = React.forwardRef<HTMLDivElement, OTPInputProps>(\r\n ({ className, size, length = 6, value = \"\", onChange, onComplete, disabled, error, ...props }, ref) => {\r\n const [localValue, setLocalValue] = useState<string[]>(new Array(length).fill(\"\"));\r\n const inputsRef = useRef<(HTMLInputElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n const val = value.split(\"\").slice(0, length);\r\n const newVal = [...val, ...new Array(length - val.length).fill(\"\")];\r\n setLocalValue(newVal);\r\n }, [value, length]);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>, index: number) => {\r\n const val = e.target.value;\r\n if (isNaN(Number(val))) return;\r\n\r\n const newLocalValue = [...localValue];\r\n // Take the last character if multiple (paste scenario handled separately usually, but simple here)\r\n newLocalValue[index] = val.substring(val.length - 1);\r\n \r\n setLocalValue(newLocalValue);\r\n const stringValue = newLocalValue.join(\"\");\r\n onChange?.(stringValue);\r\n\r\n if (val && index < length - 1) {\r\n inputsRef.current[index + 1]?.focus();\r\n }\r\n\r\n if (stringValue.length === length) {\r\n onComplete?.(stringValue);\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>, index: number) => {\r\n if (e.key === \"Backspace\" && !localValue[index] && index > 0) {\r\n inputsRef.current[index - 1]?.focus();\r\n }\r\n };\r\n\r\n const handlePaste = (e: React.ClipboardEvent) => {\r\n e.preventDefault();\r\n const pastedData = e.clipboardData.getData(\"text/plain\").slice(0, length);\r\n if (!/^\\d+$/.test(pastedData)) return;\r\n\r\n const newLocalValue = [...localValue];\r\n pastedData.split(\"\").forEach((char, i) => {\r\n newLocalValue[i] = char;\r\n });\r\n setLocalValue(newLocalValue);\r\n const stringValue = newLocalValue.join(\"\");\r\n onChange?.(stringValue);\r\n if (stringValue.length === length) onComplete?.(stringValue);\r\n inputsRef.current[Math.min(pastedData.length, length - 1)]?.focus();\r\n };\r\n\r\n return (\r\n <div ref={ref} className={cn(otpInputVariants({ size, className }))} {...props}>\r\n {localValue.map((digit, index) => (\r\n <input\r\n key={index}\r\n ref={el => inputsRef.current[index] = el}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n maxLength={1}\r\n value={digit}\r\n disabled={disabled}\r\n onChange={(e) => handleChange(e, index)}\r\n onKeyDown={(e) => handleKeyDown(e, index)}\r\n onPaste={handlePaste}\r\n className={cn(\r\n \"rounded-2xl border bg-gray-50 text-center font-semibold transition-all duration-200\",\r\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 focus:outline-none\",\r\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\r\n \"dark:bg-white/[0.03] dark:text-white\",\r\n error \r\n ? \"border-rose-500 text-rose-500 focus:border-rose-500 focus:ring-rose-500/20\" \r\n : \"border-gray-200 dark:border-white/10\"\r\n )}\r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n);\r\nOTPInput.displayName = \"OTPInput\";\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Minus, Plus } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Button } from '../button/Button';\r\n\r\nconst numberInputVariants = cva(\r\n \"flex items-center rounded-2xl border bg-gray-50 dark:bg-white/[0.03] dark:border-white/10\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"h-8\",\r\n md: \"h-10\",\r\n lg: \"h-12\",\r\n },\r\n error: {\r\n true: \"border-rose-500\",\r\n false: \"border-gray-200\",\r\n }\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n error: false\r\n }\r\n }\r\n);\r\n\r\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'>, VariantProps<typeof numberInputVariants> {\r\n value?: number;\r\n onChange?: (value: number) => void;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n}\r\n\r\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\r\n ({ className, size, error, value = 0, onChange, min = -Infinity, max = Infinity, step = 1, disabled, ...props }, ref) => {\r\n \r\n const handleDecrement = () => {\r\n if (value - step >= min) {\r\n onChange?.(value - step);\r\n }\r\n };\r\n\r\n const handleIncrement = () => {\r\n if (value + step <= max) {\r\n onChange?.(value + step);\r\n }\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const val = parseFloat(e.target.value);\r\n if (!isNaN(val)) {\r\n onChange?.(val);\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(numberInputVariants({ size, error, className }))}>\r\n <button\r\n type=\"button\"\r\n onClick={handleDecrement}\r\n disabled={disabled || value <= min}\r\n className=\"flex h-full items-center justify-center px-3 text-gray-500 hover:text-gray-900 disabled:opacity-50 dark:text-white/50 dark:hover:text-white\"\r\n >\r\n <Minus className=\"h-3.5 w-3.5\" />\r\n </button>\r\n \r\n <div className=\"h-full w-px bg-gray-200 dark:bg-white/[0.06]\" />\r\n \r\n <input\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n className=\"h-full w-full min-w-[3rem] bg-transparent text-center text-sm font-medium text-gray-900 focus:outline-none dark:text-white\"\r\n {...props}\r\n />\r\n \r\n <div className=\"h-full w-px bg-gray-200 dark:bg-white/[0.06]\" />\r\n \r\n <button\r\n type=\"button\"\r\n onClick={handleIncrement}\r\n disabled={disabled || value >= max}\r\n className=\"flex h-full items-center justify-center px-3 text-gray-500 hover:text-gray-900 disabled:opacity-50 dark:text-white/50 dark:hover:text-white\"\r\n >\r\n <Plus className=\"h-3.5 w-3.5\" />\r\n </button>\r\n </div>\r\n );\r\n }\r\n);\r\nNumberInput.displayName = \"NumberInput\";\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst toggleGroupVariants = cva(\r\n \"inline-flex items-center rounded-2xl border border-gray-200 bg-gray-50 p-1 dark:border-white/10 dark:bg-white/[0.03]\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"h-8\",\r\n md: \"h-10\",\r\n lg: \"h-12\",\r\n },\r\n fullWidth: {\r\n true: \"w-full flex\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n fullWidth: false\r\n }\r\n }\r\n);\r\n\r\nconst toggleItemVariants = cva(\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-2xl px-3 py-1.5 text-sm font-medium ring-offset-white transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-gray-950 dark:focus-visible:ring-gray-300\",\r\n {\r\n variants: {\r\n selected: {\r\n true: \"bg-white text-gray-950 shadow-sm dark:bg-gray-800 dark:text-gray-50\",\r\n false: \"text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-50\",\r\n },\r\n fullWidth: {\r\n true: \"flex-1\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n selected: false,\r\n fullWidth: false\r\n }\r\n }\r\n);\r\n\r\nexport interface ToggleGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>, VariantProps<typeof toggleGroupVariants> {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n options: { label: string; value: string; icon?: React.ReactNode }[];\r\n}\r\n\r\nexport const ToggleGroup = React.forwardRef<HTMLDivElement, ToggleGroupProps>(\r\n ({ className, size, fullWidth, value, onChange, options, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(toggleGroupVariants({ size, fullWidth, className }))} {...props}>\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => onChange?.(option.value)}\r\n className={cn(toggleItemVariants({ selected: value === option.value, fullWidth }))}\r\n >\r\n {option.icon && <span className=\"mr-2\">{option.icon}</span>}\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n );\r\n }\r\n);\r\nToggleGroup.displayName = \"ToggleGroup\";\r\n","import React, { useState } from 'react';\r\nimport { Star } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\r\n max?: number;\r\n value?: number;\r\n onChange?: (value: number) => void;\r\n readOnly?: boolean;\r\n size?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nexport const Rating = React.forwardRef<HTMLDivElement, RatingProps>(\r\n ({ className, max = 5, value = 0, onChange, readOnly = false, size = 'md', ...props }, ref) => {\r\n const [hoverValue, setHoverValue] = useState<number | null>(null);\r\n\r\n const sizes = {\r\n sm: \"h-4 w-4\",\r\n md: \"h-5 w-5\",\r\n lg: \"h-6 w-6\",\r\n };\r\n\r\n return (\r\n <div ref={ref} className={cn(\"flex items-center gap-1\", className)} {...props}>\r\n {Array.from({ length: max }).map((_, i) => {\r\n const index = i + 1;\r\n const isFilled = (hoverValue !== null ? hoverValue : value) >= index;\r\n \r\n return (\r\n <button\r\n key={i}\r\n type=\"button\"\r\n disabled={readOnly}\r\n onClick={() => onChange?.(index)}\r\n onMouseEnter={() => !readOnly && setHoverValue(index)}\r\n onMouseLeave={() => !readOnly && setHoverValue(null)}\r\n className={cn(\r\n \"transition-transform hover:scale-110 focus:outline-none\",\r\n readOnly && \"cursor-default hover:scale-100\"\r\n )}\r\n >\r\n <Star\r\n className={cn(\r\n sizes[size],\r\n \"transition-colors duration-200\",\r\n isFilled \r\n ? \"fill-amber-400 text-amber-400\" \r\n : \"fill-transparent text-gray-300 dark:text-white/20\"\r\n )}\r\n />\r\n </button>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n);\r\nRating.displayName = \"Rating\";\r\n","import React from 'react';\r\nimport { Check } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface StepperProps {\r\n steps: { title: string; description?: string }[];\r\n currentStep: number;\r\n className?: string;\r\n onStepClick?: (step: number) => void;\r\n}\r\n\r\nexport const Stepper = ({ steps, currentStep, className, onStepClick }: StepperProps) => {\r\n return (\r\n <div className={cn(\"flex w-full flex-col gap-4 md:flex-row\", className)}>\r\n {steps.map((step, index) => {\r\n const isCompleted = currentStep > index;\r\n const isCurrent = currentStep === index;\r\n const isClickable = !!onStepClick;\r\n\r\n return (\r\n <div \r\n key={index} \r\n className={cn(\r\n \"flex flex-1 flex-col gap-2 md:flex-row md:items-center md:gap-4\",\r\n isClickable && \"cursor-pointer\"\r\n )}\r\n onClick={() => isClickable && onStepClick(index)}\r\n >\r\n <div className=\"flex items-center gap-4 md:flex-col md:gap-2\">\r\n <div className=\"flex items-center\">\r\n <div\r\n className={cn(\r\n \"flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-semibold transition-colors\",\r\n isCompleted\r\n ? \"border-blue-600 bg-blue-600 text-white dark:border-blue-500 dark:bg-blue-500\"\r\n : isCurrent\r\n ? \"border-blue-600 text-blue-600 dark:border-blue-500 dark:text-blue-500\"\r\n : \"border-gray-300 text-gray-500 dark:border-white/20 dark:text-white/40\"\r\n )}\r\n >\r\n {isCompleted ? <Check className=\"h-4 w-4\" /> : index + 1}\r\n </div>\r\n {/* Connector Line (Mobile: Right of circle, Desktop: Right of content) */}\r\n {index < steps.length - 1 && (\r\n <div \r\n className={cn(\r\n \"ml-4 h-px flex-1 bg-gray-200 md:hidden dark:bg-white/[0.03]\",\r\n isCompleted && \"bg-blue-600 dark:bg-blue-500\"\r\n )} \r\n />\r\n )}\r\n </div>\r\n \r\n <div className=\"flex flex-col\">\r\n <span className={cn(\r\n \"text-sm font-medium\",\r\n isCurrent || isCompleted ? \"text-gray-900 dark:text-white\" : \"text-gray-500 dark:text-white/50\"\r\n )}>\r\n {step.title}\r\n </span>\r\n {step.description && (\r\n <span className=\"text-xs text-gray-500 dark:text-white/40 hidden md:block\">\r\n {step.description}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Connector Line (Desktop) */}\r\n {index < steps.length - 1 && (\r\n <div \r\n className={cn(\r\n \"hidden h-px flex-1 bg-gray-200 md:block dark:bg-white/[0.03]\",\r\n isCompleted && \"bg-blue-600 dark:bg-blue-500\"\r\n )} \r\n />\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SpotlightProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n size?: number;\r\n color?: string;\r\n}\r\n\r\nexport const Spotlight = ({ \r\n children, \r\n className, \r\n size = 300, \r\n color = \"rgba(255, 255, 255, 0.1)\",\r\n ...props \r\n}: SpotlightProps) => {\r\n const divRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\r\n const el = divRef.current;\r\n if (!el) return;\r\n\r\n const rect = el.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n el.style.setProperty('--mouse-x', `${x}px`);\r\n el.style.setProperty('--mouse-y', `${y}px`);\r\n };\r\n\r\n const handleMouseEnter = () => {\r\n divRef.current?.style.setProperty('--opacity', '1');\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n divRef.current?.style.setProperty('--opacity', '0');\r\n };\r\n\r\n return (\r\n <div\r\n ref={divRef}\r\n onMouseMove={handleMouseMove}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n className={cn(\r\n \"relative overflow-hidden rounded-2xl border border-gray-200 bg-white dark:border-white/10 dark:bg-black\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className=\"pointer-events-none absolute -inset-px transition-opacity duration-300\"\r\n style={{\r\n opacity: 'var(--opacity, 0)',\r\n background: `radial-gradient(${size}px circle at var(--mouse-x, center) var(--mouse-y, center), ${color}, transparent 80%)`,\r\n }}\r\n />\r\n <div className=\"relative h-full\">{children}</div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Sparkles, Paperclip, ArrowUp, Square, Mic, X, File } from 'lucide-react';\r\nimport { Button } from '../button/Button';\r\n\r\nconst aiPromptInputVariants = cva(\r\n \"relative flex w-full flex-col rounded-2xl border transition-all duration-200 focus-within:ring-4\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-white border-gray-200 shadow-sm focus-within:border-purple-500/50 focus-within:ring-purple-500/10 dark:bg-white/[0.03] dark:border-white/10 dark:shadow-none\",\r\n ghost: \"bg-transparent border-transparent shadow-none focus-within:bg-white/50 dark:focus-within:bg-white/5\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface Attachment {\r\n id: string;\r\n name: string;\r\n type?: string;\r\n url?: string;\r\n}\r\n\r\nexport interface AIPromptInputProps \r\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'onSubmit'>,\r\n VariantProps<typeof aiPromptInputVariants> {\r\n /** Callback fired when the user submits the prompt (Enter or Click) */\r\n onSubmit?: (value: string) => void;\r\n /** Whether the AI is currently generating a response */\r\n isGenerating?: boolean;\r\n /** Callback fired when the attach button is clicked. If onFilesSelected is provided, this is ignored. */\r\n onAttach?: () => void;\r\n /** Callback fired when files are selected via the built-in file picker */\r\n onFilesSelected?: (files: FileList) => void;\r\n /** Callback fired when the stop button is clicked */\r\n onStop?: () => void;\r\n /** Callback fired when the microphone button is clicked */\r\n onMic?: () => void;\r\n /** Maximum number of characters allowed */\r\n maxLength?: number;\r\n /** Custom footer content to render below the input */\r\n footer?: React.ReactNode;\r\n /** List of attached files to display */\r\n attachments?: Attachment[];\r\n /** Callback fired when an attachment is removed */\r\n onRemoveAttachment?: (attachmentId: string) => void;\r\n /** Accepted file types for the built-in file picker */\r\n accept?: string;\r\n /** Whether to allow multiple files in the built-in file picker */\r\n multiple?: boolean;\r\n}\r\n\r\n/**\r\n * A specialized input component for AI prompts with support for attachments, \r\n * voice input, and generation control.\r\n */\r\nexport const AIPromptInput = React.forwardRef<HTMLTextAreaElement, AIPromptInputProps>(\r\n ({ \r\n className, \r\n variant,\r\n onSubmit, \r\n isGenerating, \r\n onAttach, \r\n onFilesSelected,\r\n onStop,\r\n onMic,\r\n maxLength,\r\n footer,\r\n attachments,\r\n onRemoveAttachment,\r\n accept,\r\n multiple,\r\n placeholder = \"Ask AI anything...\", \r\n value: controlledValue,\r\n onChange,\r\n ...props \r\n }, ref) => {\r\n const [internalValue, setInternalValue] = useState('');\r\n const isControlled = controlledValue !== undefined;\r\n const value = isControlled ? (controlledValue as string) : internalValue;\r\n \r\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\r\n const fileInputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n const adjustHeight = () => {\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n adjustHeight();\r\n }, [value]);\r\n\r\n const handleInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n const newValue = e.target.value;\r\n if (maxLength && newValue.length > maxLength) return;\r\n \r\n if (!isControlled) {\r\n setInternalValue(newValue);\r\n }\r\n onChange?.(e);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n if (value.trim() && !isGenerating) {\r\n onSubmit?.(value);\r\n if (!isControlled) setInternalValue('');\r\n }\r\n }\r\n props.onKeyDown?.(e);\r\n };\r\n\r\n const handleSubmit = () => {\r\n if (isGenerating && onStop) {\r\n onStop();\r\n } else if (value.trim()) {\r\n onSubmit?.(value);\r\n if (!isControlled) setInternalValue('');\r\n }\r\n };\r\n\r\n const handleAttachClick = () => {\r\n if (onFilesSelected && fileInputRef.current) {\r\n fileInputRef.current.click();\r\n } else {\r\n onAttach?.();\r\n }\r\n };\r\n\r\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n onFilesSelected?.(e.target.files);\r\n }\r\n // Reset value to allow selecting the same file again\r\n if (fileInputRef.current) {\r\n fileInputRef.current.value = '';\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(aiPromptInputVariants({ variant, className }))}>\r\n {/* Hidden File Input */}\r\n <input\r\n type=\"file\"\r\n ref={fileInputRef}\r\n className=\"hidden\"\r\n onChange={handleFileChange}\r\n accept={accept}\r\n multiple={multiple}\r\n />\r\n\r\n {/* Attachments Area */}\r\n {attachments && attachments.length > 0 && (\r\n <div className=\"flex flex-wrap gap-2 px-4 pt-4\">\r\n {attachments.map((att) => (\r\n <div \r\n key={att.id} \r\n className=\"group relative flex items-center gap-2 rounded-xl border border-gray-200 bg-gray-50 px-3 py-1.5 text-sm transition-colors hover:bg-gray-100 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/[0.06]\"\r\n >\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-lg bg-white dark:bg-white/[0.06]\">\r\n <File className=\"h-3 w-3 text-purple-500\" />\r\n </div>\r\n <span className=\"max-w-[120px] truncate text-gray-700 dark:text-gray-300\">\r\n {att.name}\r\n </span>\r\n <button \r\n onClick={() => onRemoveAttachment?.(att.id)}\r\n className=\"ml-1 rounded-full p-0.5 text-gray-400 opacity-0 transition-all hover:bg-gray-200 hover:text-gray-600 group-hover:opacity-100 dark:hover:bg-white/[0.06] dark:hover:text-white\"\r\n type=\"button\"\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n <textarea\r\n ref={(node) => {\r\n textareaRef.current = node;\r\n if (typeof ref === 'function') ref(node);\r\n else if (ref) (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\r\n }}\r\n value={value}\r\n onChange={handleInput}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n rows={1}\r\n className={cn(\r\n \"w-full resize-none bg-transparent px-4 py-4 text-base outline-none max-h-[200px]\",\r\n \"text-gray-900 placeholder:text-gray-400\",\r\n \"dark:text-white dark:placeholder:text-white/40\"\r\n )}\r\n disabled={isGenerating && !onStop}\r\n {...props}\r\n />\r\n \r\n <div className=\"flex items-center justify-between px-2 pb-2\">\r\n <div className=\"flex items-center gap-1\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"text-gray-400 hover:text-gray-600 dark:text-white/40 dark:hover:text-white\"\r\n onClick={handleAttachClick}\r\n type=\"button\"\r\n title=\"Attach file\"\r\n >\r\n <Paperclip className=\"h-5 w-5\" />\r\n </Button>\r\n \r\n {onMic && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"text-gray-400 hover:text-gray-600 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onMic}\r\n type=\"button\"\r\n title=\"Use microphone\"\r\n >\r\n <Mic className=\"h-5 w-5\" />\r\n </Button>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n {maxLength && (\r\n <span className=\"text-xs text-gray-400 dark:text-white/30\">\r\n {value.length}/{maxLength}\r\n </span>\r\n )}\r\n\r\n <Button\r\n size=\"icon\"\r\n disabled={(!value.trim() && !isGenerating) || (isGenerating && !onStop)}\r\n onClick={handleSubmit}\r\n className={cn(\r\n \"h-8 w-8 rounded-full transition-all duration-200\",\r\n (value.trim() || isGenerating)\r\n ? \"bg-purple-600 text-white hover:bg-purple-500 shadow-lg shadow-purple-500/25\" \r\n : \"bg-gray-100 text-gray-400 dark:bg-white/[0.06] dark:text-white/20\"\r\n )}\r\n >\r\n {isGenerating ? (\r\n onStop ? (\r\n <Square className=\"h-3 w-3 fill-current\" />\r\n ) : (\r\n <Sparkles className=\"h-4 w-4 animate-pulse\" />\r\n )\r\n ) : (\r\n <ArrowUp className=\"h-4 w-4\" />\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n \r\n {footer && (\r\n <div className=\"border-t border-gray-100 px-4 py-2 text-xs text-gray-400 dark:border-white/5 dark:text-white/30\">\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAIPromptInput.displayName = 'AIPromptInput';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Copy, RefreshCw, ThumbsUp, ThumbsDown, Sparkles, Share, Edit, ExternalLink } from 'lucide-react';\r\nimport { Button } from '../button/Button';\r\n\r\nconst aiResponseVariants = cva(\r\n \"group relative overflow-hidden rounded-2xl border transition-all duration-200\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-gray-50 border-gray-200 dark:bg-white/[0.02] dark:border-white/10\",\r\n ghost: \"bg-transparent border-transparent\",\r\n outline: \"bg-transparent border-gray-200 dark:border-white/10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface AIResponseSource {\r\n title: string;\r\n url: string;\r\n}\r\n\r\nexport interface AIResponseProps \r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof aiResponseVariants> {\r\n /** The content of the response */\r\n children: React.ReactNode;\r\n /** Callback fired when the copy button is clicked */\r\n onCopy?: () => void;\r\n /** Callback fired when the regenerate button is clicked */\r\n onRegenerate?: () => void;\r\n /** Callback fired when feedback buttons are clicked */\r\n onFeedback?: (type: 'up' | 'down') => void;\r\n /** Callback fired when the share button is clicked */\r\n onShare?: () => void;\r\n /** Callback fired when the edit button is clicked */\r\n onEdit?: () => void;\r\n /** Timestamp string to display (e.g., \"Just now\", \"2 mins ago\") */\r\n timestamp?: string;\r\n /** List of sources/citations to display */\r\n sources?: AIResponseSource[];\r\n /** Name of the model used (e.g., \"GPT-4\") */\r\n model?: string;\r\n /** Usage information (e.g., \"245 tokens\") */\r\n usage?: string | number;\r\n}\r\n\r\n/**\r\n * A container component for displaying AI-generated responses with \r\n * built-in actions for copying, regenerating, and providing feedback.\r\n */\r\nexport const AIResponse = React.forwardRef<HTMLDivElement, AIResponseProps>(\r\n ({ \r\n className, \r\n variant,\r\n children, \r\n onCopy, \r\n onRegenerate, \r\n onFeedback, \r\n onShare, \r\n onEdit,\r\n timestamp,\r\n sources,\r\n model,\r\n usage,\r\n ...props \r\n }, ref) => {\r\n return (\r\n <div \r\n ref={ref}\r\n className={cn(aiResponseVariants({ variant, className }))}\r\n {...props}\r\n >\r\n {/* Header / Icon */}\r\n <div className=\"absolute left-4 top-4 flex items-center gap-3\">\r\n <div className=\"flex h-6 w-6 items-center justify-center rounded-full bg-gradient-to-br from-purple-500 to-blue-500 shadow-lg shadow-purple-500/20\">\r\n <Sparkles className=\"h-3.5 w-3.5 text-white\" />\r\n </div>\r\n {timestamp && (\r\n <span className=\"text-xs font-medium text-gray-400 dark:text-white/30\">\r\n {timestamp}\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"pl-14 pr-4 py-4\">\r\n <div className=\"prose prose-sm dark:prose-invert max-w-none text-gray-700 dark:text-gray-300\">\r\n {children}\r\n </div>\r\n\r\n {/* Sources */}\r\n {sources && sources.length > 0 && (\r\n <div className=\"mt-4 flex flex-wrap gap-2\">\r\n {sources.map((source, index) => (\r\n <a\r\n key={index}\r\n href={source.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className={cn(\r\n \"flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs transition-colors\",\r\n \"border-gray-200 bg-white text-gray-600 hover:bg-gray-50\",\r\n \"dark:border-white/10 dark:bg-white/[0.03] dark:text-white/60 dark:hover:bg-white/[0.06]\"\r\n )}\r\n >\r\n <span className=\"max-w-[150px] truncate\">{source.title}</span>\r\n <ExternalLink className=\"h-3 w-3 opacity-50\" />\r\n </a>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Actions Footer */}\r\n <div className=\"flex items-center justify-between border-t border-gray-200 bg-white/50 px-2 py-1.5 backdrop-blur dark:border-white/5 dark:bg-white/[0.02]\">\r\n \r\n {/* Meta Info (Model/Usage) */}\r\n <div className=\"flex items-center gap-3 px-2 text-[10px] font-medium text-gray-400 dark:text-white/20\">\r\n {model && <span>{model}</span>}\r\n {usage && <span>{usage}</span>}\r\n </div>\r\n\r\n {/* Action Buttons */}\r\n <div className=\"flex items-center gap-1\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n className=\"h-7 px-2 text-xs text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onCopy}\r\n >\r\n <Copy className=\"mr-1.5 h-3.5 w-3.5\" />\r\n Copy\r\n </Button>\r\n\r\n {onShare && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onShare}\r\n title=\"Share\"\r\n >\r\n <Share className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n )}\r\n\r\n {onEdit && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onEdit}\r\n title=\"Edit\"\r\n >\r\n <Edit className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n )}\r\n \r\n <div className=\"mx-1 h-3 w-px bg-gray-200 dark:bg-white/10\" />\r\n \r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onRegenerate}\r\n title=\"Regenerate\"\r\n >\r\n <RefreshCw className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n \r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={() => onFeedback?.('up')}\r\n title=\"Helpful\"\r\n >\r\n <ThumbsUp className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n \r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={() => onFeedback?.('down')}\r\n title=\"Not helpful\"\r\n >\r\n <ThumbsDown className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAIResponse.displayName = 'AIResponse';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ChatLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function ChatLayout({ children, className, ...props }: ChatLayoutProps) {\r\n return (\r\n <div \r\n className={cn(\r\n \"flex h-[800px] w-full overflow-hidden rounded-3xl border border-gray-200 dark:border-white/10 bg-white dark:bg-black/40 backdrop-blur-xl shadow-2xl\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Search, Plus } from 'lucide-react';\r\nimport type { Conversation } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\n\r\ninterface ChatSidebarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\r\n conversations: Conversation[];\r\n activeId?: string;\r\n onSelect?: (id: string) => void;\r\n onNewChat?: () => void;\r\n}\r\n\r\nexport function ChatSidebar({ \r\n conversations, \r\n activeId, \r\n onSelect, \r\n onNewChat,\r\n className,\r\n ...props \r\n}: ChatSidebarProps) {\r\n return (\r\n <div className={cn(\"flex w-80 flex-col border-r border-gray-200 dark:border-white/10 bg-gray-50/50 dark:bg-white/[0.02]\", className)} {...props}>\r\n <div className=\"p-4 space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">Messages</h2>\r\n <button \r\n onClick={onNewChat}\r\n className=\"p-2 rounded-full hover:bg-gray-200 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n >\r\n <Plus className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n \r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" />\r\n <input \r\n type=\"text\" \r\n placeholder=\"Search messages...\" \r\n className=\"w-full h-10 pl-9 pr-4 rounded-2xl bg-white dark:bg-white/[0.03] border border-gray-200 dark:border-white/10 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all placeholder:text-gray-400\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <ScrollArea className=\"flex-1\">\r\n <div className=\"p-2 space-y-1\">\r\n {conversations.map((chat) => (\r\n <button\r\n key={chat.id}\r\n onClick={() => onSelect?.(chat.id)}\r\n className={cn(\r\n \"w-full flex items-center gap-3 p-3 rounded-2xl transition-all text-left group\",\r\n activeId === chat.id \r\n ? \"bg-blue-500/10 dark:bg-white/[0.06] shadow-[0_0_15px_rgba(59,130,246,0.1)] dark:shadow-[0_0_15px_rgba(255,255,255,0.05)]\" \r\n : \"hover:bg-gray-100 dark:hover:bg-white/[0.03]\"\r\n )}\r\n >\r\n <div className=\"relative\">\r\n <Avatar src={chat.user.avatar} alt={chat.user.name} fallback={chat.user.name[0]} />\r\n {chat.user.status === 'online' && (\r\n <span className=\"absolute bottom-0 right-0 h-3 w-3 rounded-full bg-green-500 border-2 border-white dark:border-black\" />\r\n )}\r\n </div>\r\n \r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center justify-between mb-0.5\">\r\n <span className={cn(\r\n \"font-medium truncate\",\r\n activeId === chat.id ? \"text-blue-600 dark:text-white\" : \"text-gray-900 dark:text-white/90\"\r\n )}>\r\n {chat.user.name}\r\n </span>\r\n {chat.lastMessage && (\r\n <span className=\"text-xs text-gray-400 whitespace-nowrap ml-2\">\r\n {chat.lastMessage.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"flex items-center justify-between\">\r\n <p className={cn(\r\n \"text-sm truncate pr-2\",\r\n activeId === chat.id ? \"text-blue-600/80 dark:text-white/70\" : \"text-gray-500 dark:text-white/50\",\r\n chat.isTyping && \"text-blue-500 italic\"\r\n )}>\r\n {chat.isTyping ? 'Typing...' : chat.lastMessage?.content}\r\n </p>\r\n {chat.unreadCount ? (\r\n <span className=\"flex h-5 min-w-[1.25rem] items-center justify-center rounded-full bg-blue-500 px-1.5 text-[10px] font-bold text-white\">\r\n {chat.unreadCount}\r\n </span>\r\n ) : null}\r\n </div>\r\n </div>\r\n </button>\r\n ))}\r\n </div>\r\n </ScrollArea>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { User } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { Phone, Video, MoreVertical, ArrowLeft } from 'lucide-react';\r\n\r\ninterface ChatHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n user: User;\r\n onBack?: () => void;\r\n onInfo?: () => void;\r\n}\r\n\r\nexport function ChatHeader({ user, onBack, onInfo, className, ...props }: ChatHeaderProps) {\r\n return (\r\n <div \r\n className={cn(\r\n \"flex h-16 items-center justify-between border-b border-gray-200 dark:border-white/10 bg-white/80 dark:bg-black/40 backdrop-blur px-4 sticky top-0 z-10\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n {onBack && (\r\n <button onClick={onBack} className=\"md:hidden p-2 -ml-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06]\">\r\n <ArrowLeft className=\"h-5 w-5 text-gray-600 dark:text-white/70\" />\r\n </button>\r\n )}\r\n \r\n <div className=\"relative cursor-pointer\" onClick={onInfo}>\r\n <Avatar src={user.avatar} alt={user.name} fallback={user.name[0]} />\r\n {user.status === 'online' && (\r\n <span className=\"absolute bottom-0 right-0 h-3 w-3 rounded-full bg-green-500 border-2 border-white dark:border-black\" />\r\n )}\r\n </div>\r\n \r\n <div className=\"cursor-pointer\" onClick={onInfo}>\r\n <h3 className=\"font-semibold text-gray-900 dark:text-white leading-none mb-1\">{user.name}</h3>\r\n <p className=\"text-xs text-gray-500 dark:text-white/50\">\r\n {user.status === 'online' ? 'Online' : `Last seen ${user.lastSeen?.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-1\">\r\n <button className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\">\r\n <Phone className=\"h-5 w-5\" />\r\n </button>\r\n <button className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\">\r\n <Video className=\"h-5 w-5\" />\r\n </button>\r\n <button \r\n onClick={onInfo}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n >\r\n <MoreVertical className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Slot } from '../../utils/Slot';\r\nimport { cn } from '../../utils/cn';\r\nimport { useInView } from '../../hooks/useInView';\r\n\r\nconst motionVariants = cva(\r\n 'transition-all duration-700 ease-out', \r\n {\r\n variants: {\r\n preset: {\r\n 'fade': 'opacity-0 translate-y-4',\r\n 'spring': 'opacity-0 scale-95 translate-y-4',\r\n 'slide-right': 'opacity-0 -translate-x-8',\r\n 'slide-left': 'opacity-0 translate-x-8',\r\n 'blur': 'opacity-0 blur-sm scale-105',\r\n '3d-flip': 'opacity-0 rotate-x-90',\r\n },\r\n visibleState: {\r\n 'fade': 'opacity-100 translate-y-0',\r\n 'spring': 'opacity-100 scale-100 translate-y-0 animate-enter-spring',\r\n 'slide-right': 'opacity-100 translate-x-0',\r\n 'slide-left': 'opacity-100 translate-x-0',\r\n 'blur': 'opacity-100 blur-0 scale-100',\r\n '3d-flip': 'opacity-100 rotate-x-0',\r\n }\r\n },\r\n defaultVariants: {\r\n preset: 'spring',\r\n },\r\n }\r\n);\r\n\r\nexport interface MotionProps extends React.HTMLAttributes<HTMLDivElement>, Omit<VariantProps<typeof motionVariants>, 'visibleState'> {\r\n asChild?: boolean;\r\n viewport?: boolean; // If true, animates only when entering the viewport\r\n visible?: boolean; // Manual control override\r\n delay?: number; // Delay in ms\r\n once?: boolean; // If true, animates only once\r\n}\r\n\r\nexport function Motion({ \r\n className, \r\n preset = 'spring', \r\n viewport = true, \r\n visible,\r\n delay = 0,\r\n once = true,\r\n asChild = false,\r\n children, \r\n style,\r\n ...props \r\n}: MotionProps) {\r\n const { ref, isInView, hasAnimated } = useInView({ threshold: 0.1, enabled: viewport && visible === undefined });\r\n \r\n // Determine if we should show the final state\r\n const internalShow = viewport ? (once ? hasAnimated : isInView) : true;\r\n const shouldShow = visible !== undefined ? visible : internalShow;\r\n\r\n // We manually construct the class string to ensure the correct preset is applied in the visible state\r\n // This is a bit of a hack because CVA doesn't support \"conditional variants\" based on external state easily\r\n // without defining a new variant like \"state: visible\".\r\n // But here we want to map 'preset' to 'visible' styles when shouldShow is true.\r\n \r\n // Let's simplify:\r\n // If shouldShow is true, we want the styles from `visible: [preset]`.\r\n // If shouldShow is false, we want the styles from `preset: [preset]`.\r\n \r\n // However, CVA `visible` variant keys match `preset` keys.\r\n // So we can just pass `visible: shouldShow ? preset : null`? No, that would remove the base styles.\r\n \r\n // Correct approach with the current CVA definition:\r\n // The `preset` variant defines the INITIAL state (hidden).\r\n // The `visible` variant defines the FINAL state (shown).\r\n // We need to apply `preset` ALWAYS (as base), and then override with `visible` when shown?\r\n // No, `preset` has opacity-0. If we keep it, we need `visible` to have opacity-100 and override it.\r\n // Tailwind classes override based on order in CSS, but here they are utility classes.\r\n // `opacity-100` usually overrides `opacity-0` if generated later, but `cn` merges them.\r\n \r\n // Let's try to be cleaner:\r\n // We will use the `preset` prop to get the initial state classes.\r\n // And we will manually append the visible classes if `shouldShow` is true.\r\n \r\n const initialClasses = motionVariants({ preset });\r\n const visibleClasses = shouldShow ? motionVariants({ visibleState: preset as any }) : '';\r\n \r\n // If visibleClasses is applied, we want it to win over initialClasses.\r\n // `cn` (tailwind-merge) handles this conflict resolution perfectly.\r\n \r\n const Comp = asChild ? Slot : 'div';\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(\r\n initialClasses,\r\n visibleClasses,\r\n className\r\n )}\r\n style={{ \r\n transitionDelay: `${delay}ms`,\r\n willChange: 'transform, opacity',\r\n ...style \r\n }}\r\n {...props}\r\n >\r\n {children}\r\n </Comp>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { Message } from './types';\r\nimport { Check, CheckCheck, MoreHorizontal, Reply, Trash2, Copy, Smile } from 'lucide-react';\r\nimport { Motion } from '../feedback/Motion';\r\nimport { \r\n DropdownMenu, \r\n DropdownMenuTrigger, \r\n DropdownMenuContent, \r\n DropdownMenuItem \r\n} from '../overlay/DropdownMenu';\r\nimport { Image } from '../data-display/Image';\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n isOwn: boolean;\r\n showAvatar?: boolean;\r\n showStatus?: boolean;\r\n className?: string;\r\n onReply?: (message: Message) => void;\r\n onReact?: (message: Message, emoji: string) => void;\r\n onDelete?: (message: Message) => void;\r\n}\r\n\r\nexport function MessageBubble({ \r\n message, \r\n isOwn, \r\n showAvatar, \r\n showStatus = true, \r\n className,\r\n onReply,\r\n onReact,\r\n onDelete\r\n}: MessageBubbleProps) {\r\n return (\r\n <Motion \r\n preset=\"spring\"\r\n className={cn(\r\n \"flex w-full gap-2 mb-1 group relative\",\r\n isOwn ? \"justify-end\" : \"justify-start\",\r\n className\r\n )}\r\n >\r\n {/* Actions Menu (Hover) */}\r\n <div className={cn(\r\n \"absolute top-2 opacity-0 group-hover:opacity-100 transition-opacity z-10\",\r\n isOwn ? \"left-0 -translate-x-full pr-2\" : \"right-0 translate-x-full pl-2\"\r\n )}>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger className=\"p-1 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-400\">\r\n <MoreHorizontal className=\"h-4 w-4\" />\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align={isOwn ? \"end\" : \"start\"}>\r\n <DropdownMenuItem onClick={() => onReply?.(message)}>\r\n <Reply className=\"h-4 w-4 mr-2\" /> Reply\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => navigator.clipboard.writeText(message.content)}>\r\n <Copy className=\"h-4 w-4 mr-2\" /> Copy\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onReact?.(message, '👍')}>\r\n <Smile className=\"h-4 w-4 mr-2\" /> React\r\n </DropdownMenuItem>\r\n {isOwn && (\r\n <DropdownMenuItem onClick={() => onDelete?.(message)} className=\"text-red-500\">\r\n <Trash2 className=\"h-4 w-4 mr-2\" /> Delete\r\n </DropdownMenuItem>\r\n )}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n\r\n <div className={cn(\r\n \"relative max-w-[70%] px-4 py-2 rounded-2xl shadow-sm transition-all\",\r\n isOwn \r\n ? \"bg-blue-600 text-white rounded-tr-sm\" \r\n : \"bg-white dark:bg-white/[0.06] text-gray-900 dark:text-white rounded-tl-sm border border-gray-200 dark:border-transparent\"\r\n )}>\r\n {/* Reply Context */}\r\n {message.replyToId && (\r\n <div className={cn(\r\n \"mb-2 rounded px-2 py-1 text-xs border-l-2 opacity-80\",\r\n isOwn ? \"bg-white/[0.06] border-white/50\" : \"bg-gray-100 dark:bg-black/20 border-blue-500\"\r\n )}>\r\n Replying to message...\r\n </div>\r\n )}\r\n\r\n {/* Attachments */}\r\n {message.attachments && message.attachments.length > 0 && (\r\n <div className=\"mb-2 space-y-2\">\r\n {message.attachments.map(att => (\r\n att.type === 'image' ? (\r\n <Image \r\n key={att.id} \r\n src={att.url} \r\n alt=\"Attachment\" \r\n className=\"rounded-2xl max-h-60 object-cover w-full\"\r\n />\r\n ) : (\r\n <div key={att.id} className=\"flex items-center gap-2 p-2 rounded bg-black/5 dark:bg-white/[0.06]\">\r\n <div className=\"h-8 w-8 bg-gray-200 dark:bg-white/20 rounded flex items-center justify-center text-xs font-bold\">\r\n FILE\r\n </div>\r\n <div className=\"text-xs truncate flex-1\">{att.name || 'File'}</div>\r\n </div>\r\n )\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Content */}\r\n <div className=\"text-sm whitespace-pre-wrap break-words leading-relaxed\">\r\n {message.content}\r\n </div>\r\n\r\n {/* Metadata */}\r\n <div className={cn(\r\n \"flex items-center justify-end gap-1 mt-1 select-none\",\r\n isOwn ? \"text-blue-100\" : \"text-gray-400 dark:text-white/40\"\r\n )}>\r\n <span className=\"text-[10px]\">\r\n {message.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\r\n </span>\r\n {isOwn && showStatus && (\r\n <span className=\"flex items-center\">\r\n {message.status === 'read' ? (\r\n <CheckCheck className=\"h-3 w-3 text-blue-200\" />\r\n ) : message.status === 'delivered' ? (\r\n <CheckCheck className=\"h-3 w-3 text-blue-200/50\" />\r\n ) : (\r\n <Check className=\"h-3 w-3 text-blue-200/50\" />\r\n )}\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Reactions */}\r\n {message.reactions && Object.keys(message.reactions).length > 0 && (\r\n <div className=\"absolute -bottom-2 right-4 flex gap-1\">\r\n {Object.entries(message.reactions).map(([emoji, users]) => (\r\n <div key={emoji} className=\"bg-white dark:bg-gray-800 shadow-sm border border-gray-100 dark:border-white/10 rounded-full px-1.5 py-0.5 text-[10px] flex items-center gap-1\">\r\n <span>{emoji}</span>\r\n <span className=\"text-gray-500\">{users.length}</span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </Motion>\r\n );\r\n}\r\n","import React, { useRef, useEffect, useState, useMemo } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { Message } from './types';\r\nimport { MessageBubble } from './MessageBubble';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\nimport { MessageSquare } from 'lucide-react';\r\n\r\ninterface MessageListProps extends React.HTMLAttributes<HTMLDivElement> {\r\n messages: Message[];\r\n currentUserId: string;\r\n onReply?: (message: Message) => void;\r\n onReact?: (message: Message, emoji: string) => void;\r\n onDelete?: (message: Message) => void;\r\n onLoadMore?: () => void;\r\n hasMore?: boolean;\r\n isLoadingMore?: boolean;\r\n}\r\n\r\nexport function MessageList({ \r\n messages, \r\n currentUserId, \r\n className, \r\n onReply,\r\n onReact,\r\n onDelete,\r\n onLoadMore,\r\n hasMore,\r\n isLoadingMore,\r\n ...props \r\n}: MessageListProps) {\r\n const bottomRef = useRef<HTMLDivElement>(null);\r\n const [shouldAutoScroll, setShouldAutoScroll] = useState(true);\r\n\r\n useEffect(() => {\r\n if (shouldAutoScroll) {\r\n bottomRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }, [messages, shouldAutoScroll]);\r\n\r\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\r\n const target = e.currentTarget;\r\n const isAtBottom = Math.abs(target.scrollHeight - target.clientHeight - target.scrollTop) < 50;\r\n setShouldAutoScroll(isAtBottom);\r\n\r\n if (target.scrollTop === 0 && hasMore && !isLoadingMore && onLoadMore) {\r\n onLoadMore();\r\n }\r\n };\r\n\r\n // Group messages by date\r\n const groupedMessages = useMemo(() => {\r\n return messages.reduce((groups, message) => {\r\n const date = message.timestamp.toLocaleDateString();\r\n if (!groups[date]) {\r\n groups[date] = [];\r\n }\r\n groups[date].push(message);\r\n return groups;\r\n }, {} as Record<string, Message[]>);\r\n }, [messages]);\r\n\r\n if (messages.length === 0 && !isLoadingMore) {\r\n return (\r\n <div className={cn(\"flex-1 flex items-center justify-center p-8 text-center text-gray-500 dark:text-white/40\", className)} {...props}>\r\n <div className=\"max-w-sm space-y-4\">\r\n <div className=\"w-24 h-24 bg-blue-500/10 dark:bg-white/[0.03] rounded-full flex items-center justify-center mx-auto mb-6 animate-pulse\">\r\n <MessageSquare className=\"h-12 w-12 text-blue-500\" />\r\n </div>\r\n <h3 className=\"text-xl font-medium text-gray-900 dark:text-white\">No messages yet</h3>\r\n <p>Start the conversation by sending a message below.</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <ScrollArea \r\n className={cn(\"flex-1 p-4\", className)} \r\n onScroll={handleScroll}\r\n role=\"log\"\r\n aria-live=\"polite\"\r\n aria-relevant=\"additions\"\r\n {...props}\r\n >\r\n <div className=\"space-y-6 pb-4\">\r\n {hasMore && (\r\n <div className=\"flex justify-center py-4\">\r\n {isLoadingMore ? (\r\n <div className=\"flex items-center gap-2 text-xs text-white/40\">\r\n <div className=\"w-4 h-4 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin\" />\r\n Loading older messages...\r\n </div>\r\n ) : (\r\n <button \r\n onClick={onLoadMore}\r\n className=\"text-xs text-cyan-500/60 hover:text-cyan-500 transition-colors\"\r\n >\r\n Load older messages\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {Object.entries(groupedMessages).map(([date, msgs]) => (\r\n <div key={date} className=\"space-y-4\">\r\n <div className=\"flex justify-center sticky top-0 z-10 py-2\">\r\n <span className=\"px-3 py-1 rounded-full bg-gray-100/80 dark:bg-white/[0.03] text-[10px] uppercase tracking-wider font-bold text-gray-500 dark:text-white/40 backdrop-blur-md border border-white/5 shadow-sm\">\r\n {date}\r\n </span>\r\n </div>\r\n \r\n <div className=\"space-y-1\">\r\n {msgs.map((msg, index) => {\r\n const isOwn = msg.senderId === currentUserId;\r\n const prevMsg = msgs[index - 1];\r\n const nextMsg = msgs[index + 1];\r\n \r\n // Logic to group bubbles visually\r\n const isFirstInGroup = !prevMsg || prevMsg.senderId !== msg.senderId;\r\n const isLastInGroup = !nextMsg || nextMsg.senderId !== msg.senderId;\r\n\r\n return (\r\n <MessageBubble \r\n key={msg.id} \r\n message={msg} \r\n isOwn={isOwn}\r\n className={cn(\r\n !isLastInGroup && \"mb-0.5\"\r\n )}\r\n onReply={onReply}\r\n onReact={onReact}\r\n onDelete={onDelete}\r\n />\r\n );\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n <div ref={bottomRef} className=\"h-px\" />\r\n </div>\r\n </ScrollArea>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect, useMemo } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Send, Paperclip, Smile, Mic, Image as ImageIcon, AtSign } from 'lucide-react';\r\nimport { Button } from '../button/Button';\r\nimport type { User } from './types';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Avatar } from '../data-display/Avatar';\r\n\r\ninterface ChatInputProps extends React.HTMLAttributes<HTMLDivElement> {\r\n onSend?: (content: string) => void;\r\n onAttach?: () => void;\r\n placeholder?: string;\r\n users?: User[];\r\n}\r\n\r\nexport function ChatInput({ \r\n onSend, \r\n onAttach, \r\n placeholder = \"Type a message...\", \r\n users = [],\r\n className, \r\n ...props \r\n}: ChatInputProps) {\r\n const [content, setContent] = useState(\"\");\r\n const [isUploading, setIsUploading] = useState(false);\r\n const [mentionSearch, setMentionSearch] = useState<string | null>(null);\r\n const [mentionIndex, setMentionIndex] = useState(0);\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n const filteredUsers = useMemo(() => {\r\n if (mentionSearch === null) return [];\r\n return users.filter(u => \r\n u.name.toLowerCase().includes(mentionSearch.toLowerCase())\r\n ).slice(0, 5);\r\n }, [users, mentionSearch]);\r\n\r\n const handleInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n const value = e.target.value;\r\n setContent(value);\r\n \r\n // Mention logic\r\n const lastChar = value[e.target.selectionStart - 1];\r\n const textBeforeCursor = value.slice(0, e.target.selectionStart);\r\n const mentionMatch = textBeforeCursor.match(/@(\\w*)$/);\r\n\r\n if (mentionMatch) {\r\n setMentionSearch(mentionMatch[1] || \"\");\r\n setMentionIndex(0);\r\n } else {\r\n setMentionSearch(null);\r\n }\r\n\r\n // Auto-resize\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n textareaRef.current.style.height = `${Math.min(textareaRef.current.scrollHeight, 120)}px`;\r\n }\r\n };\r\n\r\n const insertMention = (user: User) => {\r\n if (!textareaRef.current) return;\r\n const start = textareaRef.current.selectionStart;\r\n const textBefore = content.slice(0, start).replace(/@\\w*$/, `@${user.name} `);\r\n const textAfter = content.slice(start);\r\n setContent(textBefore + textAfter);\r\n setMentionSearch(null);\r\n textareaRef.current.focus();\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (mentionSearch !== null && filteredUsers.length > 0) {\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n setMentionIndex(prev => (prev + 1) % filteredUsers.length);\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n setMentionIndex(prev => (prev - 1 + filteredUsers.length) % filteredUsers.length);\r\n } else if (e.key === 'Enter' || e.key === 'Tab') {\r\n e.preventDefault();\r\n insertMention(filteredUsers[mentionIndex]!);\r\n } else if (e.key === 'Escape') {\r\n setMentionSearch(null);\r\n }\r\n return;\r\n }\r\n\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n handleSend();\r\n }\r\n };\r\n\r\n const handleSend = () => {\r\n if (!content.trim()) return;\r\n onSend?.(content);\r\n setContent(\"\");\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n }\r\n };\r\n\r\n const handleAttachClick = () => {\r\n setIsUploading(true);\r\n // Simulate upload\r\n setTimeout(() => {\r\n setIsUploading(false);\r\n onAttach?.();\r\n }, 1000);\r\n };\r\n\r\n return (\r\n <div className={cn(\"relative p-4 border-t border-white/10 bg-white/[0.02]\", className)} {...props}>\r\n {/* Mentions Popover */}\r\n {mentionSearch !== null && filteredUsers.length > 0 && (\r\n <Surface className=\"absolute bottom-full left-4 mb-2 w-64 overflow-hidden shadow-2xl animate-in fade-in slide-in-from-bottom-2\">\r\n <div className=\"p-2 border-b border-white/10 bg-white/[0.02]\">\r\n <span className=\"text-[10px] font-bold uppercase tracking-wider text-white/40 px-2\">\r\n Mention User\r\n </span>\r\n </div>\r\n <div className=\"max-h-48 overflow-y-auto p-1\">\r\n {filteredUsers.map((user: User, idx: number) => (\r\n <button\r\n key={user.id}\r\n onClick={() => insertMention(user)}\r\n className={cn(\r\n \"w-full flex items-center gap-3 px-3 py-2 rounded-2xl transition-colors text-left\",\r\n idx === mentionIndex ? \"bg-white/[0.06]\" : \"hover:bg-white/[0.03]\"\r\n )}\r\n >\r\n <Avatar src={user.avatar} alt={user.name} size=\"sm\" />\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"text-sm font-medium text-white truncate\">{user.name}</div>\r\n <div className=\"text-xs text-white/40 truncate\">@{user.name.toLowerCase().replace(/\\s/g, '')}</div>\r\n </div>\r\n {idx === mentionIndex && (\r\n <div className=\"text-[10px] bg-white/[0.06] px-1.5 py-0.5 rounded text-white/60\">Enter</div>\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n </Surface>\r\n )}\r\n\r\n <div className=\"flex items-end gap-2 max-w-4xl mx-auto\">\r\n <div className=\"flex gap-1 mb-1\">\r\n <Button variant=\"ghost\" size=\"icon\" className=\"h-9 w-9 rounded-2xl text-white/40 hover:text-white\" onClick={handleAttachClick} disabled={isUploading}>\r\n <Paperclip className={cn(\"w-5 h-5\", isUploading && \"animate-pulse text-blue-500\")} />\r\n </Button>\r\n </div>\r\n \r\n <div className=\"flex-1 relative group\">\r\n <textarea\r\n ref={textareaRef}\r\n value={content}\r\n onChange={handleInput}\r\n onKeyDown={handleKeyDown}\r\n placeholder={isUploading ? \"Uploading...\" : placeholder}\r\n rows={1}\r\n className=\"w-full bg-white/[0.03] border border-white/10 rounded-2xl px-4 py-2.5 text-sm text-white placeholder:text-white/20 focus:outline-none focus:ring-2 focus:ring-white/10 resize-none transition-all min-h-[44px]\"\r\n />\r\n <div className=\"absolute right-3 bottom-2.5 flex items-center gap-2 opacity-0 group-focus-within:opacity-100 transition-opacity\">\r\n <button className=\"text-white/20 hover:text-white/60 transition-colors\">\r\n <Smile className=\"w-4 h-4\" />\r\n </button>\r\n <button className=\"text-white/20 hover:text-white/60 transition-colors\">\r\n <AtSign className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex gap-2 mb-1\">\r\n {content.trim() ? (\r\n <Button \r\n onClick={handleSend}\r\n className=\"h-9 w-9 rounded-2xl bg-white text-black hover:bg-white/90 p-0\"\r\n >\r\n <Send className=\"w-4 h-4\" />\r\n </Button>\r\n ) : (\r\n <Button variant=\"ghost\" size=\"icon\" className=\"h-9 w-9 rounded-2xl text-white/40 hover:text-white\">\r\n <Mic className=\"w-5 h-5\" />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst separatorVariants = cva(\r\n \"shrink-0 bg-gray-200 dark:bg-white/[0.03]\",\r\n {\r\n variants: {\r\n orientation: {\r\n horizontal: \"h-[1px] w-full\",\r\n vertical: \"h-full w-[1px]\",\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"horizontal\",\r\n },\r\n }\r\n);\r\n\r\nexport interface SeparatorProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof separatorVariants> {\r\n orientation?: \"horizontal\" | \"vertical\";\r\n decorative?: boolean;\r\n}\r\n\r\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\r\n (\r\n { className, orientation = \"horizontal\", decorative = true, ...props },\r\n ref\r\n ) => (\r\n <div\r\n ref={ref}\r\n role={decorative ? \"none\" : \"separator\"}\r\n aria-orientation={decorative ? undefined : orientation}\r\n className={cn(separatorVariants({ orientation, className }))}\r\n {...props}\r\n />\r\n )\r\n);\r\nSeparator.displayName = \"Separator\";\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { User } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { Bell, Ban, Trash2, Image, FileText, Link as LinkIcon, X } from 'lucide-react';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\nimport { Separator } from '../data-display/Separator';\r\nimport { Switch } from '../form/Switch';\r\n\r\ninterface ChatProfileProps extends React.HTMLAttributes<HTMLDivElement> {\r\n user: User;\r\n onClose?: () => void;\r\n}\r\n\r\nexport function ChatProfile({ user, onClose, className, ...props }: ChatProfileProps) {\r\n return (\r\n <div className={cn(\"w-80 border-l border-gray-200 dark:border-white/10 bg-white dark:bg-black/20 flex flex-col\", className)} {...props}>\r\n <div className=\"h-16 flex items-center px-4 border-b border-gray-200 dark:border-white/10\">\r\n <button onClick={onClose} className=\"p-2 -ml-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06]\">\r\n <X className=\"h-5 w-5 text-gray-500\" />\r\n </button>\r\n <span className=\"ml-2 font-semibold text-gray-900 dark:text-white\">Contact Info</span>\r\n </div>\r\n\r\n <ScrollArea className=\"flex-1\">\r\n <div className=\"p-6 flex flex-col items-center text-center\">\r\n <Avatar src={user.avatar} alt={user.name} fallback={user.name[0]} className=\"h-24 w-24 mb-4 text-2xl\" />\r\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">{user.name}</h2>\r\n <p className=\"text-sm text-gray-500 dark:text-white/50 mt-1\">{user.phone || '+1 (555) 000-0000'}</p>\r\n \r\n <div className=\"mt-6 w-full\">\r\n <p className=\"text-sm text-gray-500 dark:text-white/50 mb-1 text-left\">About</p>\r\n <p className=\"text-sm text-gray-900 dark:text-white text-left\">{user.bio || \"Hey there! I am using Pixon Chat.\"}</p>\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n\r\n <div className=\"p-4 space-y-4\">\r\n <h3 className=\"text-xs font-semibold text-gray-500 dark:text-white/40 uppercase tracking-wider\">Media & Docs</h3>\r\n <div className=\"grid grid-cols-3 gap-2\">\r\n {[1, 2, 3, 4, 5, 6].map((i) => (\r\n <div key={i} className=\"aspect-square rounded-2xl bg-gray-100 dark:bg-white/[0.03] overflow-hidden relative group cursor-pointer\">\r\n <div className=\"absolute inset-0 flex items-center justify-center text-gray-400\">\r\n <Image className=\"h-6 w-6\" />\r\n </div>\r\n <div className=\"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity\" />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n\r\n <div className=\"p-4 space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-3 text-gray-700 dark:text-white/80\">\r\n <Bell className=\"h-5 w-5\" />\r\n <span className=\"text-sm font-medium\">Mute Notifications</span>\r\n </div>\r\n <Switch />\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n\r\n <div className=\"p-4 space-y-2\">\r\n <button className=\"w-full flex items-center gap-3 p-3 rounded-2xl hover:bg-red-50 dark:hover:bg-red-500/10 text-red-600 dark:text-red-400 transition-colors text-sm font-medium\">\r\n <Ban className=\"h-5 w-5\" />\r\n Block {user.name}\r\n </button>\r\n <button className=\"w-full flex items-center gap-3 p-3 rounded-2xl hover:bg-red-50 dark:hover:bg-red-500/10 text-red-600 dark:text-red-400 transition-colors text-sm font-medium\">\r\n <Trash2 className=\"h-5 w-5\" />\r\n Delete Chat\r\n </button>\r\n </div>\r\n </ScrollArea>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { useInView } from '../../hooks/useInView';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface MotionGroupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n stagger?: number; // Delay between items in ms\r\n delay?: number; // Initial delay in ms\r\n}\r\n\r\nexport function MotionGroup({ \r\n children, \r\n stagger = 100, \r\n delay = 0, \r\n className, \r\n ...props \r\n}: MotionGroupProps) {\r\n const { ref, hasAnimated } = useInView({ threshold: 0.1 });\r\n\r\n return (\r\n <div ref={ref} className={cn('relative', className)} {...props}>\r\n {React.Children.map(children, (child, index) => {\r\n if (React.isValidElement(child)) {\r\n return React.cloneElement(child as React.ReactElement<any>, {\r\n // Force child to wait for group\r\n visible: hasAnimated,\r\n // Disable child's internal observer to save resources\r\n viewport: false,\r\n // Calculate stagger delay\r\n delay: delay + (index * stagger),\r\n });\r\n }\r\n return child;\r\n })}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { useInView } from '../../hooks/useInView';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface TextMotionProps extends React.HTMLAttributes<HTMLDivElement> {\r\n text: string;\r\n type?: 'char' | 'word';\r\n stagger?: number;\r\n delay?: number;\r\n}\r\n\r\nexport function TextMotion({ \r\n text, \r\n type = 'char', \r\n stagger = 30, \r\n delay = 0,\r\n className,\r\n ...props \r\n}: TextMotionProps) {\r\n const { ref, hasAnimated } = useInView({ threshold: 0.2 });\r\n \r\n const items = type === 'char' ? text.split('') : text.split(' ');\r\n\r\n return (\r\n <div \r\n ref={ref} \r\n className={cn('flex flex-wrap', className)} \r\n aria-label={text}\r\n {...props}\r\n >\r\n {items.map((item, i) => (\r\n <span\r\n key={i}\r\n className={cn(\r\n 'inline-block whitespace-pre transition-all duration-500 ease-out will-change-transform',\r\n hasAnimated \r\n ? 'opacity-100 translate-y-0 blur-0' \r\n : 'opacity-0 translate-y-4 blur-sm'\r\n )}\r\n style={{ \r\n transitionDelay: `${delay + (i * stagger)}ms` \r\n }}\r\n >\r\n {item}{type === 'word' && i !== items.length - 1 ? ' ' : ''}\r\n </span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ParallaxProps extends React.HTMLAttributes<HTMLDivElement> {\r\n speed?: number; // -1 to 1. Positive = moves slower (depth), Negative = moves faster.\r\n direction?: 'vertical' | 'horizontal';\r\n}\r\n\r\nexport function Parallax({ \r\n children, \r\n speed = 0.1, \r\n direction = 'vertical',\r\n className,\r\n ...props \r\n}: ParallaxProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const element = ref.current;\r\n if (!element) return;\r\n\r\n const handleScroll = () => {\r\n const rect = element.getBoundingClientRect();\r\n const windowHeight = window.innerHeight;\r\n \r\n // Optimization: Only animate if roughly in view\r\n if (rect.top > windowHeight || rect.bottom < 0) return;\r\n\r\n // Calculate distance from center of viewport\r\n // 0 = center, -val = above center, +val = below center\r\n const centerOffset = (windowHeight / 2) - (rect.top + rect.height / 2);\r\n \r\n const translate = centerOffset * speed;\r\n\r\n if (direction === 'vertical') {\r\n element.style.transform = `translate3d(0, ${translate}px, 0)`;\r\n } else {\r\n element.style.transform = `translate3d(${translate}px, 0, 0)`;\r\n }\r\n };\r\n\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n handleScroll(); // Initial calculation\r\n\r\n return () => window.removeEventListener('scroll', handleScroll);\r\n }, [speed, direction]);\r\n\r\n return (\r\n <div \r\n ref={ref} \r\n className={cn('will-change-transform', className)} \r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { useRef, useState, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface MagneticProps {\r\n children: React.ReactElement;\r\n strength?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Magnetic({ children, strength = 0.5, className }: MagneticProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const el = ref.current;\r\n if (!el) return;\r\n \r\n const { clientX, clientY } = e;\r\n const { left, top, width, height } = el.getBoundingClientRect();\r\n \r\n const centerX = left + width / 2;\r\n const centerY = top + height / 2;\r\n \r\n const distanceX = clientX - centerX;\r\n const distanceY = clientY - centerY;\r\n \r\n // Only apply if mouse is relatively close\r\n const threshold = Math.max(width, height) * 1.5;\r\n if (Math.abs(distanceX) < threshold && Math.abs(distanceY) < threshold) {\r\n el.style.setProperty('--mag-x', `${distanceX * strength}px`);\r\n el.style.setProperty('--mag-y', `${distanceY * strength}px`);\r\n } else {\r\n el.style.setProperty('--mag-x', '0px');\r\n el.style.setProperty('--mag-y', '0px');\r\n }\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n const el = ref.current;\r\n if (el) {\r\n el.style.setProperty('--mag-x', '0px');\r\n el.style.setProperty('--mag-y', '0px');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('mousemove', handleMouseMove);\r\n return () => window.removeEventListener('mousemove', handleMouseMove);\r\n }, [strength]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"inline-block transition-transform duration-300 ease-out will-change-transform\", className)}\r\n onMouseLeave={handleMouseLeave}\r\n style={{\r\n transform: `translate3d(var(--mag-x, 0px), var(--mag-y, 0px), 0)`,\r\n }}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { useInView } from '../../hooks/useInView';\r\n\r\nexport interface NumberTickerProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n value: number;\r\n duration?: number;\r\n delay?: number;\r\n decimalPlaces?: number;\r\n}\r\n\r\nexport function NumberTicker({\r\n value,\r\n duration = 2000,\r\n delay = 0,\r\n decimalPlaces = 0,\r\n className,\r\n ...props\r\n}: NumberTickerProps) {\r\n const [displayValue, setDisplayValue] = useState(0);\r\n const { ref, hasAnimated } = useInView({ threshold: 0.1 });\r\n const startTimeRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n if (!hasAnimated) return;\r\n\r\n const animate = (timestamp: number) => {\r\n if (!startTimeRef.current) startTimeRef.current = timestamp;\r\n const progress = Math.min((timestamp - startTimeRef.current - delay) / duration, 1);\r\n \r\n if (progress >= 0) {\r\n const current = progress * value;\r\n setDisplayValue(current);\r\n }\r\n\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n const timeout = setTimeout(() => {\r\n requestAnimationFrame(animate);\r\n }, delay);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [hasAnimated, value, duration, delay]);\r\n\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(\"tabular-nums tracking-tighter\", className)}\r\n {...props}\r\n >\r\n {displayValue.toFixed(decimalPlaces)}\r\n </span>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronDown } from 'lucide-react';\r\n\r\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\r\n title?: React.ReactNode;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n disabled?: boolean;\r\n children: React.ReactNode;\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function Collapse({\r\n title,\r\n open: controlledOpen,\r\n defaultOpen = false,\r\n onOpenChange,\r\n disabled = false,\r\n children,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n ...props\r\n}: CollapseProps) {\r\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\r\n const isControlled = controlledOpen !== undefined;\r\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\r\n\r\n const handleToggle = () => {\r\n if (disabled) return;\r\n const newState = !isOpen;\r\n if (!isControlled) {\r\n setUncontrolledOpen(newState);\r\n }\r\n onOpenChange?.(newState);\r\n };\r\n\r\n return (\r\n <div \r\n className={cn(\r\n 'w-full overflow-hidden rounded-2xl border border-gray-200 bg-white dark:border-white/10 dark:bg-white/[0.02]',\r\n className\r\n )} \r\n {...props}\r\n >\r\n {title && (\r\n <button\r\n type=\"button\"\r\n onClick={handleToggle}\r\n disabled={disabled}\r\n className={cn(\r\n 'flex w-full items-center justify-between px-4 py-3 text-sm font-medium transition-colors hover:bg-gray-50 dark:hover:bg-white/[0.02]',\r\n disabled && 'cursor-not-allowed opacity-50',\r\n triggerClassName\r\n )}\r\n >\r\n {title}\r\n <ChevronDown\r\n className={cn(\r\n 'h-4 w-4 shrink-0 text-gray-500 transition-transform duration-200 dark:text-gray-400',\r\n isOpen && 'rotate-180'\r\n )}\r\n />\r\n </button>\r\n )}\r\n \r\n <div\r\n className={cn(\r\n 'grid transition-all duration-300 ease-in-out',\r\n isOpen ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\r\n )}\r\n >\r\n <div className=\"overflow-hidden\">\r\n <div className={cn('px-4 pb-4 pt-0', title && 'pt-1', contentClassName)}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Loader2 } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface PageLoaderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n variant?: 'spinner' | 'bar' | 'dots' | 'logo' | 'glass';\r\n text?: string;\r\n fullscreen?: boolean;\r\n}\r\n\r\nexport function PageLoader({\r\n variant = 'spinner',\r\n text,\r\n fullscreen = true,\r\n className,\r\n ...props\r\n}: PageLoaderProps) {\r\n const baseStyles = fullscreen\r\n ? 'fixed inset-0 z-50 flex items-center justify-center bg-white/80 dark:bg-black/80 backdrop-blur-sm'\r\n : 'flex items-center justify-center p-8 w-full h-full min-h-[200px]';\r\n\r\n if (variant === 'bar') {\r\n return (\r\n <div className={cn('fixed top-0 left-0 right-0 z-50 h-1 bg-transparent', className)} {...props}>\r\n <div className=\"h-full bg-blue-500 animate-indeterminate-progress origin-left\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (variant === 'dots') {\r\n return (\r\n <div className={cn(baseStyles, className)} {...props}>\r\n <div className=\"flex space-x-2\">\r\n <div className=\"h-3 w-3 rounded-full bg-blue-500 animate-bounce [animation-delay:-0.3s]\" />\r\n <div className=\"h-3 w-3 rounded-full bg-blue-500 animate-bounce [animation-delay:-0.15s]\" />\r\n <div className=\"h-3 w-3 rounded-full bg-blue-500 animate-bounce\" />\r\n </div>\r\n {text && <span className=\"ml-4 text-sm font-medium text-gray-500 dark:text-white/70\">{text}</span>}\r\n </div>\r\n );\r\n }\r\n\r\n if (variant === 'logo') {\r\n return (\r\n <div className={cn(baseStyles, className)} {...props}>\r\n <div className=\"flex flex-col items-center gap-4\">\r\n <div className=\"relative flex h-16 w-16 items-center justify-center rounded-full bg-white dark:bg-white/[0.06] shadow-lg ring-1 ring-black/5\">\r\n <div className=\"absolute inset-0 rounded-full animate-ping bg-blue-500/20\" />\r\n <div className=\"h-8 w-8 rounded bg-blue-500\" />\r\n </div>\r\n {text && <span className=\"text-sm font-medium text-gray-500 dark:text-white/70 animate-pulse\">{text}</span>}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (variant === 'glass') {\r\n return (\r\n <div className={cn(baseStyles, 'bg-white/30 dark:bg-black/30 backdrop-blur-md', className)} {...props}>\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-white\" />\r\n {text && <span className=\"text-sm font-medium text-white tracking-wider\">{text}</span>}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Default: spinner\r\n return (\r\n <div className={cn(baseStyles, className)} {...props}>\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-blue-500\" />\r\n {text && <span className=\"text-sm font-medium text-gray-500 dark:text-white/70\">{text}</span>}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface PageTransitionProps extends React.HTMLAttributes<HTMLDivElement> {\r\n preset?: 'fade' | 'slide-up' | 'scale' | 'blur' | 'none';\r\n duration?: number;\r\n useViewTransition?: boolean;\r\n}\r\n\r\nexport function PageTransition({\r\n preset = 'fade',\r\n duration = 300,\r\n useViewTransition = false,\r\n className,\r\n children,\r\n ...props\r\n}: PageTransitionProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n if (useViewTransition && (document as any).startViewTransition) {\r\n (document as any).startViewTransition(() => {\r\n setIsVisible(true);\r\n });\r\n } else {\r\n const timer = requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n });\r\n return () => cancelAnimationFrame(timer);\r\n }\r\n }, [useViewTransition]);\r\n\r\n const presets = {\r\n fade: {\r\n initial: 'opacity-0',\r\n animate: 'opacity-100',\r\n },\r\n 'slide-up': {\r\n initial: 'opacity-0 translate-y-8',\r\n animate: 'opacity-100 translate-y-0',\r\n },\r\n scale: {\r\n initial: 'opacity-0 scale-95',\r\n animate: 'opacity-100 scale-100',\r\n },\r\n blur: {\r\n initial: 'opacity-0 blur-sm',\r\n animate: 'opacity-100 blur-0',\r\n },\r\n none: {\r\n initial: '',\r\n animate: '',\r\n }\r\n };\r\n\r\n const currentPreset = presets[preset];\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'transition-all ease-out',\r\n isVisible ? currentPreset.animate : currentPreset.initial,\r\n className\r\n )}\r\n style={{ \r\n transitionDuration: `${duration}ms`,\r\n viewTransitionName: useViewTransition ? 'page-content' : undefined\r\n } as any}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/components/button/PrimaryButton.tsx","../src/utils/Slot.tsx","../src/components/button/Button.tsx","../src/components/button/GlowButton.tsx","../src/components/card/MetricCard.tsx","../src/primitives/Surface.tsx","../src/components/card/Card.tsx","../src/components/typography/Text.tsx","../src/components/typography/Heading.tsx","../src/components/typography/TextGradient.tsx","../src/components/typography/ShinyText.tsx","../src/hooks/useInView.ts","../src/components/feedback/Reveal.tsx","../src/components/typography/HeroText.tsx","../src/components/typography/LetterPullup.tsx","../src/components/form/Label.tsx","../src/components/form/TextInput.tsx","../src/components/form/Checkbox.tsx","../src/components/form/Switch.tsx","../src/components/form/Select.tsx","../src/hooks/useFloating.ts","../src/components/overlay/Popover.tsx","../src/components/form/Combobox.tsx","../src/components/form/Slider.tsx","../src/components/data-display/Calendar.tsx","../src/components/form/DatePicker.tsx","../src/components/data-display/ScrollArea.tsx","../src/components/form/DateTimePicker.tsx","../src/components/form/Textarea.tsx","../src/components/form/PasswordInput.tsx","../src/primitives/Badge.tsx","../src/components/form/TagInput.tsx","../src/components/form/ColorPicker.tsx","../src/components/form/RadioGroup.tsx","../src/components/form/Form.tsx","../src/components/form/FileDropzone.tsx","../src/components/form/OTPInput.tsx","../src/components/form/NumberInput.tsx","../src/components/form/ToggleGroup.tsx","../src/components/feedback/Toast.tsx","../src/components/feedback/ToastProvider.tsx","../src/components/feedback/Alert.tsx","../src/components/feedback/Progress.tsx","../src/components/feedback/EmptyState.tsx","../src/components/feedback/Skeleton.tsx","../src/components/feedback/Rating.tsx","../src/components/feedback/Motion.tsx","../src/components/feedback/MotionGroup.tsx","../src/components/feedback/TextMotion.tsx","../src/components/feedback/Parallax.tsx","../src/components/feedback/Magnetic.tsx","../src/components/feedback/NumberTicker.tsx","../src/components/feedback/PageLoader.tsx","../src/components/feedback/PageTransition.tsx","../src/components/data-display/Avatar.tsx","../src/components/data-display/Accordion.tsx","../src/components/data-display/Table.tsx","../src/components/data-display/DataTable.tsx","../src/components/data-display/Image.tsx","../src/components/data-display/UserPreview.tsx","../src/components/data-display/Timeline.tsx","../src/components/data-display/Tree.tsx","../src/components/data-display/kanban/KanbanHeader.tsx","../src/components/data-display/kanban/components/ColumnLimit.tsx","../src/components/data-display/kanban/KanbanCard.tsx","../src/components/data-display/kanban/KanbanColumn.tsx","../src/components/data-display/kanban/KanbanListView.tsx","../src/components/data-display/kanban/KanbanTimelineView.tsx","../src/components/data-display/kanban/KanbanTableView.tsx","../src/components/data-display/kanban/KanbanCalendarView.tsx","../src/components/overlay/Command.tsx","../src/components/data-display/kanban/KanbanFilterBar.tsx","../src/components/overlay/Modal.tsx","../src/components/data-display/kanban/components/Checklist.tsx","../src/components/data-display/kanban/components/TaskComments.tsx","../src/components/data-display/kanban/components/TaskAttachments.tsx","../src/components/data-display/kanban/components/LabelPicker.tsx","../src/components/data-display/kanban/components/AssigneePicker.tsx","../src/components/data-display/kanban/components/DueDatePicker.tsx","../src/components/data-display/kanban/components/TimeTracker.tsx","../src/components/data-display/kanban/KanbanTaskModal.tsx","../src/components/data-display/kanban/KanbanSwimlane.tsx","../src/components/data-display/kanban/useKanbanFilters.ts","../src/components/data-display/kanban/useKanbanUndo.ts","../src/components/data-display/kanban/useKanbanKeyboard.ts","../src/components/data-display/kanban/useKanbanDragAndDrop.ts","../src/components/data-display/kanban/KanbanBoard.tsx","../src/components/data-display/kanban/KanbanQuickAdd.tsx","../src/components/data-display/kanban/useKanbanSync.ts","../src/components/data-display/kanban/useKanbanHistory.ts","../src/components/data-display/kanban/components/SubtaskList.tsx","../src/components/data-display/kanban/components/TaskActivity.tsx","../src/components/data-display/Terminal.tsx","../src/components/data-display/Marquee.tsx","../src/components/data-display/StatusDot.tsx","../src/components/data-display/Separator.tsx","../src/components/data-display/Collapse.tsx","../src/components/data-display/chart/Chart.tsx","../src/components/data-display/chart/BarChart.tsx","../src/components/data-display/chart/AreaChart.tsx","../src/components/data-display/chart/LineChart.tsx","../src/components/data-display/chart/PieChart.tsx","../src/components/data-display/chart/RadarChart.tsx","../src/components/data-display/chart/Sparkline.tsx","../src/components/data-display/chart/YAxis.tsx","../src/components/navigation/Tabs.tsx","../src/components/navigation/Sidebar.tsx","../src/components/navigation/Navbar.tsx","../src/components/overlay/DropdownMenu.tsx","../src/components/navigation/UserMenu.tsx","../src/components/navigation/Breadcrumb.tsx","../src/components/navigation/SkipToContent.tsx","../src/components/navigation/Pagination.tsx","../src/components/navigation/Stepper.tsx","../src/components/overlay/ConfirmDialog.tsx","../src/components/overlay/Dialog.tsx","../src/components/overlay/Drawer.tsx","../src/components/overlay/Tooltip.tsx","../src/components/layout/Container.tsx","../src/components/layout/Stack.tsx","../src/components/layout/Grid.tsx","../src/components/layout/Background.tsx","../src/components/layout/Spotlight.tsx","../src/components/ai/AIPromptInput.tsx","../src/components/ai/AIResponse.tsx","../src/components/chat/ChatLayout.tsx","../src/components/chat/TypingIndicator.tsx","../src/components/chat/ChatSidebar.tsx","../src/components/chat/ChatHeader.tsx","../src/components/chat/AudioPlayer.tsx","../src/components/chat/ReadReceipt.tsx","../src/components/chat/LinkPreview.tsx","../src/components/chat/MessageBubble.tsx","../src/components/chat/MessageList.tsx","../src/components/chat/ChatInput.tsx","../src/components/chat/ChatProfile.tsx","../src/components/chat/ReplyPreview.tsx","../src/components/chat/ChatBanner.tsx","../src/components/chat/DateSeparator.tsx","../src/components/chat/OnlineIndicator.tsx","../src/components/chat/SystemMessage.tsx","../src/components/chat/GroupHeader.tsx","../src/components/chat/MentionList.tsx","../src/components/chat/EmojiPicker.tsx","../src/hooks/useVoiceRecorder.ts","../src/components/chat/VoiceRecorder.tsx","../src/components/chat/MessageSearch.tsx","../src/hooks/useScroll.ts","../src/primitives/ScrollProgress.tsx","../src/primitives/Divider.tsx","../src/primitives/Kbd.tsx","../src/theme/ThemeProvider.tsx","../src/theme/ThemeToggle.tsx","../src/hooks/useAsync.ts","../src/hooks/useChat.ts","../src/hooks/useChatMessages.ts","../src/hooks/useChatSearch.ts","../src/hooks/useClickOutside.ts","../src/hooks/useClipboard.ts","../src/hooks/useDebounce.ts","../src/hooks/useDrag.ts","../src/hooks/useElementScroll.ts","../src/hooks/useFlip.ts","../src/hooks/useForm.ts","../src/hooks/useHistory.ts","../src/hooks/useIdle.ts","../src/hooks/useInfiniteScroll.ts","../src/hooks/useIntersection.ts","../src/hooks/useKanban.ts","../src/hooks/useKeyboardShortcuts.ts","../src/hooks/useLifecycle.ts","../src/hooks/useLocalStorage.ts","../src/hooks/useMousePosition.ts","../src/hooks/useOrientation.ts","../src/hooks/usePrevious.ts","../src/hooks/useReadReceipts.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useResponsive.ts","../src/hooks/useScrollDirection.ts","../src/hooks/useScrollLock.ts","../src/hooks/useScrollTransform.ts","../src/hooks/useScrollVelocity.ts","../src/hooks/useSearch.ts","../src/hooks/useSessionStorage.ts","../src/hooks/useSpring.ts","../src/hooks/useStagger.ts","../src/hooks/useTextScramble.ts","../src/hooks/useThrottle.ts","../src/hooks/useTimer.ts","../src/hooks/useToast.ts","../src/hooks/useToggle.ts","../src/hooks/useTypingIndicator.ts","../src/hooks/useViewTransition.ts","../src/hooks/useVirtualList.ts","../src/utils/format.ts","../src/utils/string.ts"],"names":["cn","inputs","twMerge","clsx","PrimaryButton","React","children","className","leftIcon","rightIcon","props","ref","jsxs","jsx","Slot","Pt","forwardedRef","child","node","buttonVariants","cva","Button","variant","size","shape","shadow","asChild","isLoading","disabled","GlowButton","localRef","useRef","handleMove","e","el","rect","x","y","TokenBadge","accent","map","AccentGlow","SparkWave","color","MetricCard","icon","value","subtext","showWave","onClick","setCenter","r","waveColors","waveColor","surfaceVariants","Surface","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Text","Component","weight","code","Heading","TextGradient","from","to","via","direction","animate","ShinyText","shimmerColor","duration","baseColor","useInView","options","isInView","setIsInView","useState","hasAnimated","setHasAnimated","enabled","useEffect","element","observer","entry","Reveal","delay","boxColor","directionClasses","HeroText","title","highlight","subtitle","gradient","glow","content","LetterPullup","text","letters","letter","i","Label","required","inputVariants","TextInput","containerClassName","label","errorMsg","id","inputId","hasError","Checkbox","error","checked","defaultChecked","onChange","isChecked","setIsChecked","handleClick","newValue","Switch","Select","name","defaultValue","placeholder","isOpen","setIsOpen","internalValue","setInternalValue","activeIndex","setActiveIndex","containerRef","isControlled","currentValue","selectedOption","opt","index","handleClickOutside","event","handleSelect","optionValue","handleKeyDown","prev","option","useFloating","triggerRef","contentRef","side","align","sideOffset","alignOffset","position","setPosition","isPositioned","setIsPositioned","updatePosition","useCallback","triggerRect","contentRect","top","left","padding","viewportWidth","viewportHeight","useLayoutEffect","resizeObserver","PopoverContext","createContext","Popover","open","onOpenChange","internalOpen","setInternalOpen","newOpen","PopoverTrigger","context","useContext","PopoverContent","handleOutsideClick","getTransformOrigin","createPortal","ComboboxContext","Combobox","controlledValue","onValueChange","filter","search","usePopover","searchTerm","setSearchTerm","items","setItems","handleValueChange","registerItem","next","visibleItems","useMemo","_","item","hasVisibleItems","ComboboxTrigger","ComboboxContent","ComboboxInput","ComboboxList","ComboboxEmpty","ComboboxItem","textValue","isVisible","isSelected","itemIndex","isActive","Slider","min","max","step","trackRef","percentage","clientX","width","steps","handleMouseDown","handleMouseMove","handleMouseUp","handleTouchStart","startTouch","handleTouchMove","moveTouch","handleTouchEnd","DAYS","MONTHS","Calendar","minDate","maxDate","currentDate","setCurrentDate","viewDate","setViewDate","getDaysInMonth","year","month","getFirstDayOfMonth","handlePrevMonth","handleNextMonth","handleDateClick","day","newDate","isToday","today","renderDays","daysInMonth","firstDay","days","selected","ChevronLeft","ChevronRight","DatePicker","date","setDate","formatDate","d","CalendarIcon","ScrollArea","orientation","scrollbarSize","DateTimePicker","hours","setHours","minutes","setMinutes","handleDateSelect","updatedDate","handleTimeChange","type","val","num","newHours","newMinutes","baseDate","formatDateTime","Clock","Textarea","generatedId","PasswordInput","showPassword","setShowPassword","EyeOff","Eye","badgeVariants","Badge","TagInput","tags","inputValue","setInputValue","removeTag","tagToRemove","tag","X","ColorPicker","RadioGroupContext","RadioGroup","RadioGroupItem","isDisabled","FormItemContext","FormItem","FormLabel","FormControl","rest","FormDescription","FormMessage","dropzoneVariants","FileDropzone","onDrop","maxFiles","maxSize","description","isDragActive","setIsDragActive","files","setFiles","setError","inputRef","handleDragOver","handleDragLeave","validateFiles","fileList","f","handleDrop","droppedFiles","handleChange","selectedFiles","removeFile","newFiles","Upload","file","FileIcon","otpInputVariants","OTPInput","length","onComplete","localValue","setLocalValue","inputsRef","newVal","newLocalValue","stringValue","handlePaste","pastedData","char","digit","numberInputVariants","NumberInput","handleDecrement","handleIncrement","Minus","Plus","toggleGroupVariants","toggleItemVariants","ToggleGroup","fullWidth","Icons","Toast","onDismiss","timer","ToastContext","ToastProvider","toasts","setToasts","dismiss","toast","updateToast","t","promise","loadingOptions","data","successOptions","err","errorOptions","Alert","Icon","Progress","isIndeterminate","hasStripe","indicatorClassName","variants","EmptyState","action","Info","Skeleton","Rating","readOnly","hoverValue","setHoverValue","sizes","isFilled","Star","motionVariants","Motion","preset","viewport","visible","once","style","shouldShow","initialClasses","visibleClasses","MotionGroup","stagger","TextMotion","Parallax","speed","handleScroll","windowHeight","translate","Magnetic","strength","clientY","height","centerX","centerY","distanceX","distanceY","threshold","handleMouseLeave","NumberTicker","decimalPlaces","displayValue","setDisplayValue","startTimeRef","timestamp","progress","current","timeout","PageLoader","fullscreen","baseStyles","Loader2","PageTransition","useViewTransition","setIsVisible","currentPreset","sizeClasses","Avatar","src","alt","fallback","imageError","setImageError","AccordionContext","Accordion","itemValue","arrayValue","v","AccordionItemContext","AccordionItem","AccordionTrigger","ChevronDown","AccordionContent","Table","wrapperClassName","rounded","maxHeight","TableHeader","TableBody","TableRow","hoverable","optimized","TableHead","TableCell","DataTable","columns","searchPlaceholder","searchKeys","onRowClick","setSearch","sortConfig","setSortConfig","processedData","filtered","key","a","b","aValue","bValue","handleSort","Search","col","ArrowUp","ArrowDown","ArrowUpDown","idx","Image","onLoad","onError","setIsLoading","setHasError","handleLoad","handleError","Fragment","userPreviewVariants","UserPreview","user","onFollow","onMessage","stat","timelineItemVariants","TimelineItem","status","isLast","Timeline","TreeNodeItem","depth","onSelect","hasChildren","handleToggle","FolderOpen","Folder","File","Tree","KanbanHeader","view","onViewChange","onFilter","onSort","onAddColumn","canUndo","canRedo","onUndo","onRedo","views","Layout","List","Undo2","Redo2","Filter","SortAsc","MoreHorizontal","ColumnLimit","count","limit","isOverLimit","AlertCircle","KanbanCard","task","showTimer","onEdit","onDelete","draggable","activeTimerTaskId","selectable","cardClassName","onTaskClick","onTaskSelectionChange","onTaskTimerToggle","onDragStart","onDragOver","renderCard","getPriorityColor","priority","Lock","Trash2","GripVertical","Pause","Play","MessageSquare","Paperclip","KanbanColumn","column","tasks","onAddTask","onCollapse","onAction","isCollapsed","MoreVertical","KanbanListView","getColumn","c","KanbanTimelineView","KanbanTableView","KanbanCalendarView","firstDayOfMonth","totalDays","startDay","prevMonth","nextMonth","monthNames","getTasksForDate","level","Tag","Command","CommandDialog","overlayRef","handleEscape","handleBackdropClick","CommandInput","CommandList","CommandEmpty","CommandGroup","heading","CommandItem","CommandShortcut","KanbanFilterBar","onSearchChange","onFilterChange","onSortChange","onGroupChange","priorityOptions","tagOptions","assigneeOptions","viewOptions","sortOptions","groupOptions","savedFilters","onSaveFilter","activeFilters","setActiveFilters","currentView","setCurrentView","toggleFilter","category","newFilters","clearFilters","activeCount","FilterPopover","Check","Modal","onClose","dialogRef","dialog","handleCancel","ModalHeader","ModalFooter","ModalTitle","ModalDescription","Checklist","onToggle","completedCount","CheckSquare","Square","TaskComments","comments","onAddComment","newComment","setNewComment","handleSubmit","Send","comment","TaskAttachments","attachments","onRemove","onDownload","Download","LabelPicker","labels","selectedIds","AssigneePicker","users","selectedId","Users","DueDatePicker","TimeTracker","initialSeconds","onTimeUpdate","seconds","setSeconds","setIsActive","interval","s","formatTime","hrs","mins","secs","Timer","RotateCcw","KanbanTaskModal","onSave","onDuplicate","onArchive","columnId","availableLabels","showSubtasks","showChecklist","showAttachments","showComments","showActivity","setTitle","setDescription","setPriority","currentColumnId","setCurrentColumnId","assigneeId","setAssigneeId","selectedLabels","setSelectedLabels","dueDate","setDueDate","l","handleSave","u","Copy","Archive","KanbanSwimlane","useKanbanFilters","searchQuery","setSearchQuery","filteredTasks","query","values","newState","useKanbanUndo","initialState","state","setState","lastInitialState","tasksChanged","columnsChanged","currentState","pushState","undo","redo","useKanbanKeyboard","onSearch","onNewTask","onNewColumn","useKanbanDragAndDrop","selectedTaskIds","onTaskMove","onColumnMove","onTaskDrop","onTaskDragStart","onTaskDragEnd","draggedTaskId","setDraggedTaskId","draggedColumnId","setDraggedColumnId","dragOverColumnId","setDragOverColumnId","dragOverTaskId","setDragOverTaskId","dropPosition","setDropPosition","touchTimeout","lastTouchPos","handleDragStart","handleDragEnd","taskId","midpoint","toColumnId","toTaskId","fromColumnId","touch","target","columnEl","taskEl","KanbanBoard","initialColumns","initialTasks","onTaskAdd","onColumnAction","swimlanes","swimlaneBy","propView","internalView","setInternalView","selectedTaskId","setSelectedTaskId","collapsedSwimlanes","setCollapsedSwimlanes","setView","swimlaneGroups","groups","getNestedValue","obj","path","acc","part","rawValue","newTasks","taskIndex","targetIndex","insertIndex","selectedTask","renderView","handleTaskClick","groupName","groupTasks","updatedTask","updatedTasks","KanbanQuickAdd","onAdd","isAdding","setIsAdding","useKanbanSync","onSync","lastSynced","setLastSynced","isSyncing","setIsSyncing","useKanbanHistory","history","setHistory","addEntry","newEntry","clearHistory","SubtaskList","subtasks","subtask","CheckCircle2","Circle","TaskActivity","activities","activity","Terminal","TerminalLine","prefix","Marquee","pauseOnHover","speeds","statusDotVariants","StatusDot","separatorVariants","Separator","decorative","Collapse","controlledOpen","defaultOpen","triggerClassName","contentClassName","uncontrolledOpen","setUncontrolledOpen","ChartContext","useChart","normalize","ChartContainer","hoveredIndex","setHoveredIndex","containerWidth","setContainerWidth","entries","maxValue","ChartGrid","lines","chartHeight","ChartXAxis","itemWidth","point","ChartTooltip","renderTooltip","ChartSkeleton","BarChart","showValues","animationDelay","onValueClick","chartWidth","barWidth","colors","barHeight","isHovered","AreaChart","theme","points","linePath","p","areaPath","LineChart","curve","strokeWidth","strokeColor","p0","p1","cp1x","cp1y","cp2x","cp2y","PieChart","innerRadius","padAngle","showLabels","radius","total","cur","currentAngle","slices","angle","startAngle","endAngle","getCoordinatesForPercent","percent","slice","effectiveStartAngle","effectiveEndAngle","startX","startY","endX","endY","largeArcFlag","rInner","innerStartX","innerStartY","innerEndX","innerEndY","pathData","midAngle","labelRadius","labelX","labelY","RadarChart","keys","userMaxValue","center","k","angleSlice","colorMap","strokeMap","levelRadius","kIndex","colorName","fill","stroke","Sparkline","range","fillPath","ChartYAxis","ticks","format","TabsContext","Tabs","TabsList","TabsTrigger","TabsContent","Sidebar","SidebarHeader","SidebarContent","SidebarFooter","SidebarItem","active","badge","SidebarGroup","maxWidthClasses","Navbar","logo","links","actions","maxWidth","isScrolled","setIsScrolled","isMobileMenuOpen","setIsMobileMenuOpen","link","Menu","DropdownMenuContext","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","currentIndex","nextIndex","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","UserMenu","avatarSrc","avatarFallback","Settings","User","LogOut","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","BreadcrumbEllipsis","SkipToContent","contentId","Pagination","PaginationContent","PaginationItem","PaginationLink","PaginationPrevious","PaginationNext","PaginationEllipsis","Stepper","currentStep","onStepClick","isCompleted","isCurrent","isClickable","ConfirmDialog","onConfirm","confirmText","cancelText","AlertTriangle","Dialog","DialogHeader","DialogFooter","DialogTitle","DialogDescription","Drawer","shouldRender","setShouldRender","positionClasses","translateClasses","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","Tooltip","timeoutRef","floatingPosition","showTooltip","hideTooltip","animationClasses","Container","Stack","gap","justify","wrap","Grid","cols","sm","md","lg","xl","Background","noise","patternColor","mask","followMouse","bgColor","getBackgroundStyle","baseStyle","effectiveColor","maskStyle","Spotlight","divRef","aiPromptInputVariants","AIPromptInput","onSubmit","isGenerating","onAttach","onFilesSelected","onStop","onMic","maxLength","footer","onRemoveAttachment","accept","multiple","textareaRef","fileInputRef","adjustHeight","handleInput","handleAttachClick","handleFileChange","att","Mic","Sparkles","aiResponseVariants","AIResponse","onCopy","onRegenerate","onFeedback","onShare","sources","model","usage","source","ExternalLink","Share","Edit","RefreshCw","ThumbsUp","ThumbsDown","ChatLayout","TypingIndicator","ChatSidebar","conversations","activeId","onNewChat","onPin","onMute","sortBy","handleSearch","chat","displayName","displayAvatar","isOnline","Pin","BellOff","ChatHeader","onBack","onInfo","onCall","onVideoCall","isTyping","isMuted","ArrowLeft","Phone","Video","AudioPlayer","isMe","isPlaying","setIsPlaying","currentTime","setCurrentTime","setIsMuted","audioRef","togglePlay","handleTimeUpdate","handleEnded","time","VolumeX","Volume2","ReadReceipt","CheckCheck","LinkPreview","url","image","siteName","MessageBubble","message","isOwn","showAvatar","showStatus","onReply","onReact","onForward","renderContent","MapPin","UserIcon","FileText","urlRegex","urls","Reply","Edit2","Forward","Smile","MessageList","messages","currentUserId","onLoadMore","hasMore","isLoadingMore","selectedMessages","dateFormat","groupByDate","bottomRef","shouldAutoScroll","setShouldAutoScroll","isAtBottom","groupedMessages","msgs","msg","prevMsg","nextMsg","isLastInGroup","emoji","ChatInput","onSend","onEmoji","onGif","onLocation","onCancelReply","replyingTo","isRecording","setContent","isUploading","setIsUploading","mentionSearch","setMentionSearch","mentionIndex","setMentionIndex","filteredUsers","mentionMatch","insertMention","start","textBefore","textAfter","handleSend","Gift","ChatProfile","Bell","Ban","ReplyPreview","onCancel","ChatBanner","icons","DateSeparator","OnlineIndicator","SystemMessage","GroupHeader","group","typingUsers","typingText","member","MentionList","selectedIndex","EMOJI_CATEGORIES","EmojiPicker","filteredCategories","cat","useVoiceRecorder","setIsRecording","setDuration","audioBlob","setAudioBlob","audioUrl","setAudioUrl","mediaRecorder","timerInterval","chunks","startRecording","stream","blob","track","stopRecording","cancelRecording","clearAudio","VoiceRecorder","MessageSearch","results","onResultClick","setQuery","useScroll","setValues","ticking","ScrollProgress","scrollProgressY","Divider","Kbd","ThemeProviderContext","ThemeProvider","defaultTheme","storageKey","setTheme","root","mediaQuery","applySystemTheme","useTheme","ThemeToggle","Sun","Moon","useAsync","asyncFunction","immediate","execute","response","useFetch","fetcher","res","useChat","initialMessages","onSendMessage","scrollThreshold","setMessages","setIsTyping","scrollRef","scrollToBottom","behavior","scrollTop","scrollHeight","clientHeight","sendMessage","senderId","tempId","newMessage","clearMessages","useChatMessages","addMessage","updateMessageStatus","m","deleteMessage","editMessage","addReaction","messageId","userId","reactions","useChatSearch","lowerQuery","useClickOutside","handler","listener","useClipboard","copied","setCopied","useDebounce","debouncedValue","setDebouncedValue","useDrag","onDrag","isDragging","setIsDragging","offset","setOffset","startPos","lastPos","lastTime","velocity","handleStart","newX","newY","deltaTime","handleEnd","onMouseMove","onTouchMove","onMouseUp","onTouchEnd","useElementScroll","updateScroll","totalDistance","currentDistance","useFlip","dependencies","lastRectRef","first","last","deltaX","deltaY","deltaW","deltaH","useForm","initialValues","errors","setErrors","isSubmitting","setIsSubmitting","form","newErrors","input","register","useHistory","previous","newFuture","set","newPresent","resolved","clear","useIdle","isIdle","setIsIdle","timeoutId","handleActivity","events","useInfiniteScroll","observerRef","handleObserver","useIntersection","elementRef","rootMargin","freezeOnceVisible","setEntry","frozen","updateEntry","observerParams","useKanban","initialBoard","board","setBoard","moveTask","sourceColumnId","destinationColumnId","destinationIndex","sourceColumn","destColumn","newTaskIds","newSourceColumn","newDestTaskIds","newDestColumn","moveColumn","newColumnOrder","addTask","newColumn","removeTask","useKeyboardShortcuts","shortcuts","shortcutsRef","shortcutStr","useOnMount","effect","initialized","useOnUnmount","useLocalStorage","initialValue","storedValue","setStoredValue","setValue","valueToStore","useMousePosition","requestRef","latestMousePos","elementX","elementY","percentageX","percentageY","useOrientation","setOrientation","handleOrientation","usePrevious","useReadReceipts","onRead","registerMessage","useReducedMotion","reducedMotion","setReducedMotion","breakpoints","useMediaQuery","matches","setMatches","media","useBreakpoint","breakpoint","useContainerQuery","setSize","useScrollDirection","scrollDirection","setScrollDirection","lastScrollY","updateScrollDirection","scrollY","onScroll","useScrollLock","lock","originalStyle","originalPaddingRight","scrollbarWidth","interpolate","inputRange","outputRange","inputMin","inputMax","outputMin","outputMax","clampedProgress","useScrollTransform","useScrollVelocity","setVelocity","currentScrollY","currentVelocity","decayVelocity","fuzzyMatch","q","queryIdx","textIdx","useSearch","useSessionStorage","readValue","useSpring","targetValue","config","stiffness","damping","mass","precision","setCurrentValue","velocityRef","currentRef","distance","acceleration","useStagger","staggerDelay","baseDelay","useSequence","GLYPHS","useTextScramble","output","setOutput","frameRef","tick","elapsed","scrambled","useThrottle","throttledValue","setThrottledValue","lastRan","useTimer","intervalRef","pause","reset","totalSeconds","useToast","useToggle","toggle","useTypingIndicator","timerRef","setTyping","typing","updateCallback","flushSync","useVirtualList","itemCount","itemHeight","overscan","setScrollTop","containerHeight","setContainerHeight","totalHeight","startIndex","rangeStart","rangeEnd","formatNumber","formatCurrency","amount","currency","truncate","str","slugify"],"mappings":"0/BAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCIO,IAAMG,EAAAA,CAAgBC,YAAM,UAAA,CACjC,CAAC,CAAE,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAErDC,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAMD,CAAAA,CAAM,IAAA,EAAQ,QAAA,CACpB,SAAA,CAAWV,CAAAA,CACT,oFAAA,CACA,2DAAA,CACA,yCAAA,CACA,2CAAA,CACA,6BAAA,CACA,oEACA,qBAAA,CACA,iDAAA,CACA,0DAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mLAAA,CAAoL,CAAA,CACpMD,IAAAA,CAAC,QAAK,SAAA,CAAU,yCAAA,CACb,QAAA,CAAA,CAAAJ,CAAAA,CACAF,CAAAA,CACAG,CAAAA,CAAAA,CACH,CAAA,CAAA,CACF,CAGN,EAEAL,EAAAA,CAAc,WAAA,CAAc,eAAA,CCjCrB,IAAMU,EAAAA,CAAaC,EAAA,CAAA,UAAA,CACxB,CAAC,CAAE,QAAA,CAAAT,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGM,CAAAA,GAAiB,CACxC,GAAI,CAAOD,EAAA,CAAA,cAAA,CAAeT,CAAQ,CAAA,CAChC,OAAO,IAAA,CAGT,IAAMW,CAAAA,CAAQX,CAAAA,CAEd,OAAaS,gBAAaE,CAAAA,CAAO,CAC/B,GAAGP,CAAAA,CACH,GAAGO,CAAAA,CAAM,KAAA,CACT,GAAA,CAAMC,CAAAA,EAA6B,CAE7B,OAAOF,CAAAA,EAAiB,UAAA,CAC1BA,CAAAA,CAAaE,CAAI,CAAA,CACRF,CAAAA,GACRA,CAAAA,CAA4D,OAAA,CAAUE,CAAAA,CAAAA,CAIzE,GAAM,CAAE,GAAA,CAAAP,CAAI,CAAA,CAAIM,CAAAA,CACZ,OAAON,CAAAA,EAAQ,UAAA,CACjBA,EAAIO,CAAI,CAAA,CACCP,CAAAA,EAAO,SAAA,GAAaA,CAAAA,GAC5BA,CAAAA,CAAmD,OAAA,CAAUO,CAAAA,EAElE,CAAA,CACA,SAAA,CAAWlB,CAAAA,CAAGU,CAAAA,CAAM,SAAA,CAAWO,CAAAA,CAAM,KAAA,CAAM,SAAS,CACtD,CAAC,CACH,CACF,CAAA,CAEAH,EAAAA,CAAK,WAAA,CAAc,MAAA,CClCnB,IAAMK,GAAiBC,GAAAA,CACrB,oTAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,yFAAA,CACT,SAAA,CAAW,oLAAA,CACX,OAAA,CAAS,kKAAA,CACT,KAAA,CAAO,2JAAA,CACP,MAAA,CAAQ,sKAAA,CACR,OAAA,CAAS,8LAAA,CACT,KAAA,CAAO,8KACT,CAAA,CACA,IAAA,CAAM,CACJ,EAAA,CAAI,0BAAA,CACJ,EAAA,CAAI,yBAAA,CACJ,EAAA,CAAI,2BAAA,CACJ,KAAM,gDACR,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,aAAA,CACT,IAAA,CAAM,cAAA,CACN,MAAA,CAAQ,YACV,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,EAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,gBAAA,CAAkB,CAChB,CACE,OAAA,CAAS,SAAA,CACT,MAAA,CAAQ,IAAA,CACR,KAAA,CAAO,0FACT,CAAA,CACA,CACE,QAAS,WAAA,CACT,MAAA,CAAQ,IAAA,CACR,KAAA,CAAO,WACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,IAAA,CACN,KAAA,CAAO,UACP,MAAA,CAAQ,IACV,CACF,CACF,CAAA,CAmBaC,CAAAA,CAAShB,WAAAA,CAAM,UAAA,CAC1B,CAAC,CACC,SAAA,CAAAE,CAAAA,CACA,OAAA,CAAAe,CAAAA,CACA,KAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,KAAA,CACV,QAAA,CAAAlB,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAkB,CAAAA,CACA,QAAA,CAAArB,CAAAA,CACA,QAAA,CAAAsB,CAAAA,CACA,GAAGlB,CACL,CAAA,CAAGC,CAAAA,GAICC,IAAAA,CAHWc,CAAAA,CAAUZ,EAAAA,CAAO,QAAA,CAG3B,CACC,GAAA,CAAKH,CAAAA,CACL,QAAA,CAAUiB,GAAYD,CAAAA,CACtB,SAAA,CAAW3B,CAAAA,CAAGmB,EAAAA,CAAe,CAAE,OAAA,CAAAG,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,SAAA,CAAAlB,CAAU,CAAC,CAAC,CAAA,CACxE,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAY,CAAAA,GAAY,SAAA,EAAa,CAACI,CAAAA,EACzBb,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yLAAA,CAA0L,CAAA,CAG5MD,KAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kDAAA,CACb,QAAA,CAAA,CAAAe,CAAAA,EACCf,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAA+C,KAAA,CAAM,4BAAA,CAA6B,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,WAAA,CACnH,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,SAAA,CAAU,YAAA,CAAa,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,EAC5FA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,cAAA,CAAe,CAAA,CAAE,iHAAA,CAAkH,CAAA,CAAA,CACvK,CAAA,CAED,CAACc,CAAAA,EAAanB,CAAAA,EAAYK,GAAAA,CAAC,QAAK,SAAA,CAAWb,CAAAA,CAAG,MAAA,CAAQuB,CAAAA,GAAS,IAAA,EAAQ,QAAQ,CAAA,CAAI,QAAA,CAAAf,CAAAA,CAAS,CAAA,CAC5FF,CAAAA,CACA,CAACqB,CAAAA,EAAalB,CAAAA,EAAaI,IAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,MAAA,CAAQuB,CAAAA,GAAS,IAAA,EAAQ,QAAQ,CAAA,CAAI,QAAA,CAAAd,CAAAA,CAAU,CAAA,CAAA,CACjG,CAAA,CAAA,CACF,CAGN,EAEAY,CAAAA,CAAO,WAAA,CAAc,QAAA,CC3Gd,IAAMQ,EAAAA,CAAaxB,WAAAA,CAAM,WAC9B,CAAC,CAAE,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC/D,IAAMmB,CAAAA,CAAWC,MAAAA,CAA0B,IAAI,CAAA,CAEzCC,CAAAA,CAAcC,CAAAA,EAA2C,CAC7D,IAAMC,CAAAA,CAAKJ,CAAAA,CAAS,OAAA,CACpB,GAAI,CAACI,CAAAA,CAAI,OACT,IAAMC,CAAAA,CAAOD,CAAAA,CAAG,qBAAA,EAAsB,CAChCE,CAAAA,CAAIH,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,IAAA,CACrBE,CAAAA,CAAIJ,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BD,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,WAAA,CAAa,CAAA,EAAGE,CAAC,CAAA,EAAA,CAAI,CAAA,CAC1CF,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,WAAA,CAAa,CAAA,EAAGG,CAAC,CAAA,EAAA,CAAI,EAC5C,CAAA,CAGA,OAAAhC,WAAAA,CAAM,mBAAA,CAAoBM,CAAAA,CAAK,IAAMmB,CAAAA,CAAS,OAA4B,CAAA,CAGxElB,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKkB,CAAAA,CACL,WAAA,CAAaE,EACb,IAAA,CAAMtB,CAAAA,CAAM,IAAA,EAAQ,QAAA,CACpB,SAAA,CAAWV,CAAAA,CACT,oFAAA,CACA,kDAAA,CACA,2DAAA,CACA,8CAAA,CACA,6BAAA,CACA,iEAAA,CACA,qBAAA,CACA,0DAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAGJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,0GAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,wGACd,CAAA,CACF,CAAA,CAGAA,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,sHAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,wGAAA,CACZ,SAAA,CAAW,0DAAA,CACX,QAAA,CAAU,yBAAA,CACV,aAAA,CAAe,SAAA,CACf,mBAAA,CAAqB,KAAA,CACrB,QAAS,KACX,CAAA,CACF,CAAA,CAEAD,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CACb,QAAA,CAAA,CAAAJ,CAAAA,CACAF,CAAAA,CACAG,CAAAA,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CACF,EAEAoB,EAAAA,CAAW,WAAA,CAAc,YAAA,CCvEzB,SAASS,EAAAA,CAAW,CAClB,MAAA,CAAAC,CAAAA,CAAS,MAAA,CACT,QAAA,CAAAjC,CACF,CAAA,CAGG,CACD,IAAMkC,CAAAA,CAA8B,CAClC,IAAA,CAAM,gBAAA,CACN,KAAA,CAAO,iBAAA,CACP,MAAA,CAAQ,kBAAA,CACR,IAAA,CAAM,gBAAA,CACN,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,mBAAA,CACT,MAAA,CAAQ,kBACV,CAAA,CAEA,OACE3B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,yDAA0DwC,CAAAA,CAAID,CAAM,CAAA,EAAKC,CAAAA,CAAI,IAAI,CAAA,CACjG,QAAA,CAAAlC,CAAAA,CACH,CAEJ,CAEA,SAASmC,EAAAA,CAAW,CAAE,MAAA,CAAAF,EAAS,MAAO,CAAA,CAAsF,CAC1H,IAAMC,CAAAA,CAA8B,CAClC,IAAA,CAAM,iDAAA,CACN,KAAA,CAAO,mDAAA,CACP,MAAA,CAAQ,qDAAA,CACR,IAAA,CAAM,iDAAA,CACN,KAAM,iDAAA,CACN,OAAA,CAAS,uDAAA,CACT,MAAA,CAAQ,qDACV,CAAA,CAEA,OACE3B,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,qFAAA,CACA,2BAAA,CACAwC,CAAAA,CAAID,CAAM,CAAA,EAAKC,CAAAA,CAAI,IACrB,CAAA,CACF,CAEJ,CAEA,SAASE,EAAAA,CAAU,CAAE,KAAA,CAAAC,CAAAA,CAAQ,cAAe,CAAA,CAAuB,CACjE,OACE9B,IAAC,KAAA,CAAA,CACC,OAAA,CAAQ,YAAA,CACR,SAAA,CAAU,UAAA,CACV,IAAA,CAAK,MAAA,CACL,KAAA,CAAM,4BAAA,CACN,aAAA,CAAY,MAAA,CAEZ,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,wEAAA,CACF,MAAA,CAAQ8B,CAAAA,CACR,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,OAAA,CAAQ,MAAA,CACV,CAAA,CACF,CAEJ,CAWO,IAAMC,GAAavC,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,MAAA,CAAAkC,CAAAA,CAAS,MAAA,CAAQ,IAAA,CAAAM,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAAC,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAW,KAAA,CAAO,OAAA,CAAAC,CAAAA,CAAS,SAAA,CAAA1C,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAClG,IAAMmB,CAAAA,CAAWC,MAAAA,CAA8B,IAAI,CAAA,CAE7CmB,EAAY,IAAM,CACtB,IAAMhB,CAAAA,CAAKJ,CAAAA,CAAS,OAAA,CACpB,GAAI,CAACI,CAAAA,CAAI,OACT,IAAMiB,CAAAA,CAAIjB,CAAAA,CAAG,qBAAA,GACbA,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAMiB,CAAAA,CAAE,KAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA,CAC1DjB,CAAAA,CAAG,MAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAMiB,CAAAA,CAAE,MAAA,CAAS,CAAC,CAAC,CAAA,EAAA,CAAI,EAC7D,CAAA,CAEMnB,CAAAA,CAAcC,CAAAA,EAAwB,CAC1C,IAAMC,CAAAA,CAAKJ,CAAAA,CAAS,OAAA,CACpB,GAAI,CAACI,CAAAA,CAAI,OACT,IAAMiB,CAAAA,CAAIjB,CAAAA,CAAG,qBAAA,EAAsB,CACnCA,CAAAA,CAAG,KAAA,CAAM,YAAY,KAAA,CAAO,CAAA,EAAGD,CAAAA,CAAE,OAAA,CAAUkB,CAAAA,CAAE,IAAI,CAAA,EAAA,CAAI,CAAA,CACrDjB,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAGD,CAAAA,CAAE,OAAA,CAAUkB,CAAAA,CAAE,GAAG,CAAA,EAAA,CAAI,EACtD,CAAA,CAEMC,CAAAA,CAAqC,CACzC,IAAA,CAAM,sBAAA,CACN,KAAA,CAAO,sBAAA,CACP,MAAA,CAAQ,uBAAA,CACR,IAAA,CAAM,sBAAA,CACN,KAAM,uBAAA,CACN,OAAA,CAAS,sBAAA,CACT,MAAA,CAAQ,uBACV,CAAA,CAEMC,CAAAA,CAAYD,CAAAA,CAAWb,CAAM,CAAA,EAAKa,CAAAA,CAAW,IAAA,CAEnD,OACExC,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAMM,CAAAA,EAAS,CACXY,CAAAA,CAAS,OAAA,CAAUZ,CAAAA,CACf,OAAOP,CAAAA,EAAQ,UAAA,CAAYA,CAAAA,CAAIO,CAAI,CAAA,CAC9BP,CAAAA,GAAMA,CAAAA,CAAsD,OAAA,CAAUO,GACnF,CAAA,CACA,YAAA,CAAcgC,CAAAA,CACd,WAAA,CAAalB,CAAAA,CACb,OAAA,CAASiB,CAAAA,CACT,SAAA,CAAWjD,CAAAA,CACT,4CAAA,CACA,2CAAA,CACA,uFAAA,CACA,0BAAA,CACA,2CAAA,CACA,wDACAiD,CAAAA,EAAW,gBAAA,CACX1C,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,wGAAA,CACV,KAAA,CAAO,CACL,UAAA,CACE,+FACJ,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yHAAA,CAA0H,CAAA,CACzIA,GAAAA,CAAC4B,EAAAA,CAAA,CAAW,MAAA,CAAQF,CAAAA,CAAQ,CAAA,CAE5B3B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAAA,GAAAA,CAACyB,EAAAA,CAAA,CAAW,MAAA,CAAQC,CAAAA,CAAS,QAAA,CAAAM,CAAAA,CAAK,EACpC,CAAA,CAEAjC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8EAAA,CAAgF,QAAA,CAAAiC,CAAAA,CAAM,CAAA,CACpGC,CAAAA,CAAUlC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CAAiD,QAAA,CAAAkC,CAAAA,CAAQ,CAAA,CAAS,IAAA,CAAA,CAC9F,CAAA,CACCC,CAAAA,CAAWnC,GAAAA,CAAC6B,GAAA,CAAU,KAAA,CAAOW,CAAAA,CAAW,CAAA,CAAK,IAAA,CAAA,CAChD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CACF,EAEAT,EAAAA,CAAW,WAAA,CAAc,YAAA,CC7JzB,IAAMU,EAAAA,CAAkBlC,GAAAA,CACtB,yNAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,EAAA,CACT,KAAA,CAAO,+CACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAQamC,CAAAA,CAAUlD,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,OAAA,CAAAe,CAAAA,CAAS,OAAA,CAAAI,CAAAA,CAAU,KAAA,CAAO,GAAGhB,CAAM,CAAA,CAAGC,CAAAA,GAGhDE,GAAAA,CAFWa,CAAAA,CAAUZ,EAAAA,CAAO,KAAA,CAE3B,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGsD,EAAAA,CAAgB,CAAE,OAAA,CAAAhC,CAAAA,CAAS,SAAA,CAAAf,CAAU,CAAC,CAAC,CAAA,CACpD,GAAGG,CAAAA,CACN,CAGN,EAEA6C,CAAAA,CAAQ,WAAA,CAAc,SAAA,CCnCf,IAAMC,EAAAA,CAAOnD,WAAAA,CAAM,UAAA,CAGxB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC0C,CAAAA,CAAA,CACC,GAAA,CAAK5C,CAAAA,CACL,SAAA,CAAWJ,CAAAA,CACV,GAAGG,CAAAA,CACN,CACD,EACD8C,EAAAA,CAAK,WAAA,CAAc,MAAA,CAEZ,IAAMC,EAAAA,CAAapD,WAAAA,CAAM,WAG9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,+BAAA,CAAiCO,CAAS,CAAA,CACvD,GAAGG,CAAAA,CACN,CACD,EACD+C,EAAAA,CAAW,WAAA,CAAc,YAAA,CAElB,IAAMC,EAAAA,CAAYrD,WAAAA,CAAM,UAAA,CAG7B,CAAC,CAAE,UAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,oDAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CACD,EACDgD,EAAAA,CAAU,WAAA,CAAc,WAAA,CAEjB,IAAMC,EAAAA,CAAkBtD,WAAAA,CAAM,UAAA,CAGnC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,0CAAA,CAA4CO,CAAS,CAAA,CAClE,GAAGG,CAAAA,CACN,CACD,EACDiD,EAAAA,CAAgB,WAAA,CAAc,iBAAA,CAEvB,IAAMC,EAAAA,CAAcvD,WAAAA,CAAM,UAAA,CAG/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,IAC1BE,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,UAAA,CAAYO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CACjE,EACDkD,EAAAA,CAAY,WAAA,CAAc,aAAA,CAEnB,IAAMC,EAAAA,CAAaxD,WAAAA,CAAM,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,4BAAA,CAA8BO,CAAS,CAAA,CACpD,GAAGG,CAAAA,CACN,CACD,EACDmD,EAAAA,CAAW,WAAA,CAAc,YAAA,CC7DlB,IAAMC,EAAAA,CAAOzD,WAAAA,CAAM,UAAA,CACxB,CAAC,CACC,EAAA,CAAI0D,CAAAA,CAAY,GAAA,CAChB,OAAA,CAAAzC,CAAAA,CAAU,UACV,IAAA,CAAAC,CAAAA,CAAO,MAAA,CACP,MAAA,CAAAyC,CAAAA,CAAS,QAAA,CACT,IAAA,CAAAC,CAAAA,CAAO,KAAA,CACP,SAAA,CAAA1D,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAGC,CAAAA,GAECE,GAAAA,CAACkD,CAAAA,CAAA,CACC,GAAA,CAAKpD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,gDAAA,CACAiE,CAAAA,EAAQ,+EAAA,CACR,CAEE,+BAAA,CAAiC3C,IAAY,SAAA,CAC7C,kCAAA,CAAoCA,CAAAA,GAAY,OAAA,CAChD,kCAAA,CAAoCA,CAAAA,GAAY,QAAA,CAChD,gEAAA,CAAkEA,CAAAA,GAAY,MAAA,CAC9E,kCAAA,CAAoCA,CAAAA,GAAY,OAAA,CAChD,wCAAA,CAA0CA,CAAAA,GAAY,SAAA,CACtD,oCAAA,CAAsCA,CAAAA,GAAY,SAAA,CAClD,gCAAA,CAAkCA,CAAAA,GAAY,MAAA,CAG9C,SAAA,CAAWC,CAAAA,GAAS,IAAA,CACpB,SAAA,CAAWA,CAAAA,GAAS,IAAA,CACpB,WAAA,CAAaA,CAAAA,GAAS,OACtB,SAAA,CAAWA,CAAAA,GAAS,IAAA,CACpB,SAAA,CAAWA,CAAAA,GAAS,IAAA,CACpB,UAAA,CAAYA,CAAAA,GAAS,KAAA,CAGrB,YAAA,CAAcyC,CAAAA,GAAW,OAAA,CACzB,aAAA,CAAeA,CAAAA,GAAW,QAAA,CAC1B,aAAA,CAAeA,CAAAA,GAAW,QAAA,CAC1B,eAAA,CAAiBA,CAAAA,GAAW,UAAA,CAC5B,WAAA,CAAaA,CAAAA,GAAW,MAC1B,CAAA,CACAzD,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,EACH,CAGN,EAEAwD,EAAAA,CAAK,WAAA,CAAc,MAAA,CCxDZ,IAAMI,EAAAA,CAAU7D,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,EAAA,CAAI0D,CAAAA,CAAY,IAAA,CAAM,MAAA,CAAAC,CAAAA,CAAS,MAAA,CAAQ,SAAA,CAAAzD,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,IAEvEE,GAAAA,CAACkD,CAAAA,CAAA,CACC,GAAA,CAAKpD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,6EAAA,CACA,CACE,kCAAA,CAAoC+D,CAAAA,GAAc,IAAA,CAClD,sBAAA,CAAwBA,CAAAA,GAAc,KACtC,sBAAA,CAAwBA,CAAAA,GAAc,IAAA,CACtC,qBAAA,CAAuBA,CAAAA,GAAc,IAAA,CACrC,oBAAA,CAAsBA,CAAAA,GAAc,IAAA,CACpC,sBAAA,CAAwBA,CAAAA,GAAc,IACxC,CAAA,CACA,CACE,cAAeC,CAAAA,GAAW,QAAA,CAC1B,aAAA,CAAeA,CAAAA,GAAW,QAAA,CAC1B,eAAA,CAAiBA,CAAAA,GAAW,UAAA,CAC5B,WAAA,CAAaA,CAAAA,GAAW,MAAA,CACxB,gBAAA,CAAkBA,CAAAA,GAAW,WAAA,CAC7B,YAAA,CAAcA,CAAAA,GAAW,OAC3B,CAAA,CACAzD,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEA4D,EAAAA,CAAQ,WAAA,CAAc,SAAA,CCZf,IAAMC,EAAAA,CAAe9D,WAAAA,CAAM,UAAA,CAChC,CAAC,CACC,IAAA,CAAA+D,CAAAA,CAAO,eAAA,CACP,EAAA,CAAAC,CAAAA,CAAK,eAAA,CACL,GAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,GAAA,CACZ,OAAA,CAAAC,CAAAA,CAAU,KAAA,CACV,SAAA,CAAAjE,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,EAAGC,CAAAA,GAECE,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,+CAAA,CAAkDuE,CAAAA,CAClDH,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAE,CAAAA,EAAW,wCAAA,CACXjE,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEA6D,EAAAA,CAAa,WAAA,CAAc,cAAA,CCvCpB,IAAMM,EAAAA,CAAYpE,WAAAA,CAAM,UAAA,CAC7B,CAAC,CACC,YAAA,CAAAqE,CAAAA,CAAe,uBAAA,CACf,QAAA,CAAAC,CAAAA,CAAW,IAAA,CACX,SAAA,CAAAC,CAAAA,CAAY,eACZ,SAAA,CAAArE,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAGC,CAAAA,GAECE,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,+FACAO,CACF,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,CAAA,uBAAA,EAA0BqE,CAAS,CAAA,KAAA,EAAQA,CAAS,CAAA,MAAA,EAASF,CAAY,CAAA,MAAA,EAASE,CAAS,CAAA,MAAA,EAASA,CAAS,CAAA,MAAA,CAAA,CAC9H,cAAA,CAAgB,WAAA,CAChB,iBAAA,CAAmBD,CAAAA,CACnB,uBAAA,CAAyB,UAAA,CACzB,uBAAA,CAAyB,QAC3B,CAAA,CACC,GAAGjE,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEAmE,EAAAA,CAAU,WAAA,CAAc,WAAA,CC3CjB,SAASI,EAAAA,CAAUC,CAAAA,CAA4B,CAAE,SAAA,CAAW,EAAA,CAAK,UAAA,CAAY,KAAA,CAAO,OAAA,CAAS,IAAK,CAAA,CAAG,CAC1G,IAAMnE,CAAAA,CAAMoB,MAAAA,CAAuB,IAAI,CAAA,CACjC,CAACgD,CAAAA,CAAUC,CAAW,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACxC,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIF,QAAAA,CAAS,KAAK,CAAA,CAC9C,CAAE,OAAA,CAAAG,CAAAA,CAAU,IAAK,CAAA,CAAIN,CAAAA,CAE3B,OAAAO,SAAAA,CAAU,IAAM,CACd,GAAI,CAACD,CAAAA,CAAS,OAEd,IAAME,CAAAA,CAAU3E,CAAAA,CAAI,OAAA,CACpB,GAAI,CAAC2E,CAAAA,CAAS,OAEd,IAAMC,CAAAA,CAAW,IAAI,oBAAA,CAAqB,CAAC,CAACC,CAAK,CAAA,GAAM,CACjDA,CAAAA,EAASA,CAAAA,CAAM,cAAA,EACjBR,EAAY,IAAI,CAAA,CAChBG,CAAAA,CAAe,IAAI,CAAA,EAEnBH,CAAAA,CAAY,KAAK,EAErB,CAAA,CAAGF,CAAO,CAAA,CAEV,OAAAS,CAAAA,CAAS,OAAA,CAAQD,CAAO,CAAA,CAEjB,IAAM,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,CAAA,CAAG,CAACT,CAAAA,CAAQ,SAAA,CAAWA,CAAAA,CAAQ,UAAA,CAAYA,CAAAA,CAAQ,IAAA,CAAMM,CAAO,CAAC,CAAA,CAE1D,CAAE,GAAA,CAAAzE,CAAAA,CAAK,QAAA,CAAAoE,CAAAA,CAAU,WAAA,CAAAG,CAAY,CACtC,CC1BO,SAASO,EAAAA,CAAO,CACrB,QAAA,CAAAnF,CAAAA,CACA,SAAA,CAAAiE,CAAAA,CAAY,IAAA,CACZ,QAAA,CAAAI,CAAAA,CAAW,EAAA,CACX,KAAA,CAAAe,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAC,CAAAA,CAAW,aAAA,CACX,SAAA,CAAApF,CAAAA,CACA,GAAGG,CACL,CAAA,CAAgB,CACd,GAAM,CAAE,GAAA,CAAAC,CAAAA,CAAK,WAAA,CAAAuE,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAI,CAAC,CAAA,CAEnDe,CAAAA,CAAmB,CACvB,EAAA,CAAI,kBAAA,CACJ,IAAA,CAAM,mBAAA,CACN,IAAA,CAAM,kBAAA,CACN,KAAA,CAAO,mBACT,CAAA,CAEA,OACEhF,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,uCAAA,CAAyCO,CAAS,CAAA,CAC/D,GAAGG,CAAAA,CAEJ,UAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,yBAAA,CACAkF,CAAAA,CAAc,yCAAA,CAA4ClF,CAAAA,CAAG,WAAA,CAAa4F,CAAAA,CAAiBrB,CAAS,CAAC,CACvG,CAAA,CACA,MAAO,CACL,kBAAA,CAAoB,CAAA,EAAGI,CAAQ,CAAA,CAAA,CAAA,CAC/B,eAAA,CAAiB,CAAA,EAAGe,CAAK,CAAA,CAAA,CAC3B,CAAA,CAEC,QAAA,CAAApF,CAAAA,CACH,CAAA,CAGAO,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CACT,wDAAA,CACA2F,CAAAA,CACAT,CAAAA,CAAeX,CAAAA,GAAc,MAAA,EAAUA,CAAAA,GAAc,OAAA,CAAU,WAAA,CAAc,WAAA,CAAe,WAC9F,CAAA,CACA,KAAA,CAAO,CACL,kBAAA,CAAoB,CAAA,EAAGI,CAAQ,CAAA,CAAA,CAAA,CAC/B,eAAA,CAAiB,CAAA,EAAGe,CAAK,CAAA,CAAA,CAAA,CACzB,eAAA,CAAiBnB,CAAAA,GAAc,IAAA,CAAO,KAAA,CAAQA,CAAAA,GAAc,MAAA,CAAS,QAAA,CAAWA,IAAc,MAAA,CAAS,MAAA,CAAS,OAClH,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC9BO,IAAMsB,EAAAA,CAAW,CAAC,CACvB,KAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,4CAAA,CACX,OAAA,CAAAzB,CAAAA,CAAU,IAAA,CACV,IAAA,CAAA0B,EAAO,IAAA,CACP,SAAA,CAAA3F,CAAAA,CACA,GAAGG,CACL,CAAA,GAAqB,CACnB,IAAMyF,CAAAA,CACJvF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,kDAAA,CAAoDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACrF,QAAA,CAAA,CAAAE,IAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,wEAAA,CACX,QAAA,CAAA,CAAAkF,CAAAA,CAAO,GAAA,CACPC,CAAAA,EACCnF,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,wBACd,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,gDAAA,CAAkDiG,CAAQ,CAAA,CAC3E,QAAA,CAAAF,CAAAA,CACH,CAAA,CACCG,CAAAA,EACCrF,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CACf,6DAAA,CACAiG,CACF,CAAA,CAAG,aAAA,CAAY,MAAA,CACZ,QAAA,CAAAF,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CAEJ,CAAA,CACCC,CAAAA,EACCnF,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,oEAAA,CACV,QAAA,CAAAmF,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAGF,OAAIxB,CAAAA,CAEA3D,GAAAA,CAAC4E,EAAAA,CAAA,CAAO,SAAA,CAAU,IAAA,CAAK,QAAA,CAAU,CAAA,CAC9B,QAAA,CAAAU,CAAAA,CACH,CAAA,CAIGA,CACT,EAEAN,EAAAA,CAAS,WAAA,CAAc,UAAA,CCpEhB,IAAMO,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAX,CAAAA,CAAQ,GAAA,CAAM,SAAA,CAAAnF,CAAAA,CAAW,GAAGG,CAAM,CAAA,GAAyB,CAC9F,IAAM4F,CAAAA,CAAUD,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAE7B,OACEzF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,oDAAA,CAAsDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACtF,QAAA,CAAA,CAAA4F,CAAAA,CAAQ,IAAI,CAACC,CAAAA,CAAQC,CAAAA,GACpB3F,GAAAA,CAAC,MAAA,CAAA,CAEC,SAAA,CAAU,uCAAA,CACV,KAAA,CAAO,CACL,SAAA,CAAW,qDAAA,CACX,cAAA,CAAgB,CAAA,EAAG2F,CAAAA,CAAId,CAAK,CAAA,CAAA,CAAA,CAC5B,UAAA,CAAYa,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QACvC,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAAA,CARIC,CASP,CACD,CAAA,CACD3F,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAWN,CAAA,CAAA,CACJ,CAEJ,EAEAuF,EAAAA,CAAa,WAAA,CAAc,cAAA,CC1CpB,IAAMK,CAAAA,CAAQpG,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,UAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,QAAA,CAAAoG,CAAAA,CAAU,GAAGhG,CAAM,CAAA,CAAGC,IAE1CC,IAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,6HAAA,CACAO,CACF,EACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAJ,CAAAA,CACAoG,CAAAA,EAAY7F,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qBAAqB,QAAA,CAAA,GAAA,CAAC,CAAA,CAAA,CACrD,CAGN,EAEA4F,CAAAA,CAAM,WAAA,CAAc,OAAA,CCpBpB,IAAME,EAAAA,CAAgBvF,GAAAA,CACpB,0UAAA,CACA,CACE,QAAA,CAAU,CACR,QAAA,CAAU,CACR,IAAA,CAAM,2CAAA,CACN,KAAA,CAAO,EACT,CAAA,CACA,WAAA,CAAa,CACX,IAAA,CAAM,OAAA,CACN,KAAA,CAAO,EACT,CAAA,CACA,YAAA,CAAc,CACZ,IAAA,CAAM,QACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,QAAA,CAAU,KAAA,CACV,YAAa,KAAA,CACb,YAAA,CAAc,KAChB,CACF,CACF,CAAA,CAqBawF,EAAAA,CAAYvG,WAAAA,CAAM,WAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,kBAAA,CAAAsG,CAAAA,CAAoB,KAAA,CAAAC,CAAAA,CAAO,MAAOC,CAAAA,CAAU,QAAA,CAAAvG,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,EAAA,CAAAuG,CAAAA,CAAI,GAAGtG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACrG,IAAMsG,CAAAA,CAAUD,CAAAA,EAAM3G,WAAAA,CAAM,KAAA,GACtB6G,CAAAA,CAAW,CAAC,CAACH,CAAAA,CAEnB,OACEnG,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAA,CAAyB6G,CAAkB,CAAA,CAC3D,QAAA,CAAA,CAAAC,CAAAA,EAASjG,GAAAA,CAAC4F,CAAAA,CAAA,CAAM,OAAA,CAASQ,CAAAA,CAAS,QAAA,CAAUvG,CAAAA,CAAM,QAAA,CAAW,QAAA,CAAAoG,CAAAA,CAAM,CAAA,CAEpElG,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4BAAA,CACZ,QAAA,CAAA,CAAAJ,CAAAA,EACCK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gGACZ,QAAA,CAAAL,CAAAA,CACH,CAAA,CAGFK,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAIsG,EACJ,SAAA,CAAWjH,CAAAA,CAAG2G,EAAAA,CAAc,CAC1B,QAAA,CAAUO,CAAAA,CACV,WAAA,CAAa,CAAC,CAAC1G,CAAAA,CACf,YAAA,CAAc,CAAC,CAACC,CAAAA,CAChB,SAAA,CAAAF,CACF,CAAC,CAAC,CAAA,CACD,GAAGG,CAAAA,CACN,CAAA,CAECD,CAAAA,EACCI,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CACZ,QAAA,CAAAJ,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAECsG,CAAAA,EACClG,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2EAAA,CACV,QAAA,CAAAkG,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAH,EAAAA,CAAU,YAAc,WAAA,CClFjB,IAAMO,EAAAA,CAAW9G,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,EAAW,KAAA,CAAAuG,CAAAA,CAAO,KAAA,CAAAM,CAAAA,CAAO,EAAA,CAAAJ,CAAAA,CAAI,QAAA,CAAApF,CAAAA,CAAU,QAAAyF,CAAAA,CAAS,cAAA,CAAAC,CAAAA,CAAgB,QAAA,CAAAC,CAAAA,CAAU,GAAG7G,CAAM,CAAA,CAAGC,IAAQ,CAC/F,IAAMsG,CAAAA,CAAUD,CAAAA,EAAM3G,WAAAA,CAAM,KAAA,EAAM,CAC5B,CAACmH,EAAWC,CAAY,CAAA,CAAIpH,WAAAA,CAAM,QAAA,CAASiH,CAAAA,EAAkBD,CAAAA,EAAW,KAAK,CAAA,CAEnFhH,YAAM,SAAA,CAAU,IAAM,CAChBgH,CAAAA,GAAY,MAAA,EACdI,CAAAA,CAAaJ,CAAO,EAExB,CAAA,CAAG,CAACA,CAAO,CAAC,CAAA,CAEZ,IAAMK,CAAAA,CAAc,IAAM,CACxB,GAAI9F,CAAAA,CAAU,OACd,IAAM+F,CAAAA,CAAW,CAACH,CAAAA,CAClBC,CAAAA,CAAaE,CAAQ,CAAA,CACjBJ,CAAAA,EACFA,CAAAA,CAAS,CAAE,MAAA,CAAQ,CAAE,OAAA,CAASI,CAAS,CAAE,CAAQ,EAErD,CAAA,CAEA,OACE/G,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,wBAAyBO,CAAS,CAAA,CACnD,QAAA,CAAA,CAAAK,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,SACL,EAAA,CAAIsG,CAAAA,CACJ,IAAA,CAAK,UAAA,CACL,cAAA,CAAcO,CAAAA,CACd,YAAA,CAAYV,CAAAA,CACZ,QAASY,CAAAA,CACT,QAAA,CAAU9F,CAAAA,CACV,SAAA,CAAW5B,CAAAA,CACT,2HAAA,CACA,gEAAA,CACA4B,CAAAA,EAAY,+BACd,CAAA,CACC,GAAGlB,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAY,MAAA,CACZ,SAAA,CAAWb,CAAAA,CACT,mDAAA,CACAwH,CAAAA,CACI,yCAAA,CACA,oEACN,CAAA,CAEC,QAAA,CAAAA,EACC3G,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CAA2B,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,WAAA,CAAY,OAAO,cAAA,CAAe,WAAA,CAAa,CAAA,CAC3G,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,CAAA,CAAE,uBAAA,CAAwB,CAAA,CAC/E,CAAA,CACE,IAAA,CACN,CAAA,CACCiG,CAAAA,EACCjG,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAiG,CAAAA,CAAM,CAAA,CAAA,CAEtE,CAAA,CACCM,CAAAA,EACCvG,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,iCAAA,CAAmC,QAAA,CAAAuG,CAAAA,CAAM,CAAA,CAAA,CAE1D,CAEJ,CACF,EAEAD,EAAAA,CAAS,WAAA,CAAc,UAAA,CCjEhB,IAAMS,EAAAA,CAASvH,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAuG,CAAAA,CAAO,KAAA,CAAAM,CAAAA,CAAO,EAAA,CAAAJ,EAAI,QAAA,CAAApF,CAAAA,CAAU,OAAA,CAAAyF,CAAAA,CAAS,cAAA,CAAAC,CAAAA,CAAgB,QAAA,CAAAC,CAAAA,CAAU,GAAG7G,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC/F,IAAMsG,CAAAA,CAAUD,CAAAA,EAAM3G,WAAAA,CAAM,OAAM,CAC5B,CAACmH,CAAAA,CAAWC,CAAY,CAAA,CAAIpH,WAAAA,CAAM,QAAA,CAASiH,CAAAA,EAAkBD,GAAW,KAAK,CAAA,CAEnFhH,WAAAA,CAAM,SAAA,CAAU,IAAM,CAChBgH,CAAAA,GAAY,MAAA,EACdI,EAAaJ,CAAO,EAExB,CAAA,CAAG,CAACA,CAAO,CAAC,CAAA,CAEZ,IAAMK,EAAc,IAAM,CACxB,GAAI9F,CAAAA,CAAU,OACd,IAAM+F,CAAAA,CAAW,CAACH,EAClBC,CAAAA,CAAaE,CAAQ,CAAA,CACjBJ,CAAAA,EACFA,CAAAA,CAAS,CAAE,MAAA,CAAQ,CAAE,OAAA,CAASI,CAAS,CAAE,CAAQ,EAErD,CAAA,CAEA,OACE/G,IAAAA,CAAC,OAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAA,CAAyBO,CAAS,CAAA,CACnD,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,EAAA,CAAIoG,CAAAA,CACJ,KAAK,QAAA,CACL,cAAA,CAAcO,CAAAA,CACd,OAAA,CAASE,CAAAA,CACT,QAAA,CAAU9F,CAAAA,CACV,SAAA,CAAW5B,EACT,wVAAA,CACAwH,CAAAA,CAAY,gBAAA,CAAmB,kCACjC,CAAA,CACC,GAAG9G,CAAAA,CAEJ,QAAA,CAAAG,IAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,+FAAA,CACAwH,CAAAA,CAAY,eAAA,CAAkB,eAChC,CAAA,CACF,EACF,CAAA,CACCV,CAAAA,EACCjG,GAAAA,CAAC4F,CAAAA,CAAA,CACC,OAAA,CAASQ,CAAAA,CACT,SAAA,CAAU,wHACV,OAAA,CAASS,CAAAA,CAER,QAAA,CAAAZ,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACCM,CAAAA,EACCvG,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,iCAAA,CAAmC,QAAA,CAAAuG,CAAAA,CAAM,CAAA,CAAA,CAE1D,CAEJ,CACF,EAEAQ,EAAAA,CAAO,WAAA,CAAc,QAAA,KCnDRC,EAAAA,CAASxH,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,KAAA,CAAAyG,CAAAA,CAAO,IAAA,CAAAgB,EAAM,OAAA,CAAAhD,CAAAA,CAAS,KAAA,CAAAhC,CAAAA,CAAO,YAAA,CAAAiF,CAAAA,CAAc,QAAA,CAAAR,CAAAA,CAAU,YAAAS,CAAAA,CAAc,kBAAA,CAAoB,KAAA,CAAAZ,CAAAA,CAAO,QAAA,CAAAxF,CAAAA,CAAU,SAAA,CAAArB,CAAU,EAAGI,CAAAA,GAAQ,CAC9H,GAAM,CAACsH,CAAAA,CAAQC,CAAS,CAAA,CAAIjD,QAAAA,CAAS,KAAK,CAAA,CACpC,CAACkD,CAAAA,CAAeC,CAAgB,CAAA,CAAInD,QAAAA,CAAS8C,CAAY,CAAA,CACzD,CAACM,CAAAA,CAAaC,CAAc,CAAA,CAAIrD,QAAAA,CAAS,EAAE,CAAA,CAC3CsD,CAAAA,CAAexG,OAAuB,IAAI,CAAA,CAC1CiF,CAAAA,CAAK3G,WAAAA,CAAM,KAAA,EAAM,CAEjBmI,CAAAA,CAAe1F,CAAAA,GAAU,OACzB2F,CAAAA,CAAeD,CAAAA,CAAe1F,CAAAA,CAAQqF,CAAAA,CACtCO,CAAAA,CAAiB5D,CAAAA,CAAQ,IAAA,CAAM6D,CAAAA,EAAQA,EAAI,KAAA,GAAUF,CAAY,CAAA,CAEvEpD,SAAAA,CAAU,IAAM,CACd,GAAI4C,CAAAA,CAAQ,CACV,IAAMW,CAAAA,CAAQ9D,CAAAA,CAAQ,SAAA,CAAU6D,CAAAA,EAAOA,CAAAA,CAAI,KAAA,GAAUF,CAAY,EACjEH,CAAAA,CAAeM,CAAAA,GAAU,EAAA,CAAKA,CAAAA,CAAQ,CAAC,EACzC,CAAA,KACEN,CAAAA,CAAe,EAAE,EAErB,CAAA,CAAG,CAACL,CAAAA,CAAQQ,CAAAA,CAAc3D,CAAO,CAAC,CAAA,CAElCO,UAAU,IAAM,CACd,IAAMwD,CAAAA,CAAsBC,CAAAA,EAAsB,CAC5CP,CAAAA,CAAa,OAAA,EAAW,CAACA,CAAAA,CAAa,OAAA,CAAQ,QAAA,CAASO,CAAAA,CAAM,MAAc,CAAA,EAC7EZ,CAAAA,CAAU,KAAK,EAEnB,CAAA,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaW,CAAkB,CAAA,CAClD,IAAM,SAAS,mBAAA,CAAoB,WAAA,CAAaA,CAAkB,CAC3E,CAAA,CAAG,EAAE,CAAA,CAEL,IAAME,CAAAA,CAAgBC,CAAAA,EAAwB,CACxCpH,CAAAA,GACC4G,CAAAA,EACHJ,CAAAA,CAAiBY,CAAW,CAAA,CAE9BzB,IAAWyB,CAAW,CAAA,CACtBd,CAAAA,CAAU,KAAK,CAAA,EACjB,CAAA,CAEMe,CAAAA,CAAiBhH,CAAAA,EAA2B,CAC5CL,CAAAA,GAEAK,CAAAA,CAAE,GAAA,GAAQ,OAAA,EAAWA,CAAAA,CAAE,GAAA,GAAQ,GAAA,EACjCA,CAAAA,CAAE,gBAAe,CACbgG,CAAAA,EAAUI,CAAAA,GAAgB,EAAA,CAC5BU,CAAAA,CAAajE,CAAAA,CAAQuD,CAAW,CAAA,CAAG,KAAK,CAAA,CAExCH,CAAAA,CAAU,IAAI,CAAA,EAEPjG,CAAAA,CAAE,GAAA,GAAQ,QAAA,CACnBiG,CAAAA,CAAU,KAAK,CAAA,CACNjG,CAAAA,CAAE,GAAA,GAAQ,WAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACZgG,EAGHK,CAAAA,CAAgBY,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,CAAA,EAAKpE,CAAAA,CAAQ,MAAM,CAAA,CAFpDoD,CAAAA,CAAU,IAAI,CAAA,EAIPjG,CAAAA,CAAE,GAAA,GAAQ,SAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACZgG,CAAAA,CAGHK,EAAgBY,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,CAAA,CAAIpE,CAAAA,CAAQ,MAAA,EAAUA,CAAAA,CAAQ,MAAM,CAAA,CAFrEoD,EAAU,IAAI,CAAA,EAIPjG,CAAAA,CAAE,GAAA,GAAQ,MAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACbgG,GAAQK,CAAAA,CAAe,CAAC,CAAA,EACnBrG,CAAAA,CAAE,GAAA,GAAQ,KAAA,GACnBA,CAAAA,CAAE,cAAA,GACEgG,CAAAA,EAAQK,CAAAA,CAAexD,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAAA,EAEjD,CAAA,CAEA,OACElE,KAAC,KAAA,CAAA,CACC,GAAA,CAAK2H,CAAAA,CACL,SAAA,CAAWvI,CAAAA,CAAG,gCAAA,CAAkCO,CAAS,CAAA,CAExD,QAAA,CAAA,CAAAuG,CAAAA,EACCjG,GAAAA,CAAC4F,CAAAA,CAAA,CACC,OAAA,CAASO,CAAAA,CACT,SAAA,CAAWhH,EAAG4B,CAAAA,EAAY,+BAA+B,CAAA,CAExD,QAAA,CAAAkF,CAAAA,CACH,CAAA,CAGFlG,IAAAA,CAAC,KAAA,CAAA,CACC,IAAKD,CAAAA,CACL,EAAA,CAAIqG,CAAAA,CACJ,IAAA,CAAK,UAAA,CACL,eAAA,CAAeiB,CAAAA,CACf,eAAA,CAAc,UACd,eAAA,CAAe,CAAA,EAAGjB,CAAE,CAAA,QAAA,CAAA,CACpB,eAAA,CAAepF,CAAAA,CACf,QAAA,CAAUA,CAAAA,CAAW,GAAK,CAAA,CAC1B,OAAA,CAAS,IAAM,CAACA,CAAAA,EAAYsG,CAAAA,CAAU,CAACD,CAAM,EAC7C,SAAA,CAAWgB,CAAAA,CACX,SAAA,CAAWjJ,CAAAA,CACT,8EAAA,CACA,iDAAA,CACA,iDAAA,CACA,0DAAA,CACA,8DACA4B,CAAAA,EAAY,2EAAA,CACZqG,CAAAA,EAAU,gEAAA,CACVb,CAAAA,EAAS,2CACX,CAAA,CAEA,QAAA,CAAA,CAAAvG,IAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,gBAAA,CAAkB,CAAC0I,CAAAA,EAAkB,kCAAkC,CAAA,CACxF,QAAA,CAAAA,CAAAA,CAAiBA,CAAAA,CAAe,KAAA,CAAQV,CAAAA,CAC3C,CAAA,CACAnH,GAAAA,CAAC,KAAA,CAAA,CACC,MAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,UAAWb,CAAAA,CACT,8GAAA,CACAiI,CAAAA,EAAU,YACZ,CAAA,CAEA,QAAA,CAAApH,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAE,cAAA,CAAc,CAAA,CACxB,CAAA,CAAA,CACF,CAAA,CAECoH,CAAAA,EACCpH,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2MACb,QAAA,CAAAA,GAAAA,CAAC,IAAA,CAAA,CACC,EAAA,CAAI,CAAA,EAAGmG,CAAE,CAAA,QAAA,CAAA,CACT,IAAA,CAAK,UACL,uBAAA,CAAuBqB,CAAAA,GAAgB,EAAA,CAAK,CAAA,EAAGrB,CAAE,CAAA,QAAA,EAAWqB,CAAW,CAAA,CAAA,CAAK,OAC5E,SAAA,CAAU,gDAAA,CAET,QAAA,CAAAvD,CAAAA,CAAQ,GAAA,CAAI,CAACqE,CAAAA,CAAQP,CAAAA,GACpB/H,GAAAA,CAAC,IAAA,CAAA,CAEC,EAAA,CAAI,CAAA,EAAGmG,CAAE,CAAA,QAAA,EAAW4B,CAAK,CAAA,CAAA,CACzB,KAAK,QAAA,CACL,eAAA,CAAeH,CAAAA,GAAiBU,CAAAA,CAAO,KAAA,CACvC,OAAA,CAAS,IAAMJ,CAAAA,CAAaI,EAAO,KAAK,CAAA,CACxC,YAAA,CAAc,IAAMb,CAAAA,CAAeM,CAAK,CAAA,CACxC,SAAA,CAAW5I,EACT,iFAAA,CACA,wFAAA,CACCyI,CAAAA,GAAiBU,CAAAA,CAAO,KAAA,EAASd,CAAAA,GAAgBO,CAAAA,CAC9C,mEAAA,CACA,kCACN,CAAA,CAEA,QAAA,CAAAhI,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAK,SAAA,CAAU,iBAAA,CAAmB,QAAA,CAAAsI,CAAAA,CAAO,KAAA,CAAM,CAAA,CAC/CV,CAAAA,GAAiBU,CAAAA,CAAO,OACvBtI,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,QAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,+BAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,UAAA,CAAA,CAAS,OAAO,gBAAA,CAAiB,CAAA,CACpC,CAAA,CAAA,CAEJ,CAAA,CAAA,CAhCKsI,CAAAA,CAAO,KAiCd,CACD,CAAA,CACH,EACF,CAAA,CAGD/B,CAAAA,EACCvG,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2EAAA,CACV,QAAA,CAAAuG,CAAAA,CACH,EAEFvG,GAAAA,CAAC,OAAA,CAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAMiH,CAAAA,CAAM,KAAA,CAAOW,CAAAA,EAAgB,GAAI,CAAA,CAAA,CAC9D,CAEJ,CACF,EAEAZ,EAAAA,CAAO,WAAA,CAAc,QAAA,CCrMd,SAASuB,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAxE,CAAAA,CAA8B,EAAC,CAC/B,CACA,GAAM,CACJ,IAAA,CAAAyE,CAAAA,CAAO,QAAA,CACP,KAAA,CAAAC,CAAAA,CAAQ,QAAA,CACR,UAAA,CAAAC,EAAa,CAAA,CACb,WAAA,CAAAC,CAAAA,CAAc,CAAA,CACd,MAAA,CAAAzB,CAAAA,CAAS,KACX,CAAA,CAAInD,EAEE,CAAC6E,CAAAA,CAAUC,CAAW,CAAA,CAAI3E,QAAAA,CAAmB,CAAE,GAAA,CAAK,CAAA,CAAG,KAAM,CAAE,CAAC,CAAA,CAChE,CAAC4E,CAAAA,CAAcC,CAAe,CAAA,CAAI7E,QAAAA,CAAS,KAAK,CAAA,CAEhD8E,CAAAA,CAAiBC,WAAAA,CAAY,IAAM,CACvC,GAAI,CAACX,CAAAA,CAAW,SAAW,CAACC,CAAAA,CAAW,OAAA,EAAW,CAACrB,CAAAA,CAAQ,OAE3D,IAAMgC,CAAAA,CAAcZ,CAAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB,CACvDa,CAAAA,CAAcZ,CAAAA,CAAW,OAAA,CAAQ,qBAAA,GAEnCa,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAO,CAAA,CAGX,OAAQb,CAAAA,EACN,KAAK,MACHY,CAAAA,CAAMF,CAAAA,CAAY,GAAA,CAAMC,CAAAA,CAAY,MAAA,CAAST,CAAAA,CAC7C,MACF,KAAK,SACHU,CAAAA,CAAMF,CAAAA,CAAY,MAAA,CAASR,CAAAA,CAC3B,MACF,KAAK,MAAA,CACHW,CAAAA,CAAOH,EAAY,IAAA,CAAOC,CAAAA,CAAY,KAAA,CAAQT,CAAAA,CAC9C,MACF,KAAK,OAAA,CACHW,CAAAA,CAAOH,EAAY,KAAA,CAAQR,CAAAA,CAC3B,KACJ,CAGA,GAAIF,CAAAA,GAAS,KAAA,EAASA,CAAAA,GAAS,SAC7B,OAAQC,CAAAA,EACN,KAAK,OAAA,CACHY,CAAAA,CAAOH,CAAAA,CAAY,IAAA,CAAOP,EAC1B,MACF,KAAK,QAAA,CACHU,CAAAA,CAAOH,CAAAA,CAAY,IAAA,CAAQA,CAAAA,CAAY,KAAA,CAAQ,CAAA,CAAMC,CAAAA,CAAY,KAAA,CAAQ,CAAA,CAAKR,CAAAA,CAC9E,MACF,KAAK,KAAA,CACHU,EAAOH,CAAAA,CAAY,KAAA,CAAQC,CAAAA,CAAY,KAAA,CAAQR,CAAAA,CAC/C,KACJ,CAAA,KAEA,OAAQF,GACN,KAAK,OAAA,CACHW,CAAAA,CAAMF,CAAAA,CAAY,GAAA,CAAMP,CAAAA,CACxB,MACF,KAAK,QAAA,CACHS,CAAAA,CAAMF,CAAAA,CAAY,GAAA,CAAOA,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAMC,CAAAA,CAAY,OAAS,CAAA,CAAKR,CAAAA,CAC9E,MACF,KAAK,KAAA,CACHS,CAAAA,CAAMF,CAAAA,CAAY,MAAA,CAASC,EAAY,MAAA,CAASR,CAAAA,CAChD,KACJ,CAIF,IAAMW,CAAAA,CAAU,CAAA,CACVC,CAAAA,CAAgB,OAAO,UAAA,CACvBC,CAAAA,CAAiB,MAAA,CAAO,WAAA,CAE1BH,CAAAA,CAAOC,CAAAA,GAASD,CAAAA,CAAOC,CAAAA,CAAAA,CACvBD,EAAOF,CAAAA,CAAY,KAAA,CAAQI,CAAAA,CAAgBD,CAAAA,GAC7CD,CAAAA,CAAOE,CAAAA,CAAgBJ,CAAAA,CAAY,KAAA,CAAQG,CAAAA,CAAAA,CAEzCF,CAAAA,CAAME,CAAAA,GAASF,CAAAA,CAAME,CAAAA,CAAAA,CACrBF,CAAAA,CAAMD,CAAAA,CAAY,MAAA,CAASK,EAAiBF,CAAAA,GAC9CF,CAAAA,CAAMI,CAAAA,CAAiBL,CAAAA,CAAY,MAAA,CAASG,CAAAA,CAAAA,CAG9CT,CAAAA,CAAY,CAAE,IAAAO,CAAAA,CAAK,IAAA,CAAAC,CAAK,CAAC,CAAA,CACzBN,CAAAA,CAAgB,IAAI,EACtB,EAAG,CAACT,CAAAA,CAAYC,CAAAA,CAAYC,CAAAA,CAAMC,CAAAA,CAAOC,CAAAA,CAAYC,CAAAA,CAAazB,CAAM,CAAC,CAAA,CAEzE,OAAAuC,eAAAA,CAAgB,IAAM,CACpB,GAAI,CAACvC,CAAAA,CAAQ,CACP4B,CAAAA,EAAcC,CAAAA,CAAgB,KAAK,CAAA,CACvC,MACF,CAEAC,CAAAA,EAAe,CAGf,IAAMU,CAAAA,CAAiB,IAAI,cAAA,CAAe,IAAMV,CAAAA,EAAgB,CAAA,CAChE,OAAIV,EAAW,OAAA,EAASoB,CAAAA,CAAe,OAAA,CAAQpB,CAAAA,CAAW,OAAO,CAAA,CAC7DC,CAAAA,CAAW,OAAA,EAASmB,CAAAA,CAAe,OAAA,CAAQnB,CAAAA,CAAW,OAAO,CAAA,CAEjE,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUS,CAAc,CAAA,CAChD,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUA,CAAAA,CAAgB,IAAI,CAAA,CAE/C,IAAM,CACXU,CAAAA,CAAe,UAAA,EAAW,CAC1B,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUV,CAAc,CAAA,CACnD,OAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAAA,CAAgB,IAAI,EAC3D,CACF,CAAA,CAAG,CAAC9B,EAAQ8B,CAAAA,CAAgBV,CAAAA,CAAYC,CAAU,CAAC,CAAA,CAE5C,CACL,QAAA,CAAAK,CAAAA,CACA,aAAAE,CAAAA,CACA,cAAA,CAAAE,CACF,CACF,CC1HA,IAAMW,EAAAA,CAAiBC,aAAAA,CAA+C,MAAS,CAAA,CAQxE,SAASC,EAAAA,CAAQ,CAAE,QAAA,CAAAtK,EAAU,IAAA,CAAAuK,CAAAA,CAAM,YAAA,CAAAC,CAAa,CAAA,CAAiB,CACtE,GAAM,CAACC,CAAAA,CAAcC,CAAe,CAAA,CAAI/F,QAAAA,CAAS,KAAK,CAAA,CAChDoE,CAAAA,CAAatH,MAAAA,CAAoB,IAAI,CAAA,CAErCyG,CAAAA,CAAeqC,CAAAA,GAAS,MAAA,CACxB5C,CAAAA,CAASO,CAAAA,CAAeqC,CAAAA,CAAOE,CAAAA,CAC/B7C,EAAa+C,CAAAA,EAAqB,CACjCzC,CAAAA,EACHwC,CAAAA,CAAgBC,CAAO,CAAA,CAEzBH,CAAAA,GAAeG,CAAO,EACxB,CAAA,CAEA,OACEpK,GAAAA,CAAC6J,EAAAA,CAAe,QAAA,CAAf,CAAwB,KAAA,CAAO,CAAE,OAAAzC,CAAAA,CAAQ,SAAA,CAAAC,CAAAA,CAAW,UAAA,CAAAmB,CAAW,CAAA,CAC9D,QAAA,CAAAxI,GAAAA,CAAC,OAAI,SAAA,CAAU,uBAAA,CACZ,QAAA,CAAAP,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAAS4K,GAAe,CAAE,SAAA,CAAA3K,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAwB,CACrF,IAAMyK,CAAAA,CAAUC,UAAAA,CAAWV,EAAc,CAAA,CACzC,GAAI,CAACS,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,IAAMzD,CAAAA,CAAezF,CAAAA,EAAwB,CAC3CkJ,CAAAA,CAAQ,SAAA,CAAU,CAACA,CAAAA,CAAQ,MAAM,CAAA,CACjCzK,CAAAA,CAAM,OAAA,GAAUuB,CAAQ,EAC1B,CAAA,CAEA,OACEpB,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKsK,CAAAA,CAAQ,UAAA,CACb,KAAK,QAAA,CACL,eAAA,CAAc,QAAA,CACd,eAAA,CAAeA,CAAAA,CAAQ,MAAA,CAAS,MAAA,CAAS,OAAA,CACzC,QAASzD,CAAAA,CACT,SAAA,CAAW1H,CAAAA,CAAG,yCAAA,CAA2CO,CAAS,CAAA,CACjE,GAAGG,CAAAA,CAEH,SAAAJ,CAAAA,CACH,CAEJ,CAQO,SAAS+K,EAAAA,CAAe,CAAE,SAAA,CAAA9K,CAAAA,CAAW,SAAAD,CAAAA,CAAU,KAAA,CAAAkJ,CAAAA,CAAQ,QAAA,CAAU,UAAA,CAAAC,CAAAA,CAAa,CAAA,CAAG,GAAG/I,CAAM,CAAA,CAAwB,CACvH,IAAMyK,CAAAA,CAAUC,UAAAA,CAAWV,EAAc,CAAA,CACzC,GAAI,CAACS,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,IAAM7B,EAAavH,MAAAA,CAAuB,IAAI,CAAA,CACxC,CAAE,QAAA,CAAA4H,CAAAA,CAAU,YAAA,CAAAE,CAAa,EAAIT,EAAAA,CAAY+B,CAAAA,CAAQ,UAAA,CAAY7B,CAAAA,CAAY,CAC7E,IAAA,CAAM,QAAA,CACN,KAAA,CAAAE,EACA,UAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ0B,CAAAA,CAAQ,MAClB,CAAC,CAAA,CAsBD,GApBA9F,UAAU,IAAM,CACd,GAAI8F,CAAAA,CAAQ,MAAA,CAAQ,CAClB,IAAMG,CAAAA,CAAsBrJ,GAAkB,CAE1CqH,CAAAA,CAAW,OAAA,EACX,CAACA,CAAAA,CAAW,OAAA,CAAQ,QAAA,CAASrH,CAAAA,CAAE,MAAc,CAAA,EAC7CkJ,CAAAA,CAAQ,UAAA,CAAW,OAAA,EACnB,CAACA,CAAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,SAASlJ,CAAAA,CAAE,MAAc,CAAA,EAErDkJ,CAAAA,CAAQ,SAAA,CAAU,KAAK,EAE3B,CAAA,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaG,CAAkB,CAAA,CAClD,IAAM,CACX,QAAA,CAAS,oBAAoB,WAAA,CAAaA,CAAkB,EAC9D,CACF,CACF,CAAA,CAAG,CAACH,CAAAA,CAAQ,OAAQA,CAAAA,CAAQ,SAAA,CAAWA,CAAAA,CAAQ,UAAU,CAAC,CAAA,CAEtD,CAACA,CAAAA,CAAQ,OAAQ,OAAO,IAAA,CAE5B,IAAMI,CAAAA,CAAqB,IAAM,CAE/B,IAAMhC,CAAAA,CAAOI,EAAS,GAAA,EAAOwB,CAAAA,CAAQ,UAAA,CAAW,OAAA,EAAS,qBAAA,EAAsB,CAAE,GAAA,EAAO,CAAA,CAAA,CAAK,SAAW,KAAA,CAExG,OAAI5B,CAAAA,GAAS,QAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,UAAA,CAC1BA,CAAAA,GAAU,MAAc,WAAA,CACrB,YAAA,CAELD,CAAAA,GAAS,KAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,aAAA,CAC1BA,CAAAA,GAAU,MAAc,cAAA,CACrB,eAAA,CAEF,eACT,CAAA,CAEA,OAAOgC,YAAAA,CACL3K,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKyI,CAAAA,CACL,KAAA,CAAO,CACL,GAAA,CAAKK,CAAAA,CAAS,GAAA,CACd,IAAA,CAAMA,EAAS,IAAA,CACf,eAAA,CAAiB4B,CAAAA,EACnB,CAAA,CACA,SAAA,CAAWvL,CAAAA,CACT,+KAAA,CACA6J,EAAe,2CAAA,CAA8C,WAAA,CAC7DtJ,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,EACA,QAAA,CAAS,IACX,CACF,CC9HA,IAAMmL,EAAAA,CAAkBd,aAAAA,CAAgD,MAAS,CAAA,CAW1E,SAASe,EAAAA,CAAS,CACvB,SAAApL,CAAAA,CACA,KAAA,CAAOqL,CAAAA,CACP,YAAA,CAAA5D,CAAAA,CAAe,EAAA,CACf,aAAA,CAAA6D,CAAAA,CACA,OAAAC,CAAAA,CAAS,CAACxF,CAAAA,CAAMyF,CAAAA,GAAWzF,CAAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAASyF,EAAO,WAAA,EAAa,CAAA,CAC3E,UAAA,CAAAC,CAAAA,CAAa,IACf,CAAA,CAAkB,CAChB,GAAM,CAAC5D,CAAAA,CAAeC,CAAgB,CAAA,CAAInD,QAAAA,CAAS8C,CAAY,CAAA,CACzD,CAACiE,CAAAA,CAAYC,CAAa,CAAA,CAAIhH,QAAAA,CAAS,EAAE,CAAA,CACzC,CAACgD,CAAAA,CAAQC,CAAS,CAAA,CAAIjD,QAAAA,CAAS,KAAK,CAAA,CACpC,CAACiH,CAAAA,CAAOC,CAAQ,CAAA,CAAIlH,SAAuD,IAAI,GAAK,CAAA,CACpF,CAACoD,CAAAA,CAAaC,CAAc,CAAA,CAAIrD,QAAAA,CAAS,EAAE,CAAA,CAE3CuD,CAAAA,CAAemD,CAAAA,GAAoB,MAAA,CACnC7I,CAAAA,CAAQ0F,CAAAA,CAAemD,CAAAA,CAAkBxD,CAAAA,CAEzCiE,EAAqBzE,CAAAA,EAAqB,CACzCa,CAAAA,EAAcJ,CAAAA,CAAiBT,CAAQ,CAAA,CAC5CiE,CAAAA,GAAgBjE,CAAQ,EACxBO,CAAAA,CAAU,KAAK,CAAA,CACf+D,CAAAA,CAAc,EAAE,EAClB,CAAA,CAEMI,CAAAA,CAAehM,YAAM,WAAA,CAAY,CAAC2G,CAAAA,CAAYX,CAAAA,CAAcvD,CAAAA,IAChEqJ,CAAAA,CAASjD,CAAAA,EAAQ,CACf,IAAMoD,CAAAA,CAAO,IAAI,GAAA,CAAIpD,CAAI,CAAA,CACzB,OAAAoD,CAAAA,CAAK,IAAItF,CAAAA,CAAI,CAAE,IAAA,CAAAX,CAAAA,CAAM,KAAA,CAAAvD,CAAM,CAAC,CAAA,CACrBwJ,CACT,CAAC,CAAA,CACM,IAAM,CACXH,CAAAA,CAASjD,CAAAA,EAAQ,CACf,IAAMoD,EAAO,IAAI,GAAA,CAAIpD,CAAI,CAAA,CACzB,OAAAoD,CAAAA,CAAK,MAAA,CAAOtF,CAAE,EACPsF,CACT,CAAC,EACH,CAAA,CAAA,CACC,EAAE,CAAA,CAECC,CAAAA,CAAeC,QAAQ,IACpB,KAAA,CAAM,IAAA,CAAKN,CAAAA,CAAM,OAAA,EAAS,CAAA,CAC9B,MAAA,CAAO,CAAC,CAACO,CAAAA,CAAGC,CAAI,CAAA,GAAMb,CAAAA,CAAOa,CAAAA,CAAK,IAAA,CAAMV,CAAU,CAAC,CAAA,CACnD,GAAA,CAAI,CAAC,CAAChF,CAAAA,CAAI0F,CAAI,CAAA,IAAO,CAAE,EAAA,CAAA1F,CAAAA,CAAI,KAAA,CAAO0F,CAAAA,CAAK,KAAM,CAAA,CAAE,CAAA,CACjD,CAACR,EAAOF,CAAAA,CAAYH,CAAM,CAAC,CAAA,CAExBc,CAAAA,CAAkBJ,CAAAA,CAAa,MAAA,CAAS,CAAA,CAE9C,OAAAlH,SAAAA,CAAU,IAAM,CAEZiD,CAAAA,CADEL,CAAAA,CACa,CAAA,CAEA,EAFC,EAIpB,EAAG,CAACA,CAAM,CAAC,CAAA,CAGTpH,GAAAA,CAAC4K,EAAAA,CAAgB,QAAA,CAAhB,CAAyB,MAAO,CAC/B,KAAA,CAAA3I,CAAAA,CACA,aAAA,CAAesJ,CAAAA,CACf,UAAA,CAAAJ,CAAAA,CACA,aAAA,CAAAC,EACA,MAAA,CAAAhE,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,YAAA,CAAAmE,CAAAA,CACA,aAAA,CAAe,CAACrF,EAAIX,CAAAA,GAASwF,CAAAA,CAAOxF,CAAAA,CAAM2F,CAAU,CAAA,CACpD,eAAA,CAAAW,CAAAA,CACA,WAAA,CAAAtE,EACA,cAAA,CAAAC,CAAAA,CACA,YAAA,CAAAiE,CACF,CAAA,CACG,QAAA,CAAAR,CAAAA,CACClL,GAAAA,CAAC+J,EAAAA,CAAA,CAAQ,IAAA,CAAM3C,CAAAA,CAAQ,YAAA,CAAcC,CAAAA,CAClC,QAAA,CAAA5H,CAAAA,CACH,EAEAA,CAAAA,CAEJ,CAEJ,CAEO,SAASsM,EAAAA,CAAgB,CAAE,SAAA,CAAArM,CAAAA,CAAW,SAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAkD,CAChH,IAAMyK,CAAAA,CAAUC,UAAAA,CAAWK,EAAe,CAAA,CAC1C,OACE7K,IAAAA,CAACsK,EAAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,eAAA,CAAeC,GAAS,MAAA,CACxB,eAAA,CAAc,SAAA,CACd,SAAA,CAAWnL,CAAAA,CACT,qaAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAJ,CAAAA,CACDO,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,KACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,YAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,iBAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,cAAA,CAAc,CAAA,CACxB,CAAA,CAAA,CACF,CAEJ,CAEO,SAASgM,EAAAA,CAAgB,CAAE,SAAA,CAAAtM,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,EAAyC,CACvG,OACEG,GAAAA,CAACwK,EAAAA,CAAA,CAAe,SAAA,CAAWrL,CAAAA,CAAG,eAAA,CAAiBO,CAAS,CAAA,CAAG,KAAA,CAAM,OAAA,CAAS,GAAGG,CAAAA,CAC1E,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAASwM,EAAAA,CAAc,CAAE,SAAA,CAAAvM,CAAAA,CAAW,WAAA,CAAAyH,CAAAA,CAAc,WAAA,CAAa,GAAGtH,CAAM,CAAA,CAAgD,CAC7H,IAAMyK,CAAAA,CAAUC,UAAAA,CAAWK,EAAe,CAAA,CAC1C,GAAI,CAACN,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,IAAMlC,EAAiBhH,CAAAA,EAA6C,CAC9DA,CAAAA,CAAE,GAAA,GAAQ,WAAA,EACZA,CAAAA,CAAE,cAAA,EAAe,CACjBkJ,CAAAA,CAAQ,cAAA,CAAgBjC,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,CAAA,EAAKiC,CAAAA,CAAQ,YAAA,CAAa,MAAM,GAChElJ,CAAAA,CAAE,GAAA,GAAQ,SAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACjBkJ,CAAAA,CAAQ,cAAA,CAAgBjC,IAAUA,CAAAA,CAAO,CAAA,CAAIiC,CAAAA,CAAQ,YAAA,CAAa,MAAA,EAAUA,CAAAA,CAAQ,YAAA,CAAa,MAAM,GAC9FlJ,CAAAA,CAAE,GAAA,GAAQ,OAAA,EACnBA,CAAAA,CAAE,cAAA,EAAe,CACbkJ,CAAAA,CAAQ,WAAA,GAAgB,IAAMA,CAAAA,CAAQ,YAAA,CAAaA,CAAAA,CAAQ,WAAW,CAAA,EACxEA,CAAAA,CAAQ,aAAA,CAAcA,CAAAA,CAAQ,aAAaA,CAAAA,CAAQ,WAAW,CAAA,CAAG,KAAK,CAAA,EAE/DlJ,CAAAA,CAAE,GAAA,GAAQ,QAAA,EACnBkJ,EAAQ,SAAA,CAAU,KAAK,CAAA,CAEzBzK,CAAAA,CAAM,SAAA,GAAYuB,CAAC,EACrB,CAAA,CAEA,OACErB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,kCAAA,CACV,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,YACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,eAAe,OAAA,CAEf,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,gBAAA,CAAiB,CAAA,CAAA,CAC3B,CAAA,CACAA,IAAC,OAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,6MAAA,CACAO,CACF,CAAA,CACA,WAAA,CAAayH,CAAAA,CACb,MAAOmD,CAAAA,CAAQ,UAAA,CACf,QAAA,CAAWlJ,CAAAA,EAAMkJ,CAAAA,CAAQ,aAAA,CAAclJ,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACrD,SAAA,CAAWgH,CAAAA,CACX,mBAAA,CAAkB,MAAA,CAClB,uBAAA,CAAuBkC,CAAAA,CAAQ,WAAA,GAAgB,GAAKA,CAAAA,CAAQ,YAAA,CAAaA,CAAAA,CAAQ,WAAW,CAAA,EAAG,EAAA,CAAK,MAAA,CACnG,GAAGzK,CAAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAEO,SAASqM,EAAAA,CAAa,CAAE,SAAA,CAAAxM,EAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACpG,OACEG,GAAAA,CAAC,OACC,IAAA,CAAK,SAAA,CACL,SAAA,CAAWb,CAAAA,CAAG,qDAAA,CAAuDO,CAAS,CAAA,CAC7E,GAAGG,EAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS0M,EAAAA,CAAc,CAAE,SAAA,CAAAzM,EAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACrG,IAAMyK,CAAAA,CAAUC,WAAWK,EAAe,CAAA,CAC1C,GAAI,CAACN,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAE1E,OAAIA,CAAAA,CAAQ,eAAA,CAAwB,IAAA,CAGlCtK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,2DAAA,CAA6DO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7F,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAQO,SAAS2M,EAAAA,CAAa,CAAE,SAAA,CAAA1M,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,SAAAxC,CAAAA,CAAU,SAAA,CAAA4M,CAAAA,CAAW,GAAGxM,CAAM,CAAA,CAAsB,CACnG,IAAMyK,EAAUC,UAAAA,CAAWK,EAAe,CAAA,CAC1C,GAAI,CAACN,CAAAA,CAAS,MAAM,IAAI,MAAM,2CAA2C,CAAA,CAEzE,IAAMnE,CAAAA,CAAK3G,WAAAA,CAAM,KAAA,EAAM,CACjBgG,CAAAA,CAAO6G,IAAc,OAAO5M,CAAAA,EAAa,QAAA,CAAWA,CAAAA,CAAWwC,CAAAA,CAAAA,CAC/DqK,CAAAA,CAAYhC,CAAAA,CAAQ,aAAA,CAAcnE,EAAIX,CAAI,CAAA,CAC1C+G,CAAAA,CAAajC,CAAAA,CAAQ,KAAA,GAAUrI,CAAAA,CAE/BuK,CAAAA,CAAYlC,CAAAA,CAAQ,aAAa,SAAA,CAAUuB,CAAAA,EAAQA,CAAAA,CAAK,EAAA,GAAO1F,CAAE,CAAA,CACjEsG,CAAAA,CAAWnC,CAAAA,CAAQ,cAAgBkC,CAAAA,CAMzC,OAJAhI,SAAAA,CAAU,IACD8F,CAAAA,CAAQ,YAAA,CAAanE,CAAAA,CAAIX,CAAAA,CAAMvD,CAAK,CAAA,CAC1C,CAACkE,CAAAA,CAAIX,CAAAA,CAAMvD,CAAAA,CAAOqI,CAAAA,CAAQ,YAAY,CAAC,CAAA,CAErCgC,CAAAA,CAGHvM,IAAAA,CAAC,KAAA,CAAA,CACC,EAAA,CAAIoG,CAAAA,CACJ,IAAA,CAAK,QAAA,CACL,gBAAeoG,CAAAA,CACf,OAAA,CAAS,IAAMjC,CAAAA,CAAQ,aAAA,CAAcrI,CAAK,CAAA,CAC1C,YAAA,CAAc,IAAMqI,CAAAA,CAAQ,cAAA,CAAekC,CAAS,CAAA,CACpD,SAAA,CAAWrN,CAAAA,CACT,oHAAA,CACA,kCAAA,CACA,yHACA,gEAAA,CACA,wFAAA,CAAA,CACCoN,CAAAA,EAAcE,CAAAA,GAAa,gEAAA,CAC5B/M,CACF,CAAA,CACC,GAAGG,EAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,cAAA,CACAoN,CAAAA,CAAa,aAAA,CAAgB,WAC/B,CAAA,CACA,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,YACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CAEf,QAAA,CAAAvM,GAAAA,CAAC,UAAA,CAAA,CAAS,MAAA,CAAO,gBAAA,CAAiB,CAAA,CACpC,EACCP,CAAAA,CAAAA,CACH,CAAA,CAtCqB,IAwCzB,CCzRO,IAAMiN,EAAAA,CAASlN,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,SAAA,CAAAE,EAAW,KAAA,CAAOoL,CAAAA,CAAiB,YAAA,CAAA5D,CAAAA,CAAe,CAAA,CAAG,GAAA,CAAAyF,CAAAA,CAAM,CAAA,CAAG,IAAAC,CAAAA,CAAM,GAAA,CAAK,IAAA,CAAAC,CAAAA,CAAO,CAAA,CAAG,QAAA,CAAAnG,CAAAA,CAAU,QAAA,CAAA3F,EAAU,GAAGlB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC5H,GAAM,CAACwH,CAAAA,CAAeC,CAAgB,CAAA,CAAInD,QAAAA,CAAS8C,CAAY,CAAA,CACzDS,CAAAA,CAAemD,CAAAA,GAAoB,MAAA,CACnC7I,CAAAA,CAAQ0F,CAAAA,CAAemD,CAAAA,CAAkBxD,CAAAA,CACzCwF,CAAAA,CAAW5L,MAAAA,CAAuB,IAAI,CAAA,CAEtC6L,CAAAA,CAAAA,CAAe9K,EAAQ0K,CAAAA,GAAQC,CAAAA,CAAMD,CAAAA,CAAAA,CAAQ,GAAA,CAE7CxL,CAAAA,CAAagI,WAAAA,CAAa6D,CAAAA,EAAoB,CAClD,GAAIjM,CAAAA,EAAY,CAAC+L,CAAAA,CAAS,OAAA,CAAS,OAEnC,IAAMxL,CAAAA,CAAOwL,CAAAA,CAAS,QAAQ,qBAAA,EAAsB,CAC9CG,CAAAA,CAAQ3L,CAAAA,CAAK,KAAA,CACbiI,CAAAA,CAAOjI,CAAAA,CAAK,IAAA,CAEdwF,GAAakG,CAAAA,CAAUzD,CAAAA,EAAQ0D,CAAAA,EAAUL,CAAAA,CAAMD,CAAAA,CAAAA,CAAOA,CAAAA,CAG1D7F,CAAAA,CAAW,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAU6F,CAAG,CAAA,CAAGC,CAAG,CAAA,CAGhD,IAAMM,EAAQ,IAAA,CAAK,KAAA,CAAA,CAAOpG,CAAAA,CAAW6F,CAAAA,EAAOE,CAAI,CAAA,CAChD/F,CAAAA,CAAW6F,CAAAA,CAAMO,EAAQL,CAAAA,CAGzB/F,CAAAA,CAAW,MAAA,CAAOA,CAAAA,CAAS,OAAA,CAAQ,EAAE,CAAC,CAAA,CAEjCa,CAAAA,EACHJ,CAAAA,CAAiBT,CAAQ,CAAA,CAE3BJ,CAAAA,GAAWI,CAAQ,EACrB,CAAA,CAAG,CAAC/F,CAAAA,CAAU4G,CAAAA,CAAciF,CAAAA,CAAKD,CAAAA,CAAKjG,CAAAA,CAAUmG,CAAI,CAAC,CAAA,CAE/CM,EAAmB/L,CAAAA,EAAwB,CAC/C,GAAIL,CAAAA,CAAU,OACdI,CAAAA,CAAWC,CAAAA,CAAE,OAAO,EAEpB,IAAMgM,CAAAA,CAAmBhM,CAAAA,EAAkB,CACzCD,CAAAA,CAAWC,CAAAA,CAAE,OAAO,EACtB,EAEMiM,CAAAA,CAAgB,IAAM,CAC1B,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaD,CAAe,CAAA,CACzD,SAAS,mBAAA,CAAoB,SAAA,CAAWC,CAAa,EACvD,CAAA,CAEA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaD,CAAe,CAAA,CACtD,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWC,CAAa,EACpD,CAAA,CAEMC,CAAAA,CAAoBlM,GAAwB,CAChD,GAAIL,CAAAA,CAAU,OACd,IAAMwM,CAAAA,CAAanM,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC1BmM,CAAAA,EACFpM,CAAAA,CAAWoM,CAAAA,CAAW,OAAO,CAAA,CAG/B,IAAMC,EAAmBpM,CAAAA,EAAkB,CACzC,IAAMqM,CAAAA,CAAYrM,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CACzBqM,GACFtM,CAAAA,CAAWsM,CAAAA,CAAU,OAAO,EAEhC,CAAA,CAEMC,CAAAA,CAAiB,IAAM,CAC3B,SAAS,mBAAA,CAAoB,WAAA,CAAaF,CAAe,CAAA,CACzD,QAAA,CAAS,mBAAA,CAAoB,UAAA,CAAYE,CAAc,EACzD,CAAA,CAEA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaF,CAAAA,CAAiB,CAAE,OAAA,CAAS,KAAM,CAAC,CAAA,CAC1E,QAAA,CAAS,gBAAA,CAAiB,UAAA,CAAYE,CAAc,EACtD,CAAA,CA2BA,OACE3N,KAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,QAAA,CACL,eAAA,CAAe6M,CAAAA,CACf,eAAA,CAAeC,EACf,eAAA,CAAe3K,CAAAA,CACf,eAAA,CAAelB,CAAAA,CACf,QAAA,CAAUA,CAAAA,CAAW,EAAA,CAAK,CAAA,CAC1B,SAAA,CAlCmBK,CAAAA,EAA2B,CAChD,GAAIL,CAAAA,CAAU,OAEd,IAAI+F,CAAAA,CAAW7E,EACf,GAAIb,CAAAA,CAAE,GAAA,GAAQ,YAAA,EAAgBA,CAAAA,CAAE,GAAA,GAAQ,SAAA,CACtC0F,CAAAA,CAAW,KAAK,GAAA,CAAI7E,CAAAA,CAAQ4K,CAAAA,CAAMD,CAAG,CAAA,CAAA,KAAA,GAC5BxL,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAeA,EAAE,GAAA,GAAQ,WAAA,CAC5C0F,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAI7E,CAAAA,CAAQ4K,CAAAA,CAAMF,CAAG,UAC5BvL,CAAAA,CAAE,GAAA,GAAQ,MAAA,CACnB0F,CAAAA,CAAW6F,CAAAA,CAAAA,KAAAA,GACFvL,CAAAA,CAAE,GAAA,GAAQ,KAAA,CACnB0F,EAAW8F,CAAAA,CAAAA,KAEX,OAGFxL,CAAAA,CAAE,cAAA,EAAe,CACb0F,CAAAA,GAAa7E,CAAAA,GACV0F,CAAAA,EACHJ,EAAiBT,CAAQ,CAAA,CAE3BJ,CAAAA,GAAWI,CAAQ,CAAA,EAEvB,CAAA,CAYI,SAAA,CAAW3H,CAAAA,CACT,sEACA4B,CAAAA,EAAY,+BAAA,CACZrB,CACF,CAAA,CACA,WAAA,CAAayN,CAAAA,CACb,YAAA,CAAcG,CAAAA,CACb,GAAGzN,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK8M,CAAAA,CACL,SAAA,CAAU,uJAEV,QAAA,CAAA9M,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,wGAAA,CACV,KAAA,CAAO,CAAE,KAAA,CAAO,GAAG+M,CAAU,CAAA,CAAA,CAAI,CAAA,CACnC,CAAA,CACF,CAAA,CACA/M,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,8MACV,KAAA,CAAO,CAAE,IAAA,CAAM,CAAA,KAAA,EAAQ+M,CAAU,CAAA,SAAA,CAAY,CAAA,CAC/C,CAAA,CAAA,CACF,CAEJ,CACF,ECvIA,IAAMY,EAAAA,CAAO,CAAC,IAAA,CAAM,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAI,CAAA,CAChDC,EAAAA,CAAS,CACb,SAAA,CAAW,UAAA,CAAY,OAAA,CAAS,OAAA,CAAS,KAAA,CAAO,MAAA,CAChD,MAAA,CAAQ,QAAA,CAAU,WAAA,CAAa,UAAW,UAAA,CAAY,UACxD,CAAA,CAEO,SAASC,EAAAA,CAAS,CAAE,SAAA,CAAAnO,CAAAA,CAAW,MAAAuC,CAAAA,CAAO,QAAA,CAAAyE,CAAAA,CAAU,OAAA,CAAAoH,CAAAA,CAAS,OAAA,CAAAC,CAAQ,CAAA,CAAkB,CACxF,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAI7J,QAAAA,CAASnC,CAAAA,EAAS,IAAI,IAAM,CAAA,CAC5D,CAACiM,CAAAA,CAAUC,CAAW,CAAA,CAAI/J,QAAAA,CAASnC,CAAAA,EAAS,IAAI,IAAM,CAAA,CAEtDmM,CAAAA,CAAiB,CAACC,CAAAA,CAAcC,CAAAA,GAC7B,IAAI,IAAA,CAAKD,CAAAA,CAAMC,EAAQ,CAAA,CAAG,CAAC,CAAA,CAAE,OAAA,EAAQ,CAGxCC,CAAAA,CAAqB,CAACF,CAAAA,CAAcC,IACjC,IAAI,IAAA,CAAKD,CAAAA,CAAMC,CAAAA,CAAO,CAAC,CAAA,CAAE,MAAA,EAAO,CAGnCE,CAAAA,CAAkB,IAAM,CAC5BL,CAAAA,CAAY,IAAI,IAAA,CAAKD,CAAAA,CAAS,WAAA,GAAeA,CAAAA,CAAS,QAAA,EAAS,CAAI,CAAA,CAAG,CAAC,CAAC,EAC1E,CAAA,CAEMO,EAAkB,IAAM,CAC5BN,CAAAA,CAAY,IAAI,IAAA,CAAKD,CAAAA,CAAS,WAAA,EAAY,CAAGA,EAAS,QAAA,EAAS,CAAI,CAAA,CAAG,CAAC,CAAC,EAC1E,CAAA,CAEMQ,CAAAA,CAAmBC,GAAgB,CACvC,IAAMC,CAAAA,CAAU,IAAI,IAAA,CAAKV,CAAAA,CAAS,WAAA,EAAY,CAAGA,EAAS,QAAA,EAAS,CAAGS,CAAG,CAAA,CACrEjI,CAAAA,EACFA,CAAAA,CAASkI,CAAO,CAAA,CAElBX,EAAeW,CAAO,EACxB,CAAA,CAEMrC,CAAAA,CAAcoC,CAAAA,EACX1M,CAAAA,EACLA,CAAAA,CAAM,OAAA,KAAc0M,CAAAA,EACpB1M,CAAAA,CAAM,QAAA,EAAS,GAAMiM,CAAAA,CAAS,QAAA,EAAS,EACvCjM,CAAAA,CAAM,WAAA,EAAY,GAAMiM,CAAAA,CAAS,WAAA,EAAY,CAG3CW,CAAAA,CAAWF,CAAAA,EAAgB,CAC/B,IAAMG,CAAAA,CAAQ,IAAI,IAAA,CAClB,OAAOA,CAAAA,CAAM,OAAA,EAAQ,GAAMH,CAAAA,EACzBG,EAAM,QAAA,EAAS,GAAMZ,CAAAA,CAAS,QAAA,EAAS,EACvCY,CAAAA,CAAM,WAAA,EAAY,GAAMZ,EAAS,WAAA,EACrC,CAAA,CAEMa,CAAAA,CAAa,IAAM,CACvB,IAAMC,CAAAA,CAAcZ,EAAeF,CAAAA,CAAS,WAAA,EAAY,CAAGA,CAAAA,CAAS,QAAA,EAAU,CAAA,CACxEe,CAAAA,CAAWV,EAAmBL,CAAAA,CAAS,WAAA,EAAY,CAAGA,CAAAA,CAAS,QAAA,EAAU,CAAA,CACzEgB,CAAAA,CAAO,EAAC,CAGd,IAAA,IAASvJ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIsJ,CAAAA,CAAUtJ,CAAAA,EAAAA,CAC5BuJ,CAAAA,CAAK,KAAKlP,GAAAA,CAAC,KAAA,CAAA,CAAuB,SAAA,CAAU,SAAA,CAAA,CAAxB,CAAA,MAAA,EAAS2F,CAAC,CAAA,CAAwB,CAAE,CAAA,CAI1D,IAAA,IAASgJ,CAAAA,CAAM,CAAA,CAAGA,CAAAA,EAAOK,CAAAA,CAAaL,CAAAA,EAAAA,CAAO,CAC3C,IAAMQ,CAAAA,CAAW5C,CAAAA,CAAWoC,CAAG,CAAA,CACzBG,CAAAA,CAAQD,CAAAA,CAAQF,CAAG,CAAA,CAEzBO,EAAK,IAAA,CACHlP,GAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAM0O,CAAAA,CAAgBC,CAAG,CAAA,CAClC,KAAK,QAAA,CACL,SAAA,CAAWxP,CAAAA,CACT,qEAAA,CACA,2HAAA,CACAgQ,CAAAA,EAAY,sJAAA,CACZ,CAACA,GAAYL,CAAAA,EAAS,4GAAA,CACtB,CAACK,CAAAA,EAAY,CAACL,CAAAA,EAAS,4EACzB,CAAA,CAEC,SAAAH,CAAAA,CAAAA,CAXIA,CAYP,CACF,EACF,CAEA,OAAOO,CACT,CAAA,CAEA,OACEnP,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,8GAAA,CAAgHO,CAAS,CAAA,CAC1I,QAAA,CAAA,CAAAK,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACZ,QAAA,CAAA,CAAA6N,EAAAA,CAAOM,CAAAA,CAAS,QAAA,EAAU,CAAA,CAAE,GAAA,CAAClO,GAAAA,CAAC,QAAK,SAAA,CAAU,kCAAA,CAAoC,QAAA,CAAAkO,CAAAA,CAAS,WAAA,EAAY,CAAE,CAAA,CAAA,CAC3G,CAAA,CACAnO,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASwO,CAAAA,CACT,KAAK,QAAA,CACL,SAAA,CAAU,4JAAA,CAEV,QAAA,CAAAxO,GAAAA,CAACoP,WAAAA,CAAA,CAAY,SAAA,CAAU,UAAU,CAAA,CACnC,CAAA,CACApP,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASyO,CAAAA,CACT,IAAA,CAAK,QAAA,CACL,UAAU,4JAAA,CAEV,QAAA,CAAAzO,GAAAA,CAACqP,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CACpC,GACF,CAAA,CAAA,CACF,CAAA,CAEArP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yCAAA,CACZ,QAAA,CAAA2N,EAAAA,CAAK,IAAIgB,CAAAA,EACR3O,GAAAA,CAAC,KAAA,CAAA,CAAc,SAAA,CAAU,+FAAA,CACtB,QAAA,CAAA2O,CAAAA,CAAAA,CADOA,CAEV,CACD,CAAA,CACH,CAAA,CAEA3O,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CACZ,QAAA,CAAA+O,GAAW,CACd,CAAA,CAAA,CACF,CAEJ,CCxHO,SAASO,EAAAA,CAAW,CAAE,MAAArN,CAAAA,CAAO,QAAA,CAAAyE,CAAAA,CAAU,WAAA,CAAAS,CAAAA,CAAc,aAAA,CAAe,SAAA,CAAAzH,CAAU,EAAoB,CACvG,GAAM,CAAC6P,CAAAA,CAAMC,CAAO,CAAA,CAAIpL,QAAAA,CAA2BnC,CAAK,EAClD,CAACmF,CAAAA,CAAQC,CAAS,CAAA,CAAIjD,QAAAA,CAAS,KAAK,CAAA,CAEpC8D,CAAAA,CAAgB0G,GAAkB,CACtCY,CAAAA,CAAQZ,CAAO,CAAA,CACflI,CAAAA,GAAWkI,CAAO,CAAA,CAClBvH,CAAAA,CAAU,KAAK,EACjB,CAAA,CAEMoI,CAAAA,CAAcC,CAAAA,EACXA,CAAAA,CAAE,kBAAA,CAAmB,OAAA,CAAS,CACnC,KAAA,CAAO,MAAA,CACP,GAAA,CAAK,SAAA,CACL,IAAA,CAAM,SACR,CAAC,CAAA,CAWH,OACE3P,IAAAA,CAACgK,EAAAA,CAAA,CAAQ,IAAA,CAAM3C,CAAAA,CAAQ,YAAA,CAAcC,CAAAA,CACnC,QAAA,CAAA,CAAAtH,KAACsK,EAAAA,CAAA,CACC,WAAA,CAXmBjJ,CAAAA,EAA2C,CAClE,IAAME,CAAAA,CAAOF,CAAAA,CAAE,cAAc,qBAAA,EAAsB,CAC7CG,CAAAA,CAAIH,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,IAAA,CACrBE,CAAAA,CAAIJ,EAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BF,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,GAAGG,CAAC,CAAA,EAAA,CAAI,CAAA,CACjDH,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,GAAGI,CAAC,CAAA,EAAA,CAAI,EACnD,CAAA,CAMM,SAAA,CAAWrC,CAAAA,CACT,kPAAA,CACA,2HAAA,CACA,CAACoQ,CAAAA,EAAQ,kCAAA,CACT7P,CACF,CAAA,CAEA,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wGAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,6FACd,CAAA,CACL,CAAA,CACAA,GAAAA,CAAC,QAAK,SAAA,CAAU,eAAA,CAAiB,QAAA,CAAAuP,CAAAA,CAAOE,CAAAA,CAAWF,CAAI,CAAA,CAAIpI,CAAAA,CAAY,EACvEnH,GAAAA,CAAC2P,QAAAA,CAAA,CAAa,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAAA,CAChE,CAAA,CACA3P,GAAAA,CAACwK,GAAA,CAAe,SAAA,CAAU,mDAAA,CAAoD,KAAA,CAAM,OAAA,CAClF,QAAA,CAAAxK,GAAAA,CAAC6N,EAAAA,CAAA,CACC,KAAA,CAAO0B,CAAAA,CACP,QAAA,CAAUrH,CAAAA,CACV,SAAA,CAAU,4BAAA,CACZ,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC3DO,IAAM0H,EAAAA,CAAapQ,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,WAAA,CAAAoQ,CAAAA,CAAc,UAAA,CAAY,aAAA,CAAAC,CAAAA,CAAgB,IAAA,CAAM,GAAGjQ,CAAM,CAAA,CAAGC,CAAAA,GAEhFE,GAAAA,CAAC,OACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,eAAA,CAEA,uCAAA,CACA,4FAAA,CACA,2CAAA,CACA,qGACA,6CAAA,CAGA,+HAAA,CAGA0Q,CAAAA,GAAgB,UAAA,EAAc,mCAAA,CAC9BA,CAAAA,GAAgB,YAAA,EAAgB,mCAAA,CAChCA,IAAgB,MAAA,EAAU,eAAA,CAG1BC,CAAAA,GAAkB,IAAA,EAAQ,2DAAA,CAC1BA,CAAAA,GAAkB,IAAA,EAAQ,2DAAA,CAC1BA,IAAkB,IAAA,EAAQ,uDAAA,CAE1BpQ,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,EAEAmQ,EAAAA,CAAW,WAAA,CAAc,YAAA,CC/BlB,SAASG,EAAAA,CAAe,CAAE,KAAA,CAAA9N,CAAAA,CAAO,QAAA,CAAAyE,CAAAA,CAAU,WAAA,CAAAS,CAAAA,CAAc,kBAAA,CAAoB,SAAA,CAAAzH,CAAU,CAAA,CAAwB,CACpH,GAAM,CAAC6P,CAAAA,CAAMC,CAAO,CAAA,CAAIpL,SAA2BnC,CAAK,CAAA,CAClD,CAACmF,CAAAA,CAAQC,CAAS,CAAA,CAAIjD,QAAAA,CAAS,KAAK,EAGpC,CAAC4L,CAAAA,CAAOC,CAAQ,CAAA,CAAI7L,QAAAA,CAASnC,CAAAA,CAAQA,CAAAA,CAAM,QAAA,GAAa,EAAE,CAAA,CAC1D,CAACiO,CAAAA,CAASC,CAAU,CAAA,CAAI/L,QAAAA,CAASnC,CAAAA,CAAQA,EAAM,UAAA,EAAW,CAAI,CAAC,CAAA,CAErEuC,SAAAA,CAAU,IAAM,CACVvC,CAAAA,GACFuN,EAAQvN,CAAK,CAAA,CACbgO,CAAAA,CAAShO,CAAAA,CAAM,QAAA,EAAU,CAAA,CACzBkO,CAAAA,CAAWlO,EAAM,UAAA,EAAY,CAAA,EAEjC,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAMmO,CAAAA,CAAoBxB,CAAAA,EAAkB,CAC1C,IAAMyB,CAAAA,CAAc,IAAI,IAAA,CAAKzB,CAAO,CAAA,CACpCyB,CAAAA,CAAY,QAAA,CAASL,CAAK,CAAA,CAC1BK,CAAAA,CAAY,UAAA,CAAWH,CAAO,EAC9BV,CAAAA,CAAQa,CAAW,CAAA,CACnB3J,CAAAA,GAAW2J,CAAW,EACxB,CAAA,CAEMC,CAAAA,CAAmB,CAACC,CAAAA,CAA2BC,CAAAA,GAAgB,CACnE,IAAIC,CAAAA,CAAM,QAAA,CAASD,CAAAA,CAAK,EAAE,EAC1B,GAAI,KAAA,CAAMC,CAAG,CAAA,CAAG,OAEhB,IAAIC,CAAAA,CAAWV,CAAAA,CACXW,EAAaT,CAAAA,CAEbK,CAAAA,GAAS,OAAA,EACXE,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,IAAI,EAAA,CAAIA,CAAG,CAAC,CAAA,CACnCR,CAAAA,CAASQ,CAAG,CAAA,CACZC,CAAAA,CAAWD,IAEXA,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,EAAA,CAAIA,CAAG,CAAC,CAAA,CACnCN,CAAAA,CAAWM,CAAG,CAAA,CACdE,CAAAA,CAAaF,CAAAA,CAAAA,CAGf,IAAMG,CAAAA,CAAWrB,CAAAA,EAAQ,IAAI,IAAA,CACvBc,CAAAA,CAAc,IAAI,IAAA,CAAKO,CAAQ,CAAA,CACrCP,EAAY,QAAA,CAASK,CAAQ,CAAA,CAC7BL,CAAAA,CAAY,UAAA,CAAWM,CAAU,CAAA,CACjCnB,CAAAA,CAAQa,CAAW,CAAA,CACnB3J,CAAAA,GAAW2J,CAAW,EACxB,CAAA,CAEMQ,CAAAA,CAAkBnB,CAAAA,EACfA,CAAAA,CAAE,mBAAmB,OAAA,CAAS,CACnC,KAAA,CAAO,OAAA,CACP,GAAA,CAAK,SAAA,CACL,IAAA,CAAM,SAAA,CACN,KAAM,SAAA,CACN,MAAA,CAAQ,SACV,CAAC,CAAA,CAWH,OACE3P,IAAAA,CAACgK,EAAAA,CAAA,CAAQ,IAAA,CAAM3C,CAAAA,CAAQ,YAAA,CAAcC,CAAAA,CACnC,QAAA,CAAA,CAAAtH,IAAAA,CAACsK,EAAAA,CAAA,CACC,YAXmBjJ,CAAAA,EAA2C,CAClE,IAAME,CAAAA,CAAOF,CAAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB,CAC7CG,EAAIH,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,IAAA,CACrBE,CAAAA,CAAIJ,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BF,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAGG,CAAC,IAAI,CAAA,CACjDH,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAY,KAAA,CAAO,CAAA,EAAGI,CAAC,IAAI,EACnD,CAAA,CAMM,SAAA,CAAWrC,CAAAA,CACT,kPAAA,CACA,2HAAA,CACA,CAACoQ,CAAAA,EAAQ,mCACT7P,CACF,CAAA,CAEA,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wGAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,uFACd,CAAA,CACL,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAiB,SAAAuP,CAAAA,CAAOsB,CAAAA,CAAetB,CAAI,CAAA,CAAIpI,CAAAA,CAAY,CAAA,CAC3EpH,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,0DAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC2P,QAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CAClC3P,IAAC8Q,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAAA,CAC7B,CAAA,CAAA,CACF,CAAA,CACA9Q,GAAAA,CAACwK,EAAAA,CAAA,CAAe,SAAA,CAAU,mDAAA,CAAoD,KAAA,CAAM,OAAA,CAClF,QAAA,CAAAxK,GAAAA,CAAC,OAAI,SAAA,CAAU,kJAAA,CACb,QAAA,CAAAD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,MAAA,CACb,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACb,QAAA,CAAAA,GAAAA,CAAC6N,EAAAA,CAAA,CACC,KAAA,CAAO0B,EACP,QAAA,CAAUa,CAAAA,CACV,SAAA,CAAU,yEAAA,CACZ,CAAA,CACF,CAAA,CAEArQ,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2DAAA,CAA4D,QAAA,CAAA,MAAA,CAAI,CAAA,CAC/ED,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC6P,EAAAA,CAAA,CAAW,SAAA,CAAU,6BAA6B,aAAA,CAAc,IAAA,CAC/D,QAAA,CAAA,CAAA5P,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6GAAA,CAA8G,QAAA,CAAA,IAAA,CAAE,EAC/HA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACZ,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC4L,CAAAA,CAAGjG,CAAAA,GAClC3F,GAAAA,CAAC,UAEC,OAAA,CAAS,IAAMsQ,CAAAA,CAAiB,OAAA,CAAS3K,CAAAA,CAAE,QAAA,EAAU,CAAA,CACrD,UAAWxG,CAAAA,CACT,8EAAA,CACA6Q,CAAAA,GAAUrK,CAAAA,CACN,8DAAA,CACA,yHACN,CAAA,CAEC,QAAA,CAAAA,EAAE,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAA,CAAA,CATxBA,CAUP,CACD,EACH,CAAA,CAAA,CACF,CAAA,CACA3F,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CAA2C,CAAA,CAC1DD,IAAAA,CAAC6P,GAAA,CAAW,SAAA,CAAU,4BAAA,CAA6B,aAAA,CAAc,IAAA,CAC/D,QAAA,CAAA,CAAA5P,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,6GAAA,CAA8G,QAAA,CAAA,KAAA,CAAG,CAAA,CAChIA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACZ,QAAA,CAAA,KAAA,CAAM,KAAK,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC4L,CAAAA,CAAGjG,CAAAA,GAClC3F,GAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMsQ,CAAAA,CAAiB,SAAA,CAAW3K,CAAAA,CAAE,UAAU,CAAA,CACvD,SAAA,CAAWxG,CAAAA,CACT,8EAAA,CACA+Q,CAAAA,GAAYvK,CAAAA,CACR,8DAAA,CACA,yHACN,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,GATxBA,CAUP,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EACF,CAAA,CAAA,CACF,CAEJ,CC1JO,IAAMoL,EAAAA,CAAWvR,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAuG,CAAAA,CAAO,KAAA,CAAAM,CAAAA,CAAO,EAAA,CAAAJ,CAAAA,CAAI,SAAApF,CAAAA,CAAU,GAAGlB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC5D,IAAMkR,CAAAA,CAAcxR,WAAAA,CAAM,KAAA,EAAM,CAC1B4G,CAAAA,CAAUD,CAAAA,EAAM6K,CAAAA,CAEtB,OACEjR,IAAAA,CAAC,OAAI,SAAA,CAAU,uBAAA,CACZ,QAAA,CAAA,CAAAkG,CAAAA,EACCjG,GAAAA,CAAC4F,CAAAA,CAAA,CACC,OAAA,CAASQ,EACT,SAAA,CAAWjH,CAAAA,CAAG4B,CAAAA,EAAY,+BAA+B,CAAA,CAExD,QAAA,CAAAkF,CAAAA,CACH,CAAA,CAGFjG,IAAC,UAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAIsG,CAAAA,CACJ,QAAA,CAAUrF,CAAAA,CACV,SAAA,CAAW5B,EACT,8DAAA,CACA,iDAAA,CACA,wFAAA,CACA,0DAAA,CACA,aAAA,CACA,iDAAA,CACAoH,CAAAA,EAAS,2CAAA,CACT7G,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAAA,CAEC0G,CAAAA,EACCvG,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,4EACV,QAAA,CAAAuG,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAwK,EAAAA,CAAS,WAAA,CAAc,WC1ChB,IAAME,EAAAA,CAAgBzR,YAAM,UAAA,CACjC,CAACK,CAAAA,CAAOC,CAAAA,GAAQ,CACd,GAAM,CAACoR,CAAAA,CAAcC,CAAe,CAAA,CAAI/M,QAAAA,CAAS,KAAK,CAAA,CAEtD,OACEpE,GAAAA,CAAC+F,EAAAA,CAAA,CACE,GAAGlG,CAAAA,CACJ,GAAA,CAAKC,CAAAA,CACL,IAAA,CAAMoR,CAAAA,CAAe,MAAA,CAAS,UAAA,CAC9B,SAAA,CACElR,IAACQ,CAAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,UAAU,+BAAA,CACV,OAAA,CAAS,IAAM2Q,CAAAA,CAAgB,CAACD,CAAY,CAAA,CAC5C,YAAA,CAAYA,EAAe,eAAA,CAAkB,eAAA,CAE5C,QAAA,CAAAA,CAAAA,CACClR,GAAAA,CAACoR,MAAAA,CAAA,CAAO,SAAA,CAAU,2CAA2C,CAAA,CAE7DpR,GAAAA,CAACqR,GAAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CAA2C,CAAA,CAE9D,CAAA,CAEJ,CAEJ,CACF,EAEAJ,EAAAA,CAAc,WAAA,CAAc,eAAA,CCpC5B,IAAMK,EAAAA,CAAgB/Q,IACpB,4LAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,wGAAA,CACT,QAAS,wGAAA,CACT,OAAA,CAAS,4HAAA,CACT,OAAA,CAAS,gHAAA,CACT,MAAA,CAAQ,0GAAA,CACR,IAAA,CAAM,qGACN,OAAA,CAAS,oEACX,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAQagR,EAAAA,CAAQ/R,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,EAAW,OAAA,CAAAe,CAAAA,CAAS,GAAGZ,CAAM,CAAA,CAAGC,CAAAA,GAE/BE,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGmS,EAAAA,CAAc,CAAE,OAAA,CAAA7Q,CAAQ,CAAC,CAAA,CAAGf,CAAS,CAAA,CAClD,GAAGG,CAAAA,CACN,CAGN,EAEA0R,EAAAA,CAAM,YAAc,OAAA,CCxBb,SAASC,EAAAA,CAAS,CACvB,KAAA,CAAAvL,CAAAA,CACA,WAAA,CAAAkB,CAAAA,CAAc,YAAA,CACd,IAAA,CAAAsK,CAAAA,CACA,QAAA,CAAA/K,EACA,KAAA,CAAAH,CAAAA,CACA,SAAA,CAAA7G,CACF,CAAA,CAAkB,CAChB,GAAM,CAACgS,EAAYC,CAAa,CAAA,CAAIvN,QAAAA,CAAS,EAAE,CAAA,CAEzCgE,CAAAA,CAAiBhH,CAAAA,EAAuC,CACxDA,EAAE,GAAA,GAAQ,OAAA,EAAWsQ,CAAAA,CAAW,IAAA,EAAK,EACvCtQ,CAAAA,CAAE,cAAA,EAAe,CACZqQ,EAAK,QAAA,CAASC,CAAAA,CAAW,IAAA,EAAM,CAAA,EAClChL,CAAAA,CAAS,CAAC,GAAG+K,CAAAA,CAAMC,CAAAA,CAAW,IAAA,EAAM,CAAC,CAAA,CAEvCC,CAAAA,CAAc,EAAE,GACPvQ,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAe,CAACsQ,CAAAA,EAAcD,CAAAA,CAAK,MAAA,CAAS,CAAA,EAC/D/K,EAAS+K,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,EAE9B,CAAA,CAEMG,CAAAA,CAAaC,GAAwB,CACzCnL,CAAAA,CAAS+K,CAAAA,CAAK,MAAA,CAAQK,CAAAA,EAAQA,CAAAA,GAAQD,CAAW,CAAC,EACpD,CAAA,CAEA,OACE9R,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAA,CAAyBO,CAAS,EAClD,QAAA,CAAA,CAAAuG,CAAAA,EAASjG,GAAAA,CAAC4F,CAAAA,CAAA,CAAO,QAAA,CAAAK,CAAAA,CAAM,CAAA,CAExBlG,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CACd,4MAAA,CACAoH,CAAAA,EAAS,oBACX,CAAA,CACG,QAAA,CAAA,CAAAkL,EAAK,GAAA,CAAKK,CAAAA,EACT/R,IAAAA,CAACwR,EAAAA,CAAA,CAAgB,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,YAAA,CAC1C,QAAA,CAAA,CAAAO,CAAAA,CACD9R,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM4R,CAAAA,CAAUE,CAAG,CAAA,CAC5B,SAAA,CAAU,+EAAA,CAEV,QAAA,CAAA9R,GAAAA,CAAC+R,CAAAA,CAAA,CAAE,SAAA,CAAU,SAAA,CAAU,CAAA,CACzB,CAAA,CAAA,CAAA,CARUD,CASZ,CACD,CAAA,CAED9R,GAAAA,CAAC,SACC,IAAA,CAAK,MAAA,CACL,KAAA,CAAO0R,CAAAA,CACP,QAAA,CAAWtQ,CAAAA,EAAMuQ,CAAAA,CAAcvQ,CAAAA,CAAE,OAAO,KAAK,CAAA,CAC7C,SAAA,CAAWgH,CAAAA,CACX,WAAA,CAAaqJ,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAItK,EAAc,EAAA,CAC/C,SAAA,CAAU,wHAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAECZ,CAAAA,EACCvG,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,2EAAA,CACV,QAAA,CAAAuG,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CCnEO,SAASyL,EAAAA,CAAY,CAC1B,KAAA,CAAA/L,CAAAA,CACA,KAAA,CAAAhE,CAAAA,CACA,QAAA,CAAAyE,CAAAA,CACA,KAAA,CAAAH,CAAAA,CACA,SAAA,CAAA7G,CACF,CAAA,CAAqB,CACnB,OACEK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAA,CAAyBO,CAAS,CAAA,CAClD,UAAAuG,CAAAA,EAASjG,GAAAA,CAAC4F,CAAAA,CAAA,CAAO,QAAA,CAAAK,CAAAA,CAAM,CAAA,CAExBlG,IAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,2FAAA,CACV,KAAA,CAAO,CAAE,eAAA,CAAiBiC,CAAM,CAAA,CAEhC,QAAA,CAAAjC,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,OAAA,CACL,MAAOiC,CAAAA,CACP,QAAA,CAAWb,CAAAA,EAAMsF,CAAAA,CAAStF,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxC,UAAU,yDAAA,CACZ,CAAA,CACF,CAAA,CACApB,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,KAAA,CAAOiC,EACP,QAAA,CAAWb,CAAAA,EAAMsF,CAAAA,CAAStF,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxC,SAAA,CAAU,8LAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAECmF,CAAAA,EACCvG,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,uBAAA,CACV,SAAAuG,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,KC1CM0L,EAAAA,CAAoBnI,aAAAA,CAAsC,EAAE,CAAA,CAUrDoI,EAAAA,CAAa1S,WAAAA,CAAM,UAAA,CAC9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAyE,CAAAA,CAAU,IAAA,CAAAO,EAAM,QAAA,CAAAlG,CAAAA,CAAU,KAAA,CAAAkF,CAAAA,CAAO,QAAA,CAAAxG,CAAAA,CAAU,GAAGI,CAAM,EAAGC,CAAAA,GAAQ,CAClF,IAAMqG,CAAAA,CAAK3G,WAAAA,CAAM,KAAA,EAAM,CAEvB,OACEO,KAAC,KAAA,CAAA,CAAI,GAAA,CAAKD,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,qBAAA,CAAuBO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACjE,QAAA,CAAA,CAAAoG,CAAAA,EACCjG,GAAAA,CAAC4F,CAAAA,CAAA,CAAM,SAAA,CAAWzG,EAAG4B,CAAAA,EAAY,+BAA+B,CAAA,CAC7D,QAAA,CAAAkF,CAAAA,CACH,CAAA,CAEFjG,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,qBAAA,CAAsB,IAAA,CAAK,YAAA,CACxC,QAAA,CAAAA,GAAAA,CAACiS,EAAAA,CAAkB,QAAA,CAAlB,CAA2B,MAAO,CAAE,KAAA,CAAAhQ,CAAAA,CAAO,QAAA,CAAAyE,CAAAA,CAAU,IAAA,CAAMO,CAAAA,EAAQd,CAAAA,CAAI,SAAApF,CAAS,CAAA,CAC9E,QAAA,CAAAtB,CAAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CACF,EAEAyS,EAAAA,CAAW,WAAA,CAAc,YAAA,CAOlB,IAAMC,EAAAA,CAAiB3S,WAAAA,CAAM,UAAA,CAClC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,KAAA,CAAAgE,CAAAA,CAAO,QAAA,CAAAlF,CAAAA,CAAU,GAAGlB,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACxD,IAAMwK,CAAAA,CAAUC,UAAAA,CAAW0H,EAAiB,CAAA,CACtCtL,CAAAA,CAAY2D,CAAAA,CAAQ,KAAA,GAAUrI,CAAAA,CAC9BmQ,CAAAA,CAAa9H,CAAAA,CAAQ,QAAA,EAAYvJ,EACjCoF,CAAAA,CAAK3G,WAAAA,CAAM,KAAA,EAAM,CAEvB,OACEO,IAAAA,CAAC,OAAA,CAAA,CACC,OAAA,CAASoG,EACT,SAAA,CAAWhH,CAAAA,CACT,8CAAA,CACAiT,CAAAA,EAAc,+BAAA,CACd1S,CACF,CAAA,CAEA,QAAA,CAAA,CAAAK,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,GAAIqG,CAAAA,CACJ,IAAA,CAAK,OAAA,CACL,IAAA,CAAMmE,CAAAA,CAAQ,IAAA,CACd,KAAA,CAAOrI,CAAAA,CACP,QAAS0E,CAAAA,CACT,QAAA,CAAUyL,CAAAA,CACV,QAAA,CAAWhR,CAAAA,EAAM,CACXA,CAAAA,CAAE,MAAA,CAAO,SACXkJ,CAAAA,CAAQ,QAAA,GAAWrI,CAAK,EAE5B,CAAA,CACA,SAAA,CAAU,cAAA,CACT,GAAGpC,EACN,CAAA,CACAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,8HAAA,CACA,sNAAA,CACA,0DAAA,CACAwH,CAAAA,EAAa,6DACf,CAAA,CAEC,QAAA,CAAAA,CAAAA,EACC3G,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oDACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CAA8C,CAAA,CAC/D,CAAA,CAEJ,CAAA,CAAA,CACF,EACCiG,CAAAA,EACCjG,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kEAAA,CACb,QAAA,CAAAiG,CAAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAkM,EAAAA,CAAe,WAAA,CAAc,gBAAA,CCnG7B,IAAME,EAAAA,CAAkB7S,WAAAA,CAAM,aAAA,CAAoC,EAA0B,EAE/E8S,EAAAA,CAAW9S,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAChC,IAAMqG,CAAAA,CAAK3G,WAAAA,CAAM,KAAA,EAAM,CACvB,OACEQ,GAAAA,CAACqS,EAAAA,CAAgB,QAAA,CAAhB,CAAyB,KAAA,CAAO,CAAE,EAAA,CAAAlM,CAAG,CAAA,CACpC,QAAA,CAAAnG,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,YAAaO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAAA,CACnE,CAEJ,CACF,EACAyS,GAAS,WAAA,CAAc,UAAA,CAEhB,IAAMC,EAAAA,CAAY/S,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,UAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAChC,GAAM,CAAE,GAAAqG,CAAG,CAAA,CAAI3G,WAAAA,CAAM,UAAA,CAAW6S,EAAe,CAAA,CAC/C,OACErS,GAAAA,CAAC4F,EAAA,CACC,GAAA,CAAK9F,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,4FAAA,CAA8FO,CAAS,CAAA,CACrH,QAASyG,CAAAA,CACR,GAAGtG,CAAAA,CACN,CAEJ,CACF,EACA0S,EAAAA,CAAU,WAAA,CAAc,YAEjB,IAAMC,EAAAA,CAAchT,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,GAAGK,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACrB,GAAM,CAAE,EAAA,CAAAqG,CAAG,CAAA,CAAI3G,YAAM,UAAA,CAAW6S,EAAe,CAAA,CACzC,CAAE,QAAA,CAAA5S,CAAAA,CAAU,GAAGgT,CAAK,EAAI5S,CAAAA,CAE9B,OAAIL,WAAAA,CAAM,cAAA,CAAeC,CAAQ,CAAA,CACtBD,WAAAA,CAAM,YAAA,CAAaC,EAAgC,CACtD,EAAA,CAAA0G,CAAAA,CACA,kBAAA,CAAoB,CAAA,EAAGA,CAAE,CAAA,aAAA,EAAgBA,CAAE,WAC3C,GAAGsM,CAAAA,CACH,GAAIhT,CAAAA,CAAS,KACjB,CAAC,CAAA,CAEEO,GAAAA,CAAC,OAAI,GAAA,CAAKF,CAAAA,CAAM,GAAGD,CAAAA,CAAO,CACnC,CACF,EACA2S,EAAAA,CAAY,YAAc,aAAA,CAEnB,IAAME,EAAAA,CAAkBlT,WAAAA,CAAM,UAAA,CACnC,CAAC,CAAE,SAAA,CAAAE,EAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAChC,GAAM,CAAE,EAAA,CAAAqG,CAAG,CAAA,CAAI3G,WAAAA,CAAM,UAAA,CAAW6S,EAAe,CAAA,CAC/C,OACErS,GAAAA,CAAC,KACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAI,CAAA,EAAGqG,CAAE,CAAA,YAAA,CAAA,CACT,SAAA,CAAWhH,CAAAA,CAAG,wBAAyBO,CAAS,CAAA,CAC/C,GAAGG,CAAAA,CACN,CAEJ,CACF,EACA6S,EAAAA,CAAgB,YAAc,iBAAA,CAEvB,IAAMC,EAAAA,CAAcnT,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,EAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAC1C,GAAM,CAAE,EAAA,CAAAqG,CAAG,CAAA,CAAI3G,WAAAA,CAAM,UAAA,CAAW6S,EAAe,CAAA,CAE/C,OAAK5S,EAKHO,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,EAAA,CAAI,CAAA,EAAGqG,CAAE,CAAA,QAAA,CAAA,CACT,UAAWhH,CAAAA,CAAG,mCAAA,CAAqCO,CAAS,CAAA,CAC3D,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CAXO,IAaX,CACF,EACAkT,EAAAA,CAAY,WAAA,CAAc,aAAA,CCrF1B,IAAMC,EAAAA,CAAmBrS,GAAAA,CACvB,+HAAA,CACA,CACE,SAAU,CACR,YAAA,CAAc,CACZ,IAAA,CAAM,gDAAA,CACN,KAAA,CAAO,mHACT,CAAA,CACA,MAAO,CACL,IAAA,CAAM,gDAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,YAAA,CAAc,KAAA,CACd,KAAA,CAAO,KACT,CACF,CACF,CAAA,CAWasS,EAAAA,CAAerT,YAAM,UAAA,CAChC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,MAAA,CAAAoT,CAAAA,CAAQ,QAAA,CAAAC,CAAAA,CAAW,CAAA,CAAG,OAAA,CAAAC,CAAAA,CAAS,KAAA,CAAA/M,CAAAA,CAAQ,cAAA,CAAgB,WAAA,CAAAgN,EAAc,gCAAA,CAAkC,GAAGpT,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACvI,GAAM,CAACoT,EAAcC,CAAe,CAAA,CAAI/O,QAAAA,CAAS,KAAK,CAAA,CAChD,CAACgP,CAAAA,CAAOC,CAAQ,EAAIjP,QAAAA,CAAiB,EAAE,CAAA,CACvC,CAACmC,CAAAA,CAAO+M,CAAQ,CAAA,CAAIlP,SAAwB,IAAI,CAAA,CAChDmP,CAAAA,CAAW/T,WAAAA,CAAM,MAAA,CAAyB,IAAI,CAAA,CAE9CgU,CAAAA,CAAkBpS,GAAuB,CAC7CA,CAAAA,CAAE,cAAA,EAAe,CACjB+R,CAAAA,CAAgB,IAAI,EACtB,CAAA,CAEMM,EAAmBrS,CAAAA,EAAuB,CAC9CA,CAAAA,CAAE,cAAA,EAAe,CACjB+R,CAAAA,CAAgB,KAAK,EACvB,EAEMO,CAAAA,CAAiBC,CAAAA,EACjBZ,CAAAA,EAAYY,CAAAA,CAAS,MAAA,CAASZ,CAAAA,EAChCO,CAAAA,CAAS,CAAA,IAAA,EAAOP,CAAQ,CAAA,cAAA,CAAgB,CAAA,CACjC,KAAA,EAELC,CAAAA,EACgBW,CAAAA,CAAS,IAAA,CAAKC,CAAAA,EAAKA,EAAE,IAAA,CAAOZ,CAAO,CAAA,EAEnDM,CAAAA,CAAS,CAAA,oBAAA,EAAuBN,CAAAA,CAAU,IAAA,CAAO,IAAI,KAAK,CAAA,CACnD,KAAA,GAGXM,CAAAA,CAAS,IAAI,CAAA,CACN,IAAA,CAAA,CAGHO,CAAAA,CAAczS,CAAAA,EAAuB,CACzCA,CAAAA,CAAE,cAAA,EAAe,CACjB+R,CAAAA,CAAgB,KAAK,CAAA,CAErB,IAAMW,CAAAA,CAAe,MAAM,IAAA,CAAK1S,CAAAA,CAAE,YAAA,CAAa,KAAK,CAAA,CAChDsS,CAAAA,CAAcI,CAAY,CAAA,GAC5BT,EAASS,CAAY,CAAA,CACrBhB,CAAAA,GAASgB,CAAY,CAAA,EAEzB,CAAA,CAEMC,CAAAA,CAAgB3S,CAAAA,EAA2C,CAC/D,GAAIA,CAAAA,CAAE,MAAA,CAAO,KAAA,CAAO,CAClB,IAAM4S,CAAAA,CAAgB,KAAA,CAAM,KAAK5S,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC3CsS,CAAAA,CAAcM,CAAa,CAAA,GAC7BX,CAAAA,CAASW,CAAa,CAAA,CACtBlB,CAAAA,GAASkB,CAAa,CAAA,EAE1B,CACF,CAAA,CAEMC,CAAAA,CAAa,CAAClM,CAAAA,CAAe3G,CAAAA,GAAwB,CACzDA,CAAAA,CAAE,eAAA,EAAgB,CAClB,IAAM8S,CAAAA,CAAWd,EAAM,MAAA,CAAO,CAACxH,CAAAA,CAAGjG,CAAAA,GAAMA,CAAAA,GAAMoC,CAAK,CAAA,CACnDsL,CAAAA,CAASa,CAAQ,CAAA,CACjBpB,CAAAA,GAASoB,CAAQ,EACnB,CAAA,CAEA,OACEnU,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGyT,GAAiB,CAAE,YAAA,CAAAM,CAAAA,CAAc,KAAA,CAAO,CAAC,CAAC3M,CAAAA,CAAO,SAAA,CAAA7G,CAAU,CAAC,CAAA,CAAG,oBAAoB,CAAA,CACjG,UAAA,CAAY8T,CAAAA,CACZ,WAAA,CAAaC,CAAAA,CACb,OAAQI,CAAAA,CACR,OAAA,CAAS,IAAMN,CAAAA,CAAS,OAAA,EAAS,KAAA,EAAM,CACtC,GAAG1T,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKuT,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,UAAU,QAAA,CACV,QAAA,CAAUR,CAAAA,CAAW,CAAA,CACrB,QAAA,CAAUgB,CAAAA,CACZ,CAAA,CAEA/T,GAAAA,CAAC,OAAI,SAAA,CAAU,wDAAA,CACb,QAAA,CAAAA,GAAAA,CAACmU,MAAAA,CAAA,CAAO,SAAA,CAAU,0CAAA,CAA2C,EAC/D,CAAA,CACAnU,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACZ,QAAA,CAAAiG,CAAAA,CACH,CAAA,CACAjG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACZ,QAAA,CAAAiT,CAAAA,CACH,CAAA,CACC1M,CAAAA,EACCvG,GAAAA,CAAC,OAAI,SAAA,CAAU,wCAAA,CACZ,QAAA,CAAAuG,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAEC6M,CAAAA,CAAM,MAAA,CAAS,GACdpT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACZ,QAAA,CAAAoT,CAAAA,CAAM,GAAA,CAAI,CAACgB,EAAMzO,CAAAA,GAChB5F,IAAAA,CAAC,KAAA,CAAA,CAAY,SAAA,CAAU,4HAAA,CACrB,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sFAAA,CACb,QAAA,CAAAA,IAACqU,IAAAA,CAAA,CAAS,SAAA,CAAU,0CAAA,CAA2C,CAAA,CACjE,CAAA,CACAtU,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0EAAA,CAA4E,QAAA,CAAAoU,CAAAA,CAAK,KAAK,CAAA,CACtGrU,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA6C,QAAA,CAAA,CAAA,CAAAqU,CAAAA,CAAK,IAAA,CAAO,MAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,KAAA,CAAA,CAAG,CAAA,CAAA,CAC/F,CAAA,CAAA,CACF,CAAA,CACApU,GAAAA,CAAC,UACC,OAAA,CAAUoB,CAAAA,EAAM6S,CAAAA,CAAWtO,CAAAA,CAAGvE,CAAC,CAAA,CAC/B,SAAA,CAAU,gGAAA,CAEV,SAAApB,GAAAA,CAAC+R,CAAAA,CAAA,CAAE,SAAA,CAAU,SAAA,CAAU,CAAA,CACzB,CAAA,CAAA,CAAA,CAfQpM,CAgBV,CACD,CAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EACAkN,EAAAA,CAAa,WAAA,CAAc,cAAA,CCzJ3B,IAAMyB,GAAmB/T,GAAAA,CACvB,yBAAA,CACA,CACE,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,gDACJ,EAAA,CAAI,mDAAA,CACJ,EAAA,CAAI,iDACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,KAAM,IACR,CACF,CACF,CAAA,CAWagU,EAAAA,CAAW/U,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,IAAA,CAAAgB,CAAAA,CAAM,MAAA,CAAA8T,CAAAA,CAAS,CAAA,CAAG,KAAA,CAAAvS,EAAQ,EAAA,CAAI,QAAA,CAAAyE,CAAAA,CAAU,UAAA,CAAA+N,CAAAA,CAAY,QAAA,CAAA1T,CAAAA,CAAU,KAAA,CAAAwF,EAAO,GAAG1G,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACrG,GAAM,CAAC4U,CAAAA,CAAYC,CAAa,CAAA,CAAIvQ,QAAAA,CAAmB,IAAI,KAAA,CAAMoQ,CAAM,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAC3EI,CAAAA,CAAY1T,MAAAA,CAAoC,EAAE,CAAA,CAExDsD,SAAAA,CAAU,IAAM,CACd,IAAMgM,CAAAA,CAAMvO,CAAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,KAAA,CAAM,EAAGuS,CAAM,CAAA,CACrCK,CAAAA,CAAS,CAAC,GAAGrE,CAAAA,CAAK,GAAG,IAAI,MAAMgE,CAAAA,CAAShE,CAAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAClEmE,EAAcE,CAAM,EACtB,CAAA,CAAG,CAAC5S,CAAAA,CAAOuS,CAAM,CAAC,CAAA,CAElB,IAAMT,CAAAA,CAAe,CAAC3S,CAAAA,CAAwC2G,CAAAA,GAAkB,CAC9E,IAAMyI,CAAAA,CAAMpP,CAAAA,CAAE,OAAO,KAAA,CACrB,GAAI,KAAA,CAAM,MAAA,CAAOoP,CAAG,CAAC,CAAA,CAAG,OAExB,IAAMsE,CAAAA,CAAgB,CAAC,GAAGJ,CAAU,CAAA,CAEpCI,CAAAA,CAAc/M,CAAK,EAAIyI,CAAAA,CAAI,SAAA,CAAUA,CAAAA,CAAI,MAAA,CAAS,CAAC,CAAA,CAEnDmE,CAAAA,CAAcG,CAAa,EAC3B,IAAMC,CAAAA,CAAcD,CAAAA,CAAc,IAAA,CAAK,EAAE,CAAA,CACzCpO,CAAAA,GAAWqO,CAAW,EAElBvE,CAAAA,EAAOzI,CAAAA,CAAQyM,CAAAA,CAAS,CAAA,EAC1BI,CAAAA,CAAU,OAAA,CAAQ7M,CAAAA,CAAQ,CAAC,GAAG,KAAA,EAAM,CAGlCgN,CAAAA,CAAY,MAAA,GAAWP,CAAAA,EACzBC,CAAAA,GAAaM,CAAW,EAE5B,EAEM3M,CAAAA,CAAgB,CAAChH,CAAAA,CAA0C2G,CAAAA,GAAkB,CAC7E3G,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAe,CAACsT,CAAAA,CAAW3M,CAAK,CAAA,EAAKA,CAAAA,CAAQ,CAAA,EACzD6M,CAAAA,CAAU,OAAA,CAAQ7M,CAAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,GAElC,CAAA,CAEMiN,CAAAA,CAAe5T,CAAAA,EAA4B,CAC/CA,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAM6T,CAAAA,CAAa7T,CAAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,YAAY,EAAE,KAAA,CAAM,CAAA,CAAGoT,CAAM,CAAA,CACxE,GAAI,CAAC,OAAA,CAAQ,IAAA,CAAKS,CAAU,CAAA,CAAG,OAE/B,IAAMH,CAAAA,CAAgB,CAAC,GAAGJ,CAAU,CAAA,CACpCO,EAAW,KAAA,CAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,CAACC,CAAAA,CAAMvP,CAAAA,GAAM,CACxCmP,EAAcnP,CAAC,CAAA,CAAIuP,EACrB,CAAC,CAAA,CACDP,CAAAA,CAAcG,CAAa,CAAA,CAC3B,IAAMC,CAAAA,CAAcD,CAAAA,CAAc,IAAA,CAAK,EAAE,CAAA,CACzCpO,CAAAA,GAAWqO,CAAW,CAAA,CAClBA,EAAY,MAAA,GAAWP,CAAAA,EAAQC,CAAAA,GAAaM,CAAW,CAAA,CAC3DH,CAAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,IAAIK,CAAAA,CAAW,MAAA,CAAQT,CAAAA,CAAS,CAAC,CAAC,CAAA,EAAG,KAAA,GAC9D,CAAA,CAEA,OACExU,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAGmV,GAAiB,CAAE,IAAA,CAAA5T,CAAAA,CAAM,SAAA,CAAAhB,CAAU,CAAC,CAAC,CAAA,CAAI,GAAGG,CAAAA,CACtE,QAAA,CAAA6U,CAAAA,CAAW,GAAA,CAAI,CAACS,CAAAA,CAAOpN,CAAAA,GACtB/H,GAAAA,CAAC,SAEC,GAAA,CAAKqB,CAAAA,EAAMuT,CAAAA,CAAU,OAAA,CAAQ7M,CAAK,CAAA,CAAI1G,CAAAA,CACtC,IAAA,CAAK,OACL,SAAA,CAAU,SAAA,CACV,SAAA,CAAW,CAAA,CACX,KAAA,CAAO8T,CAAAA,CACP,QAAA,CAAUpU,CAAAA,CACV,SAAWK,CAAAA,EAAM2S,CAAAA,CAAa3S,CAAAA,CAAG2G,CAAK,CAAA,CACtC,SAAA,CAAY3G,CAAAA,EAAMgH,CAAAA,CAAchH,EAAG2G,CAAK,CAAA,CACxC,OAAA,CAASiN,CAAAA,CACT,SAAA,CAAW7V,CAAAA,CACT,qFAAA,CACA,8EAAA,CACA,kDACA,sCAAA,CACAoH,CAAAA,CACI,4EAAA,CACA,sCACN,CAAA,CAAA,CAlBKwB,CAmBP,CACD,CAAA,CACH,CAEJ,CACF,EACAwM,EAAAA,CAAS,WAAA,CAAc,UAAA,CC1GvB,IAAMa,GAAsB7U,GAAAA,CAC1B,2FAAA,CACA,CACE,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,MACJ,EAAA,CAAI,MAAA,CACJ,EAAA,CAAI,MACN,CAAA,CACA,KAAA,CAAO,CACL,IAAA,CAAM,kBACN,KAAA,CAAO,iBACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAM,IAAA,CACN,MAAO,KACT,CACF,CACF,CAAA,CAUa8U,EAAAA,CAAc7V,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,IAAA,CAAAgB,CAAAA,CAAM,KAAA,CAAA6F,CAAAA,CAAO,KAAA,CAAAtE,CAAAA,CAAQ,CAAA,CAAG,QAAA,CAAAyE,CAAAA,CAAU,GAAA,CAAAiG,CAAAA,CAAM,EAAA,CAAA,CAAA,CAAW,GAAA,CAAAC,CAAAA,CAAM,IAAU,IAAA,CAAAC,CAAAA,CAAO,CAAA,CAAG,QAAA,CAAA9L,CAAAA,CAAU,GAAGlB,CAAM,CAAA,CAAGC,IAAQ,CAEvH,IAAMwV,CAAAA,CAAkB,IAAM,CACxBrT,CAAAA,CAAQ4K,CAAAA,EAAQF,CAAAA,EAClBjG,IAAWzE,CAAAA,CAAQ4K,CAAI,EAE3B,CAAA,CAEM0I,CAAAA,CAAkB,IAAM,CACxBtT,CAAAA,CAAQ4K,GAAQD,CAAAA,EAClBlG,CAAAA,GAAWzE,CAAAA,CAAQ4K,CAAI,EAE3B,CAAA,CAEMkH,CAAAA,CAAgB3S,CAAAA,EAA2C,CAC/D,IAAMoP,CAAAA,CAAM,UAAA,CAAWpP,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAChC,KAAA,CAAMoP,CAAG,CAAA,EACZ9J,CAAAA,GAAW8J,CAAG,EAElB,CAAA,CAEA,OACEzQ,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAGiW,EAAAA,CAAoB,CAAE,IAAA,CAAA1U,CAAAA,CAAM,KAAA,CAAA6F,CAAAA,CAAO,SAAA,CAAA7G,CAAU,CAAC,CAAC,CAAA,CAChE,QAAA,CAAA,CAAAM,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,SACL,OAAA,CAASsV,CAAAA,CACT,QAAA,CAAUvU,CAAAA,EAAYkB,CAAAA,EAAS0K,CAAAA,CAC/B,SAAA,CAAU,6IAAA,CAEV,SAAA3M,GAAAA,CAACwV,KAAAA,CAAA,CAAM,SAAA,CAAU,aAAA,CAAc,CAAA,CACjC,CAAA,CAEAxV,GAAAA,CAAC,OAAI,SAAA,CAAU,8CAAA,CAA+C,CAAA,CAE9DA,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,IAAA,CAAK,SACL,KAAA,CAAOmC,CAAAA,CACP,QAAA,CAAU8R,CAAAA,CACV,QAAA,CAAUhT,CAAAA,CACV,SAAA,CAAU,4HAAA,CACT,GAAGlB,CAAAA,CACN,CAAA,CAEAG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAA+C,CAAA,CAE9DA,GAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAASuV,CAAAA,CACT,QAAA,CAAUxU,CAAAA,EAAYkB,CAAAA,EAAS2K,CAAAA,CAC/B,UAAU,6IAAA,CAEV,QAAA,CAAA5M,GAAAA,CAACyV,IAAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAc,CAAA,CAChC,CAAA,CAAA,CACF,CAEJ,CACF,EACAJ,EAAAA,CAAY,WAAA,CAAc,aAAA,CC1F1B,IAAMK,EAAAA,CAAsBnV,GAAAA,CAC1B,sHAAA,CACA,CACE,QAAA,CAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,KAAA,CACJ,EAAA,CAAI,MAAA,CACJ,EAAA,CAAI,MACN,EACA,SAAA,CAAW,CACT,IAAA,CAAM,aAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,gBAAiB,CACf,IAAA,CAAM,IAAA,CACN,SAAA,CAAW,KACb,CACF,CACF,CAAA,CAEMoV,GAAqBpV,GAAAA,CACzB,4VAAA,CACA,CACE,QAAA,CAAU,CACR,QAAA,CAAU,CACR,IAAA,CAAM,sEACN,KAAA,CAAO,8EACT,CAAA,CACA,SAAA,CAAW,CACT,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,QAAA,CAAU,KAAA,CACV,SAAA,CAAW,KACb,CACF,CACF,CAAA,CAQaqV,EAAAA,CAAcpW,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,UAAAE,CAAAA,CAAW,IAAA,CAAAgB,CAAAA,CAAM,SAAA,CAAAmV,CAAAA,CAAW,KAAA,CAAA5T,CAAAA,CAAO,QAAA,CAAAyE,EAAU,OAAA,CAAAzC,CAAAA,CAAS,GAAGpE,CAAM,CAAA,CAAGC,CAAAA,GAEjEE,GAAAA,CAAC,KAAA,CAAA,CAAI,IAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAGuW,EAAAA,CAAoB,CAAE,IAAA,CAAAhV,CAAAA,CAAM,SAAA,CAAAmV,EAAW,SAAA,CAAAnW,CAAU,CAAC,CAAC,CAAA,CAAI,GAAGG,CAAAA,CACpF,QAAA,CAAAoE,EAAQ,GAAA,CAAKqE,CAAAA,EACZvI,IAAAA,CAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM2G,IAAW4B,CAAAA,CAAO,KAAK,CAAA,CACtC,SAAA,CAAWnJ,CAAAA,CAAGwW,EAAAA,CAAmB,CAAE,QAAA,CAAU1T,CAAAA,GAAUqG,CAAAA,CAAO,KAAA,CAAO,SAAA,CAAAuN,CAAU,CAAC,CAAC,CAAA,CAEhF,UAAAvN,CAAAA,CAAO,IAAA,EAAQtI,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,MAAA,CAAQ,QAAA,CAAAsI,CAAAA,CAAO,KAAK,CAAA,CACnDA,CAAAA,CAAO,KAAA,CAAA,CAAA,CANHA,CAAAA,CAAO,KAOd,CACD,CAAA,CACH,CAGN,EACAsN,EAAAA,CAAY,WAAA,CAAc,aAAA,CCxD1B,IAAME,EAAAA,CAAQ,CACZ,OAAA,CACE9V,GAAAA,CAAC,OAAI,SAAA,CAAU,4BAAA,CAA6B,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAC/M,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,6BAAA,CAA8B,CAAA,CACxC,CAAA,CAEF,OAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,IAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,kBAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAK,CAAA,CAAE,oCAAA,CAAqC,CAAA,CAC7CA,GAAAA,CAAC,UAAA,CAAA,CAAS,MAAA,CAAO,uBAAA,CAAwB,CAAA,CAAA,CAC3C,EAEF,KAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,cAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,eAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,GAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAC/BA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EACrCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,OAAA,CAAQ,GAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,OAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,eAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,gBAAA,CAC1L,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,2EAAA,CAA4E,CAAA,CACpFA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,KAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CACrCA,GAAAA,CAAC,QAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,IAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,YAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,eAAA,CAC1L,QAAA,CAAA,CAAAC,IAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAC/BA,IAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,QAAQ,EAAA,CAAG,GAAA,CAAI,CAAA,CAAA,CACzC,CAEJ,CAAA,CAEa+V,EAAAA,CAAQ,CAAC,CACpB,GAAA5P,CAAAA,CACA,KAAA,CAAAlB,CAAAA,CACA,WAAA,CAAAgO,CAAAA,CACA,OAAA,CAAAxS,CAAAA,CAAU,SAAA,CACV,QAAA,CAAAqD,CAAAA,CAAW,GAAA,CACX,SAAA,CAAAkS,CACF,CAAA,IACExR,SAAAA,CAAU,IAAM,CACd,GAAIV,CAAAA,GAAa,CAAA,CAAA,CAAA,CAAU,OAE3B,IAAMmS,CAAAA,CAAQ,UAAA,CAAW,IAAM,CAC7BD,CAAAA,CAAU7P,CAAE,EACd,CAAA,CAAGrC,CAAQ,CAAA,CAEX,OAAO,IAAM,aAAamS,CAAK,CACjC,CAAA,CAAG,CAACnS,CAAAA,CAAUqC,CAAAA,CAAI6P,CAAS,CAAC,EAG1BjW,IAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,OAAA,CACL,SAAA,CAAWZ,CAAAA,CACT,qIAAA,CACA,0DAAA,CACA,sFACAsB,CAAAA,GAAY,OAAA,EAAW,wEAAA,CACvBA,CAAAA,GAAY,SAAA,EAAa,oFAAA,CACzBA,CAAAA,GAAY,SAAA,EAAa,6EACzBA,CAAAA,GAAY,MAAA,EAAU,wEAAA,CACtBA,CAAAA,GAAY,SAAA,EAAa,wEAC3B,CAAA,CAEC,QAAA,CAAA,CAAAA,IAAY,SAAA,EAAaqV,EAAAA,CAAMrV,CAAO,CAAA,EACrCT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACZ,QAAA,CAAA8V,EAAAA,CAAMrV,CAAO,CAAA,CAChB,CAAA,CAGFV,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,eACZ,QAAA,CAAA,CAAAkF,CAAAA,EAASjF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qDAAA,CAAuD,QAAA,CAAAiF,CAAAA,CAAM,EACrFgO,CAAAA,EAAejT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAiT,CAAAA,CAAY,CAAA,CAAA,CACzF,EAEAjT,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMgW,CAAAA,CAAU7P,CAAE,CAAA,CAC3B,SAAA,CAAU,yPAEV,QAAA,CAAApG,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,cAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CACxK,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,GAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CACpCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,GACtC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,MClFSkW,EAAAA,CAAepM,aAAAA,CAA4C,MAAS,EAE1E,SAASqM,EAAAA,CAAc,CAAE,QAAA,CAAA1W,CAAS,CAAA,CAAkC,CACzE,GAAM,CAAC2W,CAAAA,CAAQC,CAAS,CAAA,CAAIjS,QAAAA,CAAuB,EAAE,CAAA,CAE/CkS,CAAAA,CAAUnN,WAAAA,CAAahD,CAAAA,EAAe,CAC1CkQ,CAAAA,CAAWhO,CAAAA,EAASA,EAAK,MAAA,CAAQkO,CAAAA,EAAUA,CAAAA,CAAM,EAAA,GAAOpQ,CAAE,CAAC,EAC7D,CAAA,CAAG,EAAE,CAAA,CAECoQ,CAAAA,CAAQpN,WAAAA,CAAalF,CAAAA,EAA0B,CACnD,IAAMkC,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,CAAG,CAAC,CAAA,CACpD,OAAAkQ,CAAAA,CAAWhO,CAAAA,EAAS,CAAC,GAAGA,CAAAA,CAAM,CAAE,GAAGpE,CAAAA,CAAS,EAAA,CAAAkC,CAAAA,CAAI,SAAA,CAAWmQ,CAAQ,CAAC,CAAC,CAAA,CAC9DnQ,CACT,CAAA,CAAG,CAACmQ,CAAO,CAAC,CAAA,CAENE,CAAAA,CAAcrN,WAAAA,CAAY,CAAChD,EAAYlC,CAAAA,GAAmC,CAC9EoS,CAAAA,CAAWhO,CAAAA,EACTA,CAAAA,CAAK,GAAA,CAAKoO,CAAAA,EAAOA,CAAAA,CAAE,KAAOtQ,CAAAA,CAAK,CAAE,GAAGsQ,CAAAA,CAAG,GAAGxS,CAAQ,CAAA,CAAIwS,CAAE,CAC1D,EACF,CAAA,CAAG,EAAE,CAAA,CAECC,CAAAA,CAAUvN,WAAAA,CACd,MACEuN,EACAzS,CAAAA,GAKG,CACH,IAAM0S,CAAAA,CAAiB,OAAO1S,CAAAA,CAAQ,OAAA,EAAY,QAAA,CAC9C,CAAE,KAAA,CAAOA,CAAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,SAAmB,CAAA,CACtD,CAAE,QAAS,SAAA,CAAoB,GAAGA,CAAAA,CAAQ,OAAQ,CAAA,CAEhDkC,CAAAA,CAAKoQ,CAAAA,CAAM,CAAE,GAAGI,CAAAA,CAAgB,QAAA,CAAU,CAAA,CAAA,CAAS,CAAC,CAAA,CAE1D,GAAI,CACF,IAAMC,EAAO,MAAMF,CAAAA,CACbG,CAAAA,CAAiB,OAAO5S,CAAAA,CAAQ,OAAA,EAAY,UAAA,CAC9CA,CAAAA,CAAQ,QAAQ2S,CAAI,CAAA,CACpB,OAAO3S,CAAAA,CAAQ,OAAA,EAAY,QAAA,CAC3B,CAAE,KAAA,CAAOA,EAAQ,OAAA,CAAS,OAAA,CAAS,SAAmB,CAAA,CACtDA,CAAAA,CAAQ,OAAA,CAEZ,OAAAuS,CAAAA,CAAYrQ,EAAI,CAAE,GAAG0Q,CAAAA,CAAgB,QAAA,CAAU,GAAK,CAAC,CAAA,CAC9CD,CACT,OAASE,CAAAA,CAAK,CACZ,IAAMC,CAAAA,CAAe,OAAO9S,CAAAA,CAAQ,KAAA,EAAU,UAAA,CAC1CA,CAAAA,CAAQ,KAAA,CAAM6S,CAAG,CAAA,CACjB,OAAO7S,CAAAA,CAAQ,KAAA,EAAU,QAAA,CACzB,CAAE,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CAAO,OAAA,CAAS,OAAiB,CAAA,CAClDA,CAAAA,CAAQ,KAAA,CAEZ,MAAAuS,CAAAA,CAAYrQ,CAAAA,CAAI,CAAE,GAAG4Q,CAAAA,CAAc,QAAA,CAAU,GAAK,CAAC,EAC7CD,CACR,CACF,CAAA,CACA,CAACP,CAAAA,CAAOC,CAAW,CACrB,CAAA,CAEA,OACEzW,IAAAA,CAACmW,EAAAA,CAAa,QAAA,CAAb,CAAsB,KAAA,CAAO,CAAE,KAAA,CAAAK,CAAAA,CAAO,QAAAD,CAAAA,CAAS,OAAA,CAAAI,CAAQ,CAAA,CACrD,QAAA,CAAA,CAAAjX,CAAAA,CACDO,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,oJAAA,CACZ,QAAA,CAAAoW,CAAAA,CAAO,GAAA,CAAKG,CAAAA,EACXvW,GAAAA,CAAC+V,EAAAA,CAAA,CAAsB,GAAGQ,CAAAA,CAAAA,CAAdA,CAAAA,CAAM,EAAe,CAClC,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CC7EA,IAAMT,EAAAA,CAAQ,CACZ,OAAA,CACE/V,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,eAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,kBAAA,CAC1L,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,oCAAA,CAAqC,CAAA,CAC7CA,GAAAA,CAAC,UAAA,CAAA,CAAS,MAAA,CAAO,wBAAwB,CAAA,CAAA,CAC3C,CAAA,CAEF,KAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,YAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,eAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,EAC/BA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,GAAG,IAAA,CAAK,CAAA,CACrCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,GAAG,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,OAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,UAAU,gBAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,2EAAA,CAA4E,CAAA,CACpFA,GAAAA,CAAC,QAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CACrCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,QAAQ,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CAC3C,CAAA,CAEF,IAAA,CACED,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,6BAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,gBAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA,CAC/BA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,KAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAI,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,GAAA,CAAI,CAAA,CAAA,CACzC,CAEJ,CAAA,CAEagX,EAAAA,CAAQxX,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,OAAA,CAAAe,CAAAA,CAAU,UAAW,IAAA,CAAAuB,CAAAA,CAAM,KAAA,CAAAiD,CAAAA,CAAO,QAAA,CAAAxF,CAAAA,CAAU,GAAGI,CAAM,EAAGC,CAAAA,GAAQ,CAC5E,IAAMmX,CAAAA,CAAOjV,CAAAA,GAASvB,CAAAA,GAAY,SAAA,CAAYqV,EAAAA,CAAMrV,CAAO,CAAA,CAAI,IAAA,CAAA,CAE/D,OACEV,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,IAAA,CAAK,QACL,SAAA,CAAWX,CAAAA,CACT,kLAAA,CACA,mHAAA,CACAsB,CAAAA,GAAY,OAAA,EAAW,yJAAA,CACvBA,CAAAA,GAAY,WAAa,iLAAA,CACzBA,CAAAA,GAAY,SAAA,EAAa,iKAAA,CACzBA,CAAAA,GAAY,MAAA,EAAU,yJAAA,CACtBf,CACF,EACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAoX,CAAAA,CACDlX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACZ,UAAAkF,CAAAA,EACCjF,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8CAAA,CACX,QAAA,CAAAiF,CAAAA,CACH,CAAA,CAEDxF,CAAAA,EACCO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACZ,QAAA,CAAAP,CAAAA,CACH,CAAA,CAAA,CAEJ,GACF,CAEJ,CACF,EAEAuX,EAAAA,CAAM,WAAA,CAAc,OAAA,CC/Db,IAAME,EAAAA,CAAW1X,WAAAA,CAAM,UAAA,CAC5B,CAAC,CACC,SAAA,CAAAE,CAAAA,CACA,KAAA,CAAAuC,CAAAA,CAAQ,CAAA,CACR,GAAA,CAAA2K,CAAAA,CAAM,GAAA,CACN,QAAAnM,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,eAAA,CAAAyW,CAAAA,CAAkB,KAAA,CAClB,UAAAC,CAAAA,CAAY,KAAA,CACZ,kBAAA,CAAAC,CAAAA,CACA,GAAGxX,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,IAAMiN,CAAAA,CAAaoK,CAAAA,CAAkB,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAA,CAAKlV,GAAS,CAAA,EAAK2K,CAAAA,CAAK,CAAC,CAAA,CAAG,CAAC,CAAA,CAAI,GAAA,CAElF0K,CAAAA,CAAW,CACf,OAAA,CAAS,wEAAA,CACT,OAAA,CAAS,sEAAA,CACT,OAAA,CAAS,oEAAA,CACT,MAAA,CAAQ,mEACR,QAAA,CAAU,iHACZ,CAAA,CAQA,OACEtX,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,KAAK,aAAA,CACL,eAAA,CAAe,CAAA,CACf,eAAA,CAAe8M,CAAAA,CACf,eAAA,CAAeuK,CAAAA,CAAkB,MAAA,CAAYlV,EAC7C,SAAA,CAAW9C,CAAAA,CACT,2IAAA,CAdQ,CACZ,EAAA,CAAI,KAAA,CACJ,EAAA,CAAI,KAAA,CACJ,GAAI,KACN,CAAA,CAWYuB,CAAI,CAAA,CACVhB,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,SAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,uFAAA,CACAmY,CAAAA,CAAS7W,CAAO,CAAA,CAChB0W,GAAmB,oEAAA,CACnBE,CACF,CAAA,CACA,KAAA,CAAO,CACL,SAAA,CAAWF,CAAAA,CAAkB,MAAA,CAAY,eAAe,GAAA,CAAMpK,CAAU,CAAA,EAAA,CAC1E,CAAA,CAEC,QAAA,CAAAqK,CAAAA,EAAa,CAACD,CAAAA,EACbnX,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDAAA,CACV,KAAA,CAAO,CACL,eAAA,CAAiB,kKAAA,CACjB,eAAgB,WAClB,CAAA,CACL,CAAA,CAEJ,CAAA,CACF,CAEJ,CACF,EAEAkX,EAAAA,CAAS,YAAc,UAAA,CCvEhB,IAAMK,EAAAA,CAAa/X,WAAAA,CAAM,WAC9B,CAAC,CAAE,IAAA,CAAAwC,CAAAA,CAAM,KAAA,CAAAiD,CAAAA,CAAO,WAAA,CAAAgO,CAAAA,CAAa,OAAAuE,CAAAA,CAAQ,SAAA,CAAA9X,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAExDE,GAAAA,CAAC0C,EAAA,CACC,GAAA,CAAK5C,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,iBAAA,CAAmBO,CAAS,CAAA,CACzC,GAAGG,CAAAA,CAEJ,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4GAAA,CACZ,QAAA,CAAAgC,CAAAA,EAAQhC,GAAAA,CAACyX,IAAAA,CAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CACrC,CAAA,CACAzX,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAoC,QAAA,CAAAiF,EAAM,CAAA,CACxDgO,CAAAA,CAAcjT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CAAyB,QAAA,CAAAiT,CAAAA,CAAY,EAAS,IAAA,CAC3EuE,CAAAA,CAASxX,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CAA4B,QAAA,CAAAwX,CAAAA,CAAO,EAAS,IAAA,CAAA,CACvE,CAAA,CACF,CAGN,EAEAD,EAAAA,CAAW,WAAA,CAAc,YAAA,CC1BlB,SAASG,EAAAA,CAAS,CAAE,SAAA,CAAAhY,CAAAA,CAAW,OAAA,CAAAe,CAAAA,CAAU,UAAW,GAAGZ,CAAM,CAAA,CAAkB,CACpF,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,EACT,gDAAA,CACAsB,CAAAA,GAAY,QAAA,EAAY,cAAA,CACxBA,CAAAA,GAAY,SAAA,EAAa,aAAA,CACzBA,CAAAA,GAAY,MAAA,EAAU,oBAAA,CACtBf,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,CCRO,IAAM8X,EAAAA,CAASnY,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,UAAAE,CAAAA,CAAW,GAAA,CAAAkN,CAAAA,CAAM,CAAA,CAAG,KAAA,CAAA3K,CAAAA,CAAQ,CAAA,CAAG,QAAA,CAAAyE,EAAU,QAAA,CAAAkR,CAAAA,CAAW,KAAA,CAAO,IAAA,CAAAlX,CAAAA,CAAO,IAAA,CAAM,GAAGb,CAAM,EAAGC,CAAAA,GAAQ,CAC7F,GAAM,CAAC+X,CAAAA,CAAYC,CAAa,CAAA,CAAI1T,QAAAA,CAAwB,IAAI,CAAA,CAE1D2T,CAAAA,CAAQ,CACZ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,SACN,CAAA,CAEA,OACE/X,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,yBAAA,CAA2BO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACrE,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,OAAQ+M,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAChB,CAAAA,CAAGjG,CAAAA,GAAM,CACzC,IAAMoC,CAAAA,CAAQpC,CAAAA,CAAI,CAAA,CACZqS,CAAAA,CAAAA,CAAYH,CAAAA,GAAe,IAAA,CAAOA,CAAAA,CAAa5V,CAAAA,GAAU8F,EAE/D,OACE/H,GAAAA,CAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,QAAA,CAAU4X,CAAAA,CACV,OAAA,CAAS,IAAMlR,CAAAA,GAAWqB,CAAK,CAAA,CAC/B,YAAA,CAAc,IAAM,CAAC6P,CAAAA,EAAYE,CAAAA,CAAc/P,CAAK,CAAA,CACpD,YAAA,CAAc,IAAM,CAAC6P,CAAAA,EAAYE,CAAAA,CAAc,IAAI,CAAA,CACnD,UAAW3Y,CAAAA,CACT,yDAAA,CACAyY,CAAAA,EAAY,gCACd,CAAA,CAEA,QAAA,CAAA5X,GAAAA,CAACiY,IAAAA,CAAA,CACC,SAAA,CAAW9Y,CAAAA,CACT4Y,CAAAA,CAAMrX,CAAI,CAAA,CACV,gCAAA,CACAsX,CAAAA,CACI,+BAAA,CACA,mDACN,CAAA,CACF,CAAA,CAAA,CAnBKrS,CAoBP,CAEJ,CAAC,CAAA,CACH,CAEJ,CACF,EACAgS,EAAAA,CAAO,WAAA,CAAc,QAAA,CCnDrB,IAAMO,EAAAA,CAAiB3X,GAAAA,CACrB,sCAAA,CACA,CACE,QAAA,CAAU,CACR,MAAA,CAAQ,CACN,IAAA,CAAQ,yBAAA,CACR,MAAA,CAAU,kCAAA,CACV,aAAA,CAAe,0BAAA,CACf,aAAc,yBAAA,CACd,IAAA,CAAQ,6BAAA,CACR,SAAA,CAAW,uBACb,CAAA,CACA,YAAA,CAAc,CACZ,KAAQ,2BAAA,CACR,MAAA,CAAU,0DAAA,CACV,aAAA,CAAe,2BAAA,CACf,YAAA,CAAc,2BAAA,CACd,IAAA,CAAQ,+BACR,SAAA,CAAW,wBACb,CACF,CAAA,CACA,eAAA,CAAiB,CACf,MAAA,CAAQ,QACV,CACF,CACF,CAAA,CAUO,SAAS4X,EAAAA,CAAO,CACrB,SAAA,CAAAzY,CAAAA,CACA,MAAA,CAAA0Y,CAAAA,CAAS,QAAA,CACT,QAAA,CAAAC,CAAAA,CAAW,IAAA,CACX,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAzT,EAAQ,CAAA,CACR,IAAA,CAAA0T,CAAAA,CAAO,IAAA,CACP,OAAA,CAAA1X,CAAAA,CAAU,KAAA,CACV,QAAA,CAAApB,EACA,KAAA,CAAA+Y,CAAAA,CACA,GAAG3Y,CACL,CAAA,CAAgB,CACd,GAAM,CAAE,IAAAC,CAAAA,CAAK,QAAA,CAAAoE,CAAAA,CAAU,WAAA,CAAAG,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,UAAW,EAAA,CAAK,OAAA,CAASqU,CAAAA,EAAYC,CAAAA,GAAY,MAAU,CAAC,CAAA,CAIzGG,CAAAA,CAAaH,IAAY,MAAA,CAAYA,CAAAA,CADtBD,CAAAA,CAAYE,CAAAA,CAAOlU,CAAAA,CAAcH,CAAAA,CAAY,IAAA,CA2B5DwU,CAAAA,CAAiBR,GAAe,CAAE,MAAA,CAAAE,CAAO,CAAC,CAAA,CAC1CO,CAAAA,CAAiBF,CAAAA,CAAaP,EAAAA,CAAe,CAAE,YAAA,CAAcE,CAAc,CAAC,CAAA,CAAI,EAAA,CAOtF,OACEpY,GAAAA,CAHWa,CAAAA,CAAUZ,EAAAA,CAAO,KAAA,CAG3B,CACC,GAAA,CAAKH,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACTuZ,CAAAA,CACAC,EACAjZ,CACF,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,CAAA,EAAGmF,CAAK,CAAA,EAAA,CAAA,CACzB,WAAY,oBAAA,CACZ,GAAG2T,CACL,CAAA,CACC,GAAG3Y,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CCnGO,SAASmZ,GAAY,CAC1B,QAAA,CAAAnZ,CAAAA,CACA,OAAA,CAAAoZ,CAAAA,CAAU,GAAA,CACV,KAAA,CAAAhU,CAAAA,CAAQ,EACR,SAAA,CAAAnF,CAAAA,CACA,GAAGG,CACL,CAAA,CAAqB,CACnB,GAAM,CAAE,IAAAC,CAAAA,CAAK,WAAA,CAAAuE,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAI,CAAC,CAAA,CAEzD,OACEhE,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,UAAA,CAAYO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACtD,QAAA,CAAAL,WAAAA,CAAM,QAAA,CAAS,IAAIC,CAAAA,CAAU,CAACW,CAAAA,CAAO2H,CAAAA,GAChCvI,WAAAA,CAAM,cAAA,CAAeY,CAAK,CAAA,CACrBZ,YAAM,YAAA,CAAaY,CAAAA,CAAkC,CAE1D,OAAA,CAASiE,CAAAA,CAET,QAAA,CAAU,KAAA,CAEV,KAAA,CAAOQ,EAASkD,CAAAA,CAAQ8Q,CAC1B,CAAC,CAAA,CAEIzY,CACR,CAAA,CACH,CAEJ,CCzBO,SAAS0Y,EAAAA,CAAW,CACzB,IAAA,CAAAtT,EACA,IAAA,CAAA+K,CAAAA,CAAO,MAAA,CACP,OAAA,CAAAsI,CAAAA,CAAU,EAAA,CACV,KAAA,CAAAhU,CAAAA,CAAQ,EACR,SAAA,CAAAnF,CAAAA,CACA,GAAGG,CACL,CAAA,CAAoB,CAClB,GAAM,CAAE,IAAAC,CAAAA,CAAK,WAAA,CAAAuE,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAI,CAAC,CAAA,CAEnDqH,CAAAA,CAAQkF,CAAAA,GAAS,MAAA,CAAS/K,CAAAA,CAAK,KAAA,CAAM,EAAE,EAAIA,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAE/D,OACExF,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CAAG,gBAAA,CAAkBO,CAAS,CAAA,CACzC,YAAA,CAAY8F,CAAAA,CACX,GAAG3F,EAEH,QAAA,CAAAwL,CAAAA,CAAM,GAAA,CAAI,CAACQ,CAAAA,CAAMlG,CAAAA,GAChB5F,IAAAA,CAAC,MAAA,CAAA,CAEC,UAAWZ,CAAAA,CACT,wFAAA,CACAkF,CAAAA,CACI,kCAAA,CACA,iCACN,CAAA,CACA,KAAA,CAAO,CACL,gBAAiB,CAAA,EAAGQ,CAAAA,CAASc,CAAAA,CAAIkT,CAAQ,CAAA,EAAA,CAC3C,CAAA,CAEC,QAAA,CAAA,CAAAhN,CAAAA,CAAM0E,IAAS,MAAA,EAAU5K,CAAAA,GAAM0F,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAI,GAAA,CAAM,EAAA,CAAA,CAAA,CAXpD1F,CAYP,CACD,CAAA,CACH,CAEJ,CCxCO,SAASoT,EAAAA,CAAS,CACvB,QAAA,CAAAtZ,EACA,KAAA,CAAAuZ,CAAAA,CAAQ,EAAA,CACR,SAAA,CAAAtV,CAAAA,CAAY,UAAA,CACZ,SAAA,CAAAhE,CAAAA,CACA,GAAGG,CACL,CAAA,CAAkB,CAChB,IAAMC,CAAAA,CAAMoB,MAAAA,CAAuB,IAAI,CAAA,CAEvC,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAU3E,CAAAA,CAAI,OAAA,CACpB,GAAI,CAAC2E,CAAAA,CAAS,OAEd,IAAMwU,CAAAA,CAAe,IAAM,CACzB,IAAM3X,CAAAA,CAAOmD,EAAQ,qBAAA,EAAsB,CACrCyU,CAAAA,CAAe,MAAA,CAAO,WAAA,CAG5B,GAAI5X,CAAAA,CAAK,GAAA,CAAM4X,GAAgB5X,CAAAA,CAAK,MAAA,CAAS,CAAA,CAAG,OAMhD,IAAM6X,CAAAA,CAAAA,CAFgBD,CAAAA,CAAe,CAAA,EAAM5X,EAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAAA,EAEnC0X,CAAAA,CAE7BtV,CAAAA,GAAc,UAAA,CAChBe,CAAAA,CAAQ,KAAA,CAAM,SAAA,CAAY,CAAA,eAAA,EAAkB0U,CAAS,CAAA,MAAA,CAAA,CAErD1U,CAAAA,CAAQ,KAAA,CAAM,SAAA,CAAY,eAAe0U,CAAS,CAAA,SAAA,EAEtD,CAAA,CAEA,OAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUF,CAAAA,CAAc,CAAE,QAAS,IAAK,CAAC,CAAA,CACjEA,CAAAA,EAAa,CAEN,IAAM,MAAA,CAAO,mBAAA,CAAoB,SAAUA,CAAY,CAChE,CAAA,CAAG,CAACD,CAAAA,CAAOtV,CAAS,CAAC,CAAA,CAGnB1D,IAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,uBAAA,CAAyBO,CAAS,CAAA,CAC/C,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CC/CO,SAAS2Z,EAAAA,CAAS,CAAE,SAAA3Z,CAAAA,CAAU,QAAA,CAAA4Z,CAAAA,CAAW,EAAA,CAAK,SAAA,CAAA3Z,CAAU,CAAA,CAAkB,CAC/E,IAAMI,CAAAA,CAAMoB,MAAAA,CAAuB,IAAI,CAAA,CAEjCkM,CAAAA,CAAmBhM,CAAAA,EAAkB,CACzC,IAAMC,CAAAA,CAAKvB,CAAAA,CAAI,OAAA,CACf,GAAI,CAACuB,CAAAA,CAAI,OAET,GAAM,CAAE,OAAA,CAAA2L,CAAAA,CAAS,OAAA,CAAAsM,CAAQ,CAAA,CAAIlY,CAAAA,CACvB,CAAE,IAAA,CAAAmI,EAAM,GAAA,CAAAD,CAAAA,CAAK,KAAA,CAAA2D,CAAAA,CAAO,MAAA,CAAAsM,CAAO,CAAA,CAAIlY,CAAAA,CAAG,uBAAsB,CAExDmY,CAAAA,CAAUjQ,CAAAA,CAAO0D,CAAAA,CAAQ,CAAA,CACzBwM,CAAAA,CAAUnQ,CAAAA,CAAMiQ,CAAAA,CAAS,EAEzBG,CAAAA,CAAY1M,CAAAA,CAAUwM,CAAAA,CACtBG,CAAAA,CAAYL,CAAAA,CAAUG,CAAAA,CAGtBG,CAAAA,CAAY,IAAA,CAAK,IAAI3M,CAAAA,CAAOsM,CAAM,CAAA,CAAI,GAAA,CACxC,IAAA,CAAK,GAAA,CAAIG,CAAS,CAAA,CAAIE,GAAa,IAAA,CAAK,GAAA,CAAID,CAAS,CAAA,CAAIC,CAAAA,EAC3DvY,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,SAAA,CAAW,CAAA,EAAGqY,CAAAA,CAAYL,CAAQ,CAAA,EAAA,CAAI,CAAA,CAC3DhY,CAAAA,CAAG,KAAA,CAAM,YAAY,SAAA,CAAW,CAAA,EAAGsY,CAAAA,CAAYN,CAAQ,CAAA,EAAA,CAAI,CAAA,GAE3DhY,CAAAA,CAAG,KAAA,CAAM,YAAY,SAAA,CAAW,KAAK,CAAA,CACrCA,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,SAAA,CAAW,KAAK,GAEzC,CAAA,CAEMwY,CAAAA,CAAmB,IAAM,CAC7B,IAAMxY,CAAAA,CAAKvB,CAAAA,CAAI,OAAA,CACXuB,IACFA,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,SAAA,CAAW,KAAK,CAAA,CACrCA,CAAAA,CAAG,KAAA,CAAM,YAAY,SAAA,CAAW,KAAK,CAAA,EAEzC,CAAA,CAEA,OAAAmD,SAAAA,CAAU,KACR,MAAA,CAAO,iBAAiB,WAAA,CAAa4I,CAAe,CAAA,CAC7C,IAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,CAAaA,CAAe,GACnE,CAACiM,CAAQ,CAAC,CAAA,CAGXrZ,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,+EAAA,CAAiFO,CAAS,CAAA,CACxG,YAAA,CAAcma,CAAAA,CACd,KAAA,CAAO,CACL,SAAA,CAAW,sDACb,CAAA,CAEC,QAAA,CAAApa,CAAAA,CACH,CAEJ,CClDO,SAASqa,EAAAA,CAAa,CAC3B,KAAA,CAAA7X,CAAAA,CACA,QAAA,CAAA6B,CAAAA,CAAW,GAAA,CACX,MAAAe,CAAAA,CAAQ,CAAA,CACR,aAAA,CAAAkV,CAAAA,CAAgB,CAAA,CAChB,SAAA,CAAAra,CAAAA,CACA,GAAGG,CACL,CAAA,CAAsB,CACpB,GAAM,CAACma,CAAAA,CAAcC,CAAe,CAAA,CAAI7V,QAAAA,CAAS,CAAC,CAAA,CAC5C,CAAE,GAAA,CAAAtE,CAAAA,CAAK,WAAA,CAAAuE,CAAY,CAAA,CAAIL,EAAAA,CAAU,CAAE,SAAA,CAAW,EAAI,CAAC,CAAA,CACnDkW,CAAAA,CAAehZ,MAAAA,CAAsB,IAAI,CAAA,CAE/C,OAAAsD,SAAAA,CAAU,IAAM,CACd,GAAI,CAACH,CAAAA,CAAa,OAElB,IAAMV,CAAAA,CAAWwW,CAAAA,EAAsB,CAChCD,CAAAA,CAAa,OAAA,GAASA,CAAAA,CAAa,OAAA,CAAUC,CAAAA,CAAAA,CAClD,IAAMC,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAA,CAAKD,CAAAA,CAAYD,CAAAA,CAAa,OAAA,CAAUrV,CAAAA,EAASf,CAAAA,CAAU,CAAC,CAAA,CAElF,GAAIsW,CAAAA,EAAY,CAAA,CAAG,CACjB,IAAMC,CAAAA,CAAUD,CAAAA,CAAWnY,EAC3BgY,CAAAA,CAAgBI,CAAO,EACzB,CAEID,CAAAA,CAAW,CAAA,EACb,qBAAA,CAAsBzW,CAAO,EAEjC,CAAA,CAEM2W,CAAAA,CAAU,UAAA,CAAW,IAAM,CAC/B,qBAAA,CAAsB3W,CAAO,EAC/B,EAAGkB,CAAK,CAAA,CAER,OAAO,IAAM,YAAA,CAAayV,CAAO,CACnC,CAAA,CAAG,CAACjW,CAAAA,CAAapC,CAAAA,CAAO6B,CAAAA,CAAUe,CAAK,CAAC,CAAA,CAGtC7E,GAAAA,CAAC,MAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,+BAAA,CAAiCO,CAAS,CAAA,CACvD,GAAGG,EAEH,QAAA,CAAAma,CAAAA,CAAa,OAAA,CAAQD,CAAa,CAAA,CACrC,CAEJ,CC9CO,SAASQ,GAAW,CACzB,OAAA,CAAA9Z,CAAAA,CAAU,SAAA,CACV,IAAA,CAAA+E,CAAAA,CACA,UAAA,CAAAgV,CAAAA,CAAa,KACb,SAAA,CAAA9a,CAAAA,CACA,GAAGG,CACL,CAAA,CAAoB,CAClB,IAAM4a,CAAAA,CAAaD,EACf,sGAAA,CACA,kEAAA,CAEJ,OAAI/Z,CAAAA,GAAY,KAAA,CAEZT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,uDAAA,CAAyDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC1F,QAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,+DAAA,CAAgE,CAAA,CACjF,CAAA,CAIAS,CAAAA,GAAY,MAAA,CAEZV,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAGsb,CAAAA,CAAY/a,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7C,QAAA,CAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yEAAA,CAA0E,CAAA,CACzFA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0EAAA,CAA2E,CAAA,CAC1FA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iDAAA,CAAkD,GACnE,CAAA,CACCwF,CAAAA,EAAQxF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2DAAA,CAA6D,QAAA,CAAAwF,CAAAA,CAAK,GAC7F,CAAA,CAIA/E,CAAAA,GAAY,MAAA,CAEZT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAGsb,CAAAA,CAAY/a,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7C,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8HAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAA4D,CAAA,CAC3EA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6BAAA,CAA8B,CAAA,CAAA,CAC/C,CAAA,CACCwF,CAAAA,EAAQxF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oEAAA,CAAsE,QAAA,CAAAwF,CAAAA,CAAK,CAAA,CAAA,CACtG,CAAA,CACF,EAIA/E,CAAAA,GAAY,OAAA,CAEZT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAGsb,CAAAA,CAAY,+CAAA,CAAiD/a,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC9F,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,UAAAC,GAAAA,CAAC0a,OAAAA,CAAA,CAAQ,SAAA,CAAU,iCAAA,CAAkC,CAAA,CACpDlV,CAAAA,EAAQxF,GAAAA,CAAC,QAAK,SAAA,CAAU,+CAAA,CAAiD,QAAA,CAAAwF,CAAAA,CAAK,CAAA,CAAA,CACjF,CAAA,CACF,CAAA,CAMFxF,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAGsb,CAAAA,CAAY/a,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7C,QAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC0a,OAAAA,CAAA,CAAQ,SAAA,CAAU,qCAAqC,CAAA,CACvDlV,CAAAA,EAAQxF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sDAAA,CAAwD,QAAA,CAAAwF,CAAAA,CAAK,CAAA,CAAA,CACxF,CAAA,CACF,CAEJ,CCnEO,SAASmV,EAAAA,CAAe,CAC7B,MAAA,CAAAvC,EAAS,MAAA,CACT,QAAA,CAAAtU,CAAAA,CAAW,GAAA,CACX,iBAAA,CAAA8W,CAAAA,CAAoB,KAAA,CACpB,SAAA,CAAAlb,EACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAwB,CACtB,GAAM,CAACyM,EAAWuO,CAAY,CAAA,CAAIzW,QAAAA,CAAS,KAAK,CAAA,CAEhDI,SAAAA,CAAU,IAAM,CACd,GAAIoW,CAAAA,EAAsB,QAAA,CAAiB,mBAAA,CACxC,QAAA,CAAiB,mBAAA,CAAoB,IAAM,CAC1CC,CAAAA,CAAa,IAAI,EACnB,CAAC,CAAA,CAAA,KACI,CACL,IAAM5E,CAAAA,CAAQ,qBAAA,CAAsB,IAAM,CACxC4E,CAAAA,CAAa,IAAI,EACnB,CAAC,CAAA,CACD,OAAO,IAAM,oBAAA,CAAqB5E,CAAK,CACzC,CACF,CAAA,CAAG,CAAC2E,CAAiB,CAAC,CAAA,CAyBtB,IAAME,CAAAA,CAvBU,CACd,IAAA,CAAM,CACJ,OAAA,CAAS,WAAA,CACT,OAAA,CAAS,aACX,EACA,UAAA,CAAY,CACV,OAAA,CAAS,yBAAA,CACT,OAAA,CAAS,2BACX,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,oBAAA,CACT,OAAA,CAAS,uBACX,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,oBACT,OAAA,CAAS,oBACX,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,EAAA,CACT,OAAA,CAAS,EACX,CACF,CAAA,CAE8B1C,CAAM,CAAA,CAEpC,OACEpY,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,EACT,yBAAA,CACAmN,CAAAA,CAAYwO,CAAAA,CAAc,OAAA,CAAUA,CAAAA,CAAc,OAAA,CAClDpb,CACF,CAAA,CACA,MAAO,CACL,kBAAA,CAAoB,CAAA,EAAGoE,CAAQ,CAAA,EAAA,CAAA,CAC/B,kBAAA,CAAoB8W,CAAAA,CAAoB,cAAA,CAAiB,MAC3D,CAAA,CACC,GAAG/a,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CC/DA,IAAMsb,EAAAA,CAAc,CAClB,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,mBAAA,CACJ,EAAA,CAAI,sBACJ,EAAA,CAAI,mBACN,CAAA,CAEaC,CAAAA,CAASxb,WAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,UAAAE,CAAAA,CAAW,GAAA,CAAAub,CAAAA,CAAK,GAAA,CAAAC,CAAAA,CAAK,QAAA,CAAAC,CAAAA,CAAU,IAAA,CAAAza,EAAO,IAAA,CAAM,GAAGb,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACjE,GAAM,CAACsb,EAAYC,CAAa,CAAA,CAAIjX,QAAAA,CAAS,KAAK,CAAA,CAElD,OAAAI,SAAAA,CAAU,IAAM,CACd6W,CAAAA,CAAc,KAAK,EACrB,CAAA,CAAG,CAACJ,CAAG,CAAC,CAAA,CAGNjb,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,sFAAA,CACA4b,EAAAA,CAAYra,CAAI,CAAA,CAChBhB,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAob,CAAAA,EAAO,CAACG,EACPpb,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKib,CAAAA,CACL,GAAA,CAAKC,CAAAA,CACL,SAAA,CAAU,0CAAA,CACV,QAAS,IAAMG,CAAAA,CAAc,IAAI,CAAA,CACnC,CAAA,CAEArb,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0HACZ,QAAA,CAAAmb,CAAAA,GAAaD,CAAAA,CAAMA,CAAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,GAAgB,GAAA,CAAA,CACpD,CAAA,CAEJ,CAEJ,CACF,EAEAF,CAAAA,CAAO,WAAA,CAAc,QAAA,CC1CrB,IAAMM,EAAAA,CAAmBxR,aAAAA,CAAiD,MAAS,CAAA,CAU5E,SAASyR,EAAAA,CAAU,CACxB,IAAA,CAAAhL,EAAO,QAAA,CACP,YAAA,CAAArJ,CAAAA,CACA,KAAA,CAAAjF,CAAAA,CACA,aAAA,CAAA8I,CAAAA,CACA,SAAA,CAAArL,EACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAmB,CACjB,GAAM,CAACyH,EAAeC,CAAgB,CAAA,CAAInD,QAAAA,CACxC8C,CAAAA,GAAiBqJ,CAAAA,GAAS,UAAA,CAAa,EAAC,CAAI,GAC9C,CAAA,CAEM3I,CAAAA,CAAe3F,CAAAA,GAAU,MAAA,CAAYA,CAAAA,CAAQqF,CAAAA,CAE7CiE,CAAAA,CAAqBiQ,CAAAA,EAAsB,CAC/C,IAAI1U,CAAAA,CAEJ,GAAIyJ,CAAAA,GAAS,UAAA,CAAY,CACvB,IAAMkL,CAAAA,CAAa,MAAM,OAAA,CAAQ7T,CAAY,CAAA,CAAIA,CAAAA,CAAe,EAAC,CAC7D6T,CAAAA,CAAW,QAAA,CAASD,CAAS,CAAA,CAC/B1U,CAAAA,CAAW2U,CAAAA,CAAW,MAAA,CAAQC,CAAAA,EAAMA,CAAAA,GAAMF,CAAS,CAAA,CAEnD1U,EAAW,CAAC,GAAG2U,CAAAA,CAAYD,CAAS,EAExC,CAAA,KACE1U,CAAAA,CAAWc,CAAAA,GAAiB4T,EAAY,EAAA,CAAKA,CAAAA,CAG3CvZ,CAAAA,GAAU,MAAA,EACZsF,CAAAA,CAAiBT,CAAQ,CAAA,CAG3BiE,CAAAA,GAAgBjE,CAAe,EACjC,CAAA,CAEA,OACE9G,GAAAA,CAACsb,EAAAA,CAAiB,QAAA,CAAjB,CACC,KAAA,CAAO,CAAE,KAAA,CAAO1T,CAAAA,CAAc,aAAA,CAAe2D,CAAAA,CAAmB,IAAA,CAAAgF,CAAK,CAAA,CAErE,QAAA,CAAAvQ,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7C,SAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAGA,IAAMkc,EAAAA,CAAuB7R,aAAAA,CAAkD,CAAE,MAAO,EAAA,CAAI,MAAA,CAAQ,KAAM,CAAC,CAAA,CAOpG,SAAS8R,EAAAA,CAAc,CAAE,UAAAlc,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAxC,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAuB,CAC1F,IAAMyK,CAAAA,CAAUC,UAAAA,CAAW+Q,EAAgB,CAAA,CACrClU,CAAAA,CAAS,KAAA,CAAM,QAAQkD,CAAAA,EAAS,KAAK,CAAA,CACvCA,CAAAA,EAAS,KAAA,CAAM,QAAA,CAASrI,CAAK,CAAA,CAC7BqI,GAAS,KAAA,GAAUrI,CAAAA,CAEvB,OACEjC,GAAAA,CAAC2b,EAAAA,CAAqB,QAAA,CAArB,CAA8B,KAAA,CAAO,CAAE,KAAA,CAAA1Z,CAAAA,CAAO,MAAA,CAAQ,CAAC,CAACmF,CAAO,CAAA,CAC9D,QAAA,CAAApH,IAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,oIAAA,CACAiI,CAAAA,EAAU,oEAAA,CACV1H,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAASoc,EAAAA,CAAiB,CAAE,SAAA,CAAAnc,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA0B,CACzF,IAAMyK,CAAAA,CAAUC,UAAAA,CAAW+Q,EAAgB,CAAA,CACrC,CAAE,KAAA,CAAArZ,CAAAA,CAAO,MAAA,CAAAmF,CAAO,CAAA,CAAImD,UAAAA,CAAWoR,EAAoB,CAAA,CAEzD,OACE5b,IAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,OAAA,CAAS,IAAMuK,CAAAA,EAAS,aAAA,CAAcrI,CAAK,CAAA,CAC3C,eAAA,CAAemF,EACf,eAAA,CAAe,CAAA,kBAAA,EAAqBnF,CAAK,CAAA,CAAA,CACzC,EAAA,CAAI,CAAA,kBAAA,EAAqBA,CAAK,CAAA,CAAA,CAC9B,UAAW9C,CAAAA,CACT,qLAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAJ,CAAAA,CACDO,IAAC8b,WAAAA,CAAA,CACC,SAAA,CAAW3c,CAAAA,CACT,qFAAA,CACAiI,CAAAA,EAAU,0CACZ,CAAA,CACF,GACF,CAEJ,CAMO,SAAS2U,EAAAA,CAAiB,CAAE,SAAA,CAAArc,CAAAA,CAAW,QAAA,CAAAD,EAAU,GAAGI,CAAM,CAAA,CAA0B,CACzF,GAAM,CAAE,MAAA,CAAAuH,CAAAA,CAAQ,MAAAnF,CAAM,CAAA,CAAIsI,UAAAA,CAAWoR,EAAoB,CAAA,CAEzD,OAAKvU,CAAAA,CAGHpH,GAAAA,CAAC,KAAA,CAAA,CACC,EAAA,CAAI,CAAA,kBAAA,EAAqBiC,CAAK,CAAA,CAAA,CAC9B,IAAA,CAAK,QAAA,CACL,iBAAA,CAAiB,qBAAqBA,CAAK,CAAA,CAAA,CAC3C,SAAA,CAAW9C,CAAAA,CACT,6GAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEH,QAAA,CAAAJ,CAAAA,CACH,CAAA,CAdkB,IAgBtB,CChJqBD,WAAAA,CAAM,aAAA,CAAwC,IAAI,CAAA,KAQ1Dwc,GAAQxc,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,gBAAA,CAAAuc,CAAAA,CAAkB,QAAAC,CAAAA,CAAU,KAAA,CAAO,SAAA,CAAAC,CAAAA,CAAW,GAAGtc,CAAM,CAAA,CAAGC,CAAAA,GACtEE,IAAC4P,EAAAA,CAAA,CACC,SAAA,CAAWzQ,CAAAA,CAAG,QAAA,CAAU+c,CAAAA,EAAW,oCAAA,CAAsCD,CAAgB,EACzF,KAAA,CAAO,CAAE,SAAA,CAAAE,CAAU,CAAA,CACnB,WAAA,CAAaA,CAAAA,CAAY,MAAA,CAAS,YAAA,CAClC,aAAA,CAAc,IAAA,CAEd,QAAA,CAAAnc,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,UAAWX,CAAAA,CAAG,yCAAA,CAA2CO,CAAS,CAAA,CACjE,GAAGG,CAAAA,CACN,CAAA,CACF,CAEJ,EACAmc,EAAAA,CAAM,WAAA,CAAc,OAAA,CAEb,IAAMI,EAAAA,CAAc5c,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GACxBE,GAAAA,CAAC,OAAA,CAAA,CAAM,IAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,+BAAA,CAAiCO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAE3F,EACAuc,EAAAA,CAAY,WAAA,CAAc,aAAA,CAEnB,IAAMC,EAAAA,CAAY7c,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GACxBE,GAAAA,CAAC,SAAM,GAAA,CAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,4BAAA,CAA8BO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAExF,EACAwc,EAAAA,CAAU,WAAA,CAAc,WAAA,CAOjB,IAAMC,EAAAA,CAAW9c,YAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,SAAA,CAAA6c,CAAAA,CAAY,IAAA,CAAM,UAAAC,CAAAA,CAAY,KAAA,CAAO,GAAG3c,CAAM,CAAA,CAAGC,CAAAA,GAC7DE,GAAAA,CAAC,IAAA,CAAA,CACC,IAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,kFAAA,CACAod,CAAAA,EAAa,uBAAA,CACb7c,CACF,CAAA,CACA,MAAO8c,CAAAA,CAAY,CACjB,iBAAA,CAAmB,MAAA,CACnB,oBAAA,CAAsB,QACxB,CAAA,CAAI,MAAA,CACH,GAAG3c,CAAAA,CACN,CAEJ,EACAyc,EAAAA,CAAS,WAAA,CAAc,UAAA,CAEhB,IAAMG,EAAAA,CAAYjd,YAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,IACxBE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,mHAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,EACA4c,EAAAA,CAAU,WAAA,CAAc,WAAA,KAEXC,EAAAA,CAAYld,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GACxBE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,iFAAkFO,CAAS,CAAA,CACxG,GAAGG,CAAAA,CACN,CAEJ,EACA6c,EAAAA,CAAU,WAAA,CAAc,YCtEjB,SAASC,EAAAA,CAA6C,CAC3D,IAAA,CAAA/F,CAAAA,CACA,QAAAgG,CAAAA,CACA,iBAAA,CAAAC,CAAAA,CAAoB,WAAA,CACpB,UAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAArd,CAAAA,CACA,SAAA,CAAAyc,CAAAA,CACA,OAAA,CAAAD,CAAAA,CAAU,IACZ,CAAA,CAAsB,CACpB,GAAM,CAACjR,CAAAA,CAAQ+R,CAAS,CAAA,CAAI5Y,QAAAA,CAAS,EAAE,CAAA,CACjC,CAAC6Y,CAAAA,CAAYC,CAAa,CAAA,CAAI9Y,QAAAA,CAAsE,CACxG,GAAA,CAAK,EAAA,CACL,SAAA,CAAW,IACb,CAAC,CAAA,CAGK+Y,CAAAA,CAAgBxR,OAAAA,CAAQ,IAAM,CAClC,IAAIyR,CAAAA,CAAW,CAAC,GAAGxG,CAAI,CAAA,CAGvB,OAAI3L,CAAAA,EAAU6R,CAAAA,GACZM,CAAAA,CAAWA,CAAAA,CAAS,OAAOvR,CAAAA,EACzBiR,CAAAA,CAAW,IAAA,CAAKO,CAAAA,EACd,MAAA,CAAOxR,CAAAA,CAAKwR,CAAG,CAAA,EAAK,EAAE,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAASpS,CAAAA,CAAO,WAAA,EAAa,CACrE,CACF,CAAA,CAAA,CAIEgS,CAAAA,CAAW,GAAA,EAAOA,CAAAA,CAAW,SAAA,EAC/BG,CAAAA,CAAS,IAAA,CAAK,CAACE,CAAAA,CAAGC,CAAAA,GAAM,CACtB,IAAMC,CAAAA,CAASF,CAAAA,CAAEL,CAAAA,CAAW,GAAc,EACpCQ,CAAAA,CAASF,CAAAA,CAAEN,CAAAA,CAAW,GAAc,CAAA,CAE1C,OAA4BO,CAAAA,EAAW,IAAA,EAAQC,IAAW,MAAA,EAAaA,CAAAA,GAAW,IAAA,CAAa,CAAA,CAC3FD,CAAAA,CAASC,CAAAA,CAAeR,CAAAA,CAAW,SAAA,GAAc,MAAQ,EAAA,CAAK,CAAA,CAC9DO,CAAAA,CAASC,CAAAA,CAAeR,CAAAA,CAAW,SAAA,GAAc,KAAA,CAAQ,CAAA,CAAI,GAC1D,CACT,CAAC,CAAA,CAGIG,CACT,CAAA,CAAG,CAACxG,CAAAA,CAAM3L,CAAAA,CAAQ6R,EAAYG,CAAU,CAAC,CAAA,CAEnCS,CAAAA,CAAcL,CAAAA,EAA0B,CAC5CH,CAAAA,CAAc7U,CAAAA,GAAS,CACrB,GAAA,CAAAgV,CAAAA,CACA,SAAA,CAAWhV,CAAAA,CAAK,GAAA,GAAQgV,CAAAA,EAAOhV,CAAAA,CAAK,SAAA,GAAc,MAAQ,MAAA,CAAS,KACrE,CAAA,CAAE,EACJ,CAAA,CAEA,OACEtI,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACtC,QAAA,CAAA,CAAAod,CAAAA,EACC9c,GAAAA,CAAC,OAAI,SAAA,CAAU,mBAAA,CACb,QAAA,CAAAA,GAAAA,CAAC+F,EAAAA,CAAA,CACC,WAAA,CAAa8W,CAAAA,CACb,MAAO5R,CAAAA,CACP,QAAA,CAAW7J,CAAAA,EAAM4b,CAAAA,CAAU5b,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACzC,SAAUpB,GAAAA,CAAC2d,MAAAA,CAAA,CAAO,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACtD,CAAA,CACF,CAAA,CAGF5d,KAACic,EAAAA,CAAA,CAAM,OAAA,CAASE,CAAAA,CAAS,SAAA,CAAWC,CAAAA,CAClC,QAAA,CAAA,CAAAnc,GAAAA,CAACoc,GAAA,CACC,QAAA,CAAApc,GAAAA,CAACsc,EAAAA,CAAA,CACE,QAAA,CAAAM,CAAAA,CAAQ,GAAA,CAAKgB,GACZ5d,GAAAA,CAACyc,EAAAA,CAAA,CAEC,SAAA,CAAWtd,CAAAA,CAAGye,CAAAA,CAAI,QAAA,EAAY,kEAAA,CAAoEA,EAAI,SAAS,CAAA,CAC/G,OAAA,CAAS,IAAMA,CAAAA,CAAI,QAAA,EAAYF,CAAAA,CAAWE,CAAAA,CAAI,GAAG,CAAA,CAEjD,QAAA,CAAA7d,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAA,CAAA6d,EAAI,MAAA,CACJA,CAAAA,CAAI,QAAA,EACH5d,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CACb,QAAA,CAAAid,EAAW,GAAA,GAAQW,CAAAA,CAAI,GAAA,CACtBX,CAAAA,CAAW,SAAA,GAAc,KAAA,CAAQjd,GAAAA,CAAC6d,OAAAA,CAAA,CAAQ,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAK7d,GAAAA,CAAC8d,SAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,EAE9H9d,GAAAA,CAAC+d,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,CAAA,CAErC,CAAA,CAAA,CAEJ,CAAA,CAAA,CAfK,OAAOH,CAAAA,CAAI,GAAG,CAgBrB,CACD,CAAA,CACH,CAAA,CACF,CAAA,CACA7d,IAAAA,CAACsc,GAAA,CACE,QAAA,CAAA,CAAAc,CAAAA,CAAc,GAAA,CAAI,CAACtR,CAAAA,CAAMmS,CAAAA,GACxBhe,GAAAA,CAACsc,GAAA,CAEC,OAAA,CAAS,IAAMS,CAAAA,GAAalR,CAAI,CAAA,CAChC,SAAA,CAAW1M,CAAAA,CAAG4d,CAAAA,EAAc,8DAA8D,CAAA,CAEzF,QAAA,CAAAH,CAAAA,CAAQ,GAAA,CAAKgB,CAAAA,EACZ5d,GAAAA,CAAC0c,GAAA,CAAgC,SAAA,CAAWkB,CAAAA,CAAI,SAAA,CAC7C,QAAA,CAAAA,CAAAA,CAAI,MAAA,CAASA,CAAAA,CAAI,OAAO/R,CAAI,CAAA,CAAKA,CAAAA,CAAK+R,CAAAA,CAAI,GAAc,CAAA,CAAA,CAD3C,MAAA,CAAOA,CAAAA,CAAI,GAAG,CAE9B,CACD,CAAA,CAAA,CARII,CASP,CACD,CAAA,CACAb,CAAAA,CAAc,MAAA,GAAW,GACxBnd,GAAAA,CAACsc,EAAAA,CAAA,CACC,QAAA,CAAAvc,IAAAA,CAAC2c,EAAAA,CAAA,CAAU,OAAA,CAASE,EAAQ,MAAA,CAAQ,SAAA,CAAU,gCAAA,CAAiC,QAAA,CAAA,CAAA,wBAAA,CACtD3R,CAAAA,CAAO,GAAA,CAAA,CAChC,CAAA,CACF,CAAA,CAAA,CAEJ,GACF,CAAA,CAAA,CACF,CAEJ,CCnIO,IAAMgT,EAAAA,CAAQze,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,kBAAA,CAAAsG,CAAAA,CAAoB,IAAAkV,CAAAA,CAAK,GAAA,CAAAD,CAAAA,CAAK,QAAA,CAAAE,CAAAA,CAAU,MAAA,CAAA+C,CAAAA,CAAQ,OAAA,CAAAC,EAAS,GAAGte,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACzF,GAAM,CAACgB,CAAAA,CAAWsd,CAAY,CAAA,CAAIha,QAAAA,CAAS,IAAI,CAAA,CACzC,CAACiC,CAAAA,CAAUgY,CAAW,CAAA,CAAIja,SAAS,KAAK,CAAA,CAExCka,CAAAA,CAAcld,CAAAA,EAAqD,CACvEgd,CAAAA,CAAa,KAAK,CAAA,CAClBF,IAAS9c,CAAC,EACZ,CAAA,CAEMmd,CAAAA,CAAend,CAAAA,EAAqD,CACxEgd,CAAAA,CAAa,KAAK,EAClBC,CAAAA,CAAY,IAAI,CAAA,CAChBF,CAAAA,GAAU/c,CAAC,EACb,CAAA,CAEA,OAAIiF,GAAY8U,CAAAA,CACPnb,GAAAA,CAAAwe,QAAAA,CAAA,CAAG,QAAA,CAAArD,CAAAA,CAAS,CAAA,CAInBpb,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,mHAAA,CAAqH6G,CAAkB,CAAA,CACvJ,QAAA,CAAA,CAAAlF,CAAAA,EACEd,IAAC0X,EAAAA,CAAA,CAAS,SAAA,CAAU,gCAAA,CAAiC,CAAA,CAExD1X,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,EACL,GAAA,CAAKmb,CAAAA,CACL,GAAA,CAAKC,CAAAA,CACL,MAAA,CAAQoD,CAAAA,CACR,OAAA,CAASC,CAAAA,CACT,UAAWpf,CAAAA,CACT,4DAAA,CACA2B,CAAAA,CAAY,WAAA,CAAc,aAAA,CAC1BpB,CACF,CAAA,CACC,GAAGG,EACN,CAAA,CAAA,CACF,CAEJ,CACF,EACAoe,EAAAA,CAAM,WAAA,CAAc,OAAA,CC7CpB,IAAMQ,EAAAA,CAAsBle,GAAAA,CAC1B,wEAAA,CACA,CACE,QAAA,CAAU,CACR,QAAS,CACP,OAAA,CAAS,oEAAA,CACT,KAAA,CAAO,oFACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAiBame,EAAAA,CAAclf,WAAAA,CAAM,WAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,OAAA,CAAAe,CAAAA,CAAS,IAAA,CAAAke,CAAAA,CAAM,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,GAAGhf,CAAM,CAAA,CAAGC,CAAAA,GAE1DC,IAAAA,CAAC,OAAI,GAAA,CAAKD,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAGsf,EAAAA,CAAoB,CAAE,OAAA,CAAAhe,CAAAA,CAAS,UAAAf,CAAU,CAAC,CAAC,CAAA,CAAI,GAAGG,CAAAA,CAC7E,QAAA,CAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAC,IAACgb,CAAAA,CAAA,CAAO,GAAA,CAAK2D,CAAAA,CAAK,SAAA,CAAW,GAAA,CAAKA,CAAAA,CAAK,IAAA,CAAM,KAAK,IAAA,CAAK,CAAA,CACvD5e,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAC,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,qDAAA,CAAuD,QAAA,CAAA2e,CAAAA,CAAK,IAAA,CAAK,CAAA,CAC9EA,CAAAA,CAAK,IAAA,EACJ3e,GAAAA,CAAC,QAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAA2e,CAAAA,CAAK,IAAA,CAAK,CAAA,CAEvEA,CAAAA,CAAK,KAAA,EACJ3e,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iDAAA,CAAmD,QAAA,CAAA2e,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAEjF,CAAA,CAAA,CACF,EACCC,CAAAA,EACE5e,GAAAA,CAACQ,CAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,QAASoe,CAAAA,CAAU,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CAElE,CAAA,CAECD,CAAAA,CAAK,GAAA,EACJ3e,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,uDAAA,CACV,QAAA,CAAA2e,CAAAA,CAAK,GAAA,CACR,CAAA,CAGDA,CAAAA,CAAK,KAAA,EACJ3e,GAAAA,CAAC,OAAI,SAAA,CAAU,8DAAA,CACZ,QAAA,CAAA2e,CAAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAACG,CAAAA,CAAMnZ,IACrB5F,IAAAA,CAAC,KAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CACrB,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mDAAA,CAAqD,QAAA,CAAA8e,CAAAA,CAAK,KAAA,CAAM,CAAA,CAChF9e,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+CAAgD,QAAA,CAAA8e,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAAA,CAFnEnZ,CAGV,CACD,CAAA,CACH,CAAA,CAGDkZ,GACG7e,GAAAA,CAACQ,CAAAA,CAAA,CAAO,SAAA,CAAU,aAAA,CAAc,OAAA,CAASqe,CAAAA,CAAW,QAAA,CAAA,SAAA,CAAO,GAEjE,CAGN,EACAH,EAAAA,CAAY,WAAA,CAAc,aAAA,KC9EpBK,EAAAA,CAAuBxe,GAAAA,CAC3B,8BAAA,CACA,CACE,QAAA,CAAU,CACR,MAAA,CAAQ,CACN,QAAS,sEAAA,CACT,MAAA,CAAQ,iCAAA,CACR,OAAA,CAAS,oCAAA,CACT,KAAA,CAAO,iCACT,CACF,EACA,eAAA,CAAiB,CACf,MAAA,CAAQ,SACV,CACF,CACF,CAAA,CAUaye,EAAAA,CAAexf,WAAAA,CAAM,UAAA,CAChC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,MAAA,CAAAuf,CAAAA,CAAQ,MAAAha,CAAAA,CAAO,IAAA,CAAAsK,CAAAA,CAAM,WAAA,CAAA0D,CAAAA,CAAa,IAAA,CAAAjR,CAAAA,CAAM,MAAA,CAAAkd,EAAQ,GAAGrf,CAAM,CAAA,CAAGC,CAAAA,GAEtEC,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKD,CAAAA,CAAK,UAAWX,CAAAA,CAAG4f,EAAAA,CAAqB,CAAE,MAAA,CAAAE,CAAAA,CAAQ,SAAA,CAAAvf,CAAU,CAAC,CAAC,CAAA,CAAI,GAAGG,CAAAA,CAE5E,QAAA,CAAA,CAAA,CAACqf,CAAAA,EACAlf,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iFAAiF,CAAA,CAIlGA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CACd,iKAAA,CACA8f,CAAAA,GAAW,QAAA,CAAW,+BACtBA,CAAAA,GAAW,SAAA,CAAY,oCAAA,CACvBA,CAAAA,GAAW,OAAA,CAAU,8BAAA,CACrB,8BACF,CAAA,CACG,SAAAjd,CAAAA,EAAQhC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,wBAAA,CAA0B,QAAA,CAAAgC,CAAAA,CAAK,CAAA,CAC1D,CAAA,CAEAjC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mDAAA,CAAqD,QAAA,CAAAiF,CAAAA,CAAM,EAC1EsK,CAAAA,EAAQvP,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAuP,CAAAA,CAAK,CAAA,CAAA,CAC5E,EACC0D,CAAAA,EACCjT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACZ,QAAA,CAAAiT,CAAAA,CACH,CAAA,CAAA,CAEJ,GACF,CAGN,EACA+L,EAAAA,CAAa,WAAA,CAAc,cAAA,CAEpB,IAAMG,EAAAA,CAAW,CAAC,CAAE,QAAA,CAAA1f,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,GACtCM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,eAAA,CAAiBO,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,EClDnE,IAAM2f,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAA/e,CAAAA,CAAM,MAAAgf,CAAAA,CAAQ,CAAA,CAAG,QAAA,CAAAC,CAAS,CAAA,GAA+E,CAC/H,GAAM,CAAClY,EAAQC,CAAS,CAAA,CAAIjD,QAAAA,CAAS,KAAK,CAAA,CACpCmb,CAAAA,CAAclf,CAAAA,CAAK,QAAA,EAAYA,EAAK,QAAA,CAAS,MAAA,CAAS,CAAA,CAEtDmf,CAAAA,CAAgBpe,CAAAA,EAAwB,CAC5CA,CAAAA,CAAE,eAAA,GACEme,CAAAA,EACFlY,CAAAA,CAAU,CAACD,CAAM,CAAA,CAEnBkY,CAAAA,GAAWjf,CAAI,EACjB,EAEA,OACEN,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,uKACF,CAAA,CACA,KAAA,CAAO,CAAE,WAAA,CAAa,CAAA,EAAGkgB,CAAAA,CAAQ,EAAA,CAAK,CAAC,CAAA,EAAA,CAAK,CAAA,CAC5C,OAAA,CAASG,CAAAA,CAER,QAAA,CAAA,CAAAD,CAAAA,CACCvf,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,kCAAA,CACb,QAAA,CAAAoH,CAAAA,CAASpH,GAAAA,CAAC8b,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,EAAK9b,GAAAA,CAACqP,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CACpF,CAAA,CAEArP,GAAAA,CAAC,QAAK,SAAA,CAAU,KAAA,CAAM,CAAA,CAGvBK,CAAAA,CAAK,IAAA,CACJL,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mCAAoC,QAAA,CAAAK,CAAAA,CAAK,IAAA,CAAK,CAAA,CAE9DL,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kCAAA,CACb,SAAAuf,CAAAA,CAAenY,CAAAA,CAASpH,GAAAA,CAACyf,UAAAA,CAAA,CAAW,SAAA,CAAU,SAAA,CAAU,CAAA,CAAKzf,IAAC0f,MAAAA,CAAA,CAAO,SAAA,CAAU,SAAA,CAAU,CAAA,CAAM1f,GAAAA,CAAC2f,IAAAA,CAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAC5H,CAAA,CAGF3f,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,UAAA,CAAY,QAAA,CAAAK,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CACzC,CAAA,CAEC+G,CAAAA,EAAUmY,CAAAA,EACTvf,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,qDAAA,CACZ,QAAA,CAAAK,CAAAA,CAAK,QAAA,CAAU,GAAA,CAAKD,CAAAA,EACnBJ,GAAAA,CAACof,EAAAA,CAAA,CAA4B,IAAA,CAAMhf,CAAAA,CAAO,KAAA,CAAOif,CAAAA,CAAQ,CAAA,CAAG,QAAA,CAAUC,CAAAA,CAAAA,CAAnDlf,CAAAA,CAAM,EAAuD,CACjF,CAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CAAA,CAEawf,EAAAA,CAAO,CAAC,CAAE,KAAAhJ,CAAAA,CAAM,SAAA,CAAAlX,CAAAA,CAAW,QAAA,CAAA4f,CAAS,CAAA,GAE7Ctf,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,oBAAA,CAAsBO,CAAS,CAAA,CAC/C,QAAA,CAAAkX,CAAAA,CAAK,GAAA,CAAKvW,CAAAA,EACTL,IAACof,EAAAA,CAAA,CAA2B,IAAA,CAAM/e,CAAAA,CAAM,QAAA,CAAUif,CAAAA,CAAAA,CAA/Bjf,CAAAA,CAAK,EAAoC,CAC7D,CAAA,CACH,ECvDG,SAASwf,EAAAA,CAAa,CAC3B,KAAA,CAAA5a,CAAAA,CACA,IAAA,CAAA6a,CAAAA,CAAO,OAAA,CACP,aAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAA5gB,CACF,EAAsB,CACpB,IAAM6gB,CAAAA,CAAQ,CACZ,CAAE,EAAA,CAAI,OAAA,CAAS,IAAA,CAAMC,OAAQ,KAAA,CAAO,OAAQ,CAAA,CAC5C,CAAE,EAAA,CAAI,MAAA,CAAQ,IAAA,CAAMC,IAAAA,CAAM,KAAA,CAAO,MAAO,CAAA,CACxC,CAAE,EAAA,CAAI,UAAA,CAAY,IAAA,CAAM5S,QAAAA,CAAU,MAAO,UAAW,CAAA,CACpD,CAAE,EAAA,CAAI,UAAA,CAAY,IAAA,CAAMiD,KAAAA,CAAO,KAAA,CAAO,UAAW,CACnD,CAAA,CAEA,OACE/Q,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,wCAAA,CAA0CO,CAAS,CAAA,CACpE,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAG,SAAA,CAAU,8CAAA,CAAgD,QAAA,CAAAiF,CAAAA,CAAM,CAAA,CAEpEjF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CACZ,QAAA,CAAAugB,CAAAA,CAAM,GAAA,CAAK7E,CAAAA,EACV3b,IAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMggB,IAAerE,CAAAA,CAAE,EAAE,CAAA,CAClC,SAAA,CAAWvc,CAAAA,CACT,mFAAA,CACA2gB,CAAAA,GAASpE,CAAAA,CAAE,GACP,kCAAA,CACA,mCACN,CAAA,CAEA,QAAA,CAAA,CAAA1b,GAAAA,CAAC0b,CAAAA,CAAE,IAAA,CAAF,CAAO,SAAA,CAAU,aAAA,CAAc,CAAA,CAC/BA,CAAAA,CAAE,KAAA,CAAA,CAAA,CAVEA,CAAAA,CAAE,EAWT,CACD,EACH,CAAA,CAAA,CACF,CAAA,CAEA3b,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,8BAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,KAAK,MAAA,CACL,OAAA,CAAS6f,CAAAA,CACT,QAAA,CAAU,CAACF,CAAAA,CACX,SAAA,CAAU,2CAAA,CAEV,SAAAngB,GAAAA,CAAC0gB,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAC7B,CAAA,CACA1gB,GAAAA,CAACQ,EAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,OAAA,CAAS8f,CAAAA,CACT,QAAA,CAAU,CAACF,CAAAA,CACX,SAAA,CAAU,2CAAA,CAEV,QAAA,CAAApgB,GAAAA,CAAC2gB,KAAAA,CAAA,CAAM,SAAA,CAAU,UAAU,CAAA,CAC7B,CAAA,CAAA,CACF,CAAA,CAEA5gB,IAAAA,CAACS,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAASwf,CAAAA,CAAU,SAAA,CAAU,qBAAA,CAC7D,QAAA,CAAA,CAAAhgB,GAAAA,CAAC4gB,OAAA,CAAO,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,QAAA,CAAA,CAEhC,CAAA,CACA7gB,IAAAA,CAACS,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAASyf,CAAAA,CAAQ,SAAA,CAAU,qBAAA,CAC3D,UAAAjgB,GAAAA,CAAC6gB,OAAAA,CAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,MAAA,CAAA,CAEjC,CAAA,CACA7gB,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CAA4B,CAAA,CAC3CD,IAAAA,CAACS,CAAAA,CAAA,CAAO,IAAA,CAAK,KAAK,OAAA,CAAS0f,CAAAA,CAAa,SAAA,CAAU,OAAA,CAChD,QAAA,CAAA,CAAAlgB,GAAAA,CAACyV,IAAAA,CAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAAE,YAAA,CAAA,CAE9B,CAAA,CACAzV,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,QAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,uBAAA,CAC5C,QAAA,CAAAR,GAAAA,CAAC8gB,cAAAA,CAAA,CAAe,SAAA,CAAU,SAAA,CAAU,CAAA,CACtC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC9FO,SAASC,EAAAA,CAAY,CAAE,KAAA,CAAAC,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAvhB,CAAU,EAAqB,CACzE,GAAI,CAACuhB,CAAAA,CAAO,OAAO,IAAA,CAEnB,IAAMC,CAAAA,CAAcF,EAAQC,CAAAA,CACtBlU,CAAAA,CAAa,IAAA,CAAK,GAAA,CAAKiU,CAAAA,CAAQC,CAAAA,CAAS,GAAA,CAAK,GAAG,EAEtD,OACElhB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,yBAAA,CAA2BO,CAAS,CAAA,CACrD,UAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oDAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,oCAAA,CACA+hB,CAAAA,CAAc,YAAA,CAAenU,CAAAA,CAAa,EAAA,CAAK,eAAA,CAAkB,aACnE,EACA,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGA,CAAU,CAAA,CAAA,CAAI,CAAA,CACnC,CAAA,CACF,EACAhN,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CACd,0EAAA,CACA+hB,CAAAA,CAAc,4BAAA,CAA+B,0BAC/C,EACG,QAAA,CAAA,CAAAA,CAAAA,EAAelhB,GAAAA,CAACmhB,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,CAAA,CAChDH,EAAM,GAAA,CAAEC,CAAAA,CAAAA,CACX,CAAA,CAAA,CACF,CAEJ,CCRO,IAAMG,EAAAA,CAAa5hB,WAAAA,CAAM,IAAA,CAAK,CAAC,CACpC,IAAA,CAAA6hB,CAAAA,CACA,UAAA,CAAA9U,CAAAA,CACA,UAAA+U,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,IAAA,CACZ,kBAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,qBAAA,CAAAC,EACA,iBAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,MAAA,CAAAnP,CAAAA,CACA,WAAAoP,CACF,CAAA,GAAuB,CACrB,GAAIA,CAAAA,CAAY,OAAOliB,GAAAA,CAAAwe,QAAAA,CAAA,CAAG,QAAA,CAAA0D,CAAAA,CAAWb,CAAI,CAAA,CAAE,CAAA,CAE3C,IAAMc,CAAAA,CAAoBC,CAAAA,EAAsB,CAC9C,OAAQA,CAAAA,EACN,KAAK,QAAA,CAAU,OAAO,QAAA,CACtB,KAAK,OAAQ,OAAO,SAAA,CACpB,KAAK,QAAA,CAAU,OAAO,MAAA,CACtB,KAAK,KAAA,CAAO,OAAO,SAAA,CACnB,QAAS,OAAO,SAClB,CACF,CAAA,CAEA,OACEpiB,IAAC0C,CAAAA,CAAA,CACC,OAAA,CAAUtB,CAAAA,EAAMygB,CAAAA,GAAczgB,CAAAA,CAAGigB,CAAI,CAAA,CACrC,UAAWI,CAAAA,CACX,WAAA,CAAaO,CAAAA,CACb,UAAA,CAAYC,CAAAA,CACZ,MAAA,CAAQnP,CAAAA,CACR,SAAA,CAAW3T,EACT,mJAAA,CACAkiB,CAAAA,CAAK,SAAA,EAAaA,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAS,CAAA,EAAK,qCAAA,CAC/C9U,GAAc,4CAAA,CACdqV,CACF,CAAA,CAEA,QAAA,CAAA7hB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCACZ,QAAA,CAAA,CAAA4hB,CAAAA,EACC3hB,GAAAA,CAACsG,EAAAA,CAAA,CACC,OAAA,CAASiG,CAAAA,CACT,QAAA,CAAWnL,GAAM,CAEf0gB,CAAAA,GAAwBvV,CAAAA,CAAa,EAAC,CAAI,CAAC8U,CAAAA,CAAK,EAAE,CAAC,EACrD,CAAA,CACA,OAAA,CAAUjgB,CAAAA,EAAMA,CAAAA,CAAE,eAAA,EAAgB,CAClC,UAAU,MAAA,CACZ,CAAA,CAEDigB,CAAAA,CAAK,SAAA,EAAaA,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAS,CAAA,EACzCrhB,IAACqiB,IAAAA,CAAA,CAAK,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAE3DriB,GAAAA,CAACiD,EAAAA,CAAA,CAAK,UAAW9D,CAAAA,CACf,wFAAA,CACAkiB,CAAAA,CAAK,SAAA,EAAaA,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAS,CAAA,EAAK,iBACjD,CAAA,CACG,QAAA,CAAAA,CAAAA,CAAK,KAAA,CACR,CAAA,CAAA,CACF,CAAA,CACAthB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACZ,QAAA,CAAA,CAAAyhB,CAAAA,EACCxhB,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAUoB,CAAAA,EAAM,CACdA,EAAE,eAAA,EAAgB,CAClBogB,CAAAA,CAASH,CAAAA,CAAK,EAAE,EAClB,CAAA,CACA,SAAA,CAAU,wFAEV,QAAA,CAAArhB,GAAAA,CAACsiB,MAAAA,CAAA,CAAO,SAAA,CAAU,aAAA,CAAc,CAAA,CAClC,CAAA,CAEDb,CAAAA,EAAazhB,GAAAA,CAACuiB,YAAAA,CAAA,CAAa,SAAA,CAAU,0FAAA,CAA2F,CAAA,CAAA,CACnI,CAAA,CAAA,CACF,EAEClB,CAAAA,CAAK,WAAA,EACJrhB,GAAAA,CAACiD,EAAAA,CAAA,CAAK,SAAA,CAAU,oCAAA,CACb,QAAA,CAAAoe,EAAK,WAAA,CACR,CAAA,CAGDA,CAAAA,CAAK,QAAA,GAAa,MAAA,EACjBthB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,kDAAA,CAAmD,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC3ED,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAiB,QAAA,CAAA,CAAAshB,EAAK,QAAA,CAAS,GAAA,CAAA,CAAC,CAAA,CAAA,CAClD,CAAA,CACArhB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yDAAA,CACb,SAAAA,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,gDAAA,CACV,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGqhB,EAAK,QAAQ,CAAA,CAAA,CAAI,CAAA,CACtC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGFthB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CACZ,QAAA,CAAA,CAAAshB,CAAAA,CAAK,QAAA,EACJrhB,GAAAA,CAACuR,EAAAA,CAAA,CAAM,QAAS4Q,CAAAA,CAAiBd,CAAAA,CAAK,QAAQ,CAAA,CAAG,SAAA,CAAU,6CAAA,CACxD,QAAA,CAAAA,CAAAA,CAAK,SACR,CAAA,CAEDA,CAAAA,CAAK,IAAA,EAAM,GAAA,CAAIvP,CAAAA,EACd9R,GAAAA,CAACuR,EAAAA,CAAA,CAAgB,QAAQ,SAAA,CAAU,SAAA,CAAU,wDAAA,CAC1C,QAAA,CAAAO,CAAAA,CAAAA,CADSA,CAEZ,CACD,CAAA,CAAA,CACH,EAEA/R,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qEAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oDACZ,QAAA,CAAA,CAAAshB,CAAAA,CAAK,SAAA,GAAc,MAAA,EAClBthB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CACd,qEACAuiB,CAAAA,GAAsBL,CAAAA,CAAK,EAAA,CAAK,8BAAA,CAAiC,iBACnE,CAAA,CACG,QAAA,CAAA,CAAAK,CAAAA,GAAsBL,EAAK,EAAA,CAC1BrhB,GAAAA,CAACwiB,KAAAA,CAAA,CACC,SAAA,CAAU,iEAAA,CACV,OAAA,CAAUphB,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClB2gB,CAAAA,GAAoBV,CAAAA,CAAK,EAAE,EAC7B,EACF,CAAA,CAEArhB,GAAAA,CAACyiB,IAAAA,CAAA,CACC,SAAA,CAAU,iEAAA,CACV,OAAA,CAAUrhB,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClB2gB,CAAAA,GAAoBV,CAAAA,CAAK,EAAE,EAC7B,CAAA,CACF,EAEFthB,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA,IAAA,CAAK,KAAA,CAAMshB,CAAAA,CAAK,SAAA,CAAY,IAAI,CAAA,CAAE,IAAA,CAAG,IAAA,CAAK,KAAA,CAAOA,CAAAA,CAAK,SAAA,CAAY,IAAA,CAAQ,EAAE,EAAE,GAAA,CAAA,CACjF,CAAA,CAAA,CACF,CAAA,CAEDA,CAAAA,CAAK,QAAA,GAAa,MAAA,EACjBthB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC0iB,aAAAA,CAAA,CAAc,SAAA,CAAU,SAAA,CAAU,CAAA,CAClCrB,EAAK,QAAA,CAAA,CACR,CAAA,CAEDA,CAAAA,CAAK,WAAA,GAAgB,MAAA,EACpBthB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC2iB,SAAAA,CAAA,CAAU,SAAA,CAAU,SAAA,CAAU,CAAA,CAC9BtB,EAAK,WAAA,CAAA,CACR,CAAA,CAEDA,CAAAA,CAAK,OAAA,EACJthB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,UAAAC,GAAAA,CAAC8Q,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAC1BuQ,CAAAA,CAAK,OAAA,CAAA,CACR,GAEJ,CAAA,CAECA,CAAAA,CAAK,QAAA,EACJrhB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACb,QAAA,CAAAA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uIAAA,CACZ,QAAA,CAAAqhB,CAAAA,CAAK,QAAA,CAAS,MAAA,CACbrhB,GAAAA,CAAC,OAAI,GAAA,CAAKqhB,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAK,QAAA,CAAS,IAAA,CAAM,UAAU,4BAAA,CAA6B,CAAA,CAEhGA,CAAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,CAExB,CAAA,CACF,GAEJ,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAAC,EAEDD,EAAAA,CAAW,WAAA,CAAc,YAAA,CC7LlB,SAASwB,EAAAA,CAAa,CAC3B,MAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,WAAA,CAAAnB,CAAAA,CACA,QAAA,CAAAoB,CAAAA,CACA,WAAA,CAAAjB,CAAAA,CACA,UAAA,CAAAC,EACA,MAAA,CAAAnP,CAAAA,CACA,WAAA,CAAAoQ,CAAAA,CACA,QAAA,CAAAzjB,CAAAA,CACA,SAAA,CAAAC,CACF,EAAsB,CACpB,OACEK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,kDAAA,CACA+jB,CAAAA,CAAc,OAAS,MAAA,CACvBxjB,CACF,CAAA,CACA,UAAA,CAAa0B,CAAAA,EAAM6gB,CAAAA,GAAa7gB,CAAC,CAAA,CACjC,OAASA,CAAAA,EAAM0R,CAAAA,GAAS1R,CAAC,CAAA,CACzB,WAAA,CAAcA,CAAAA,EAAM4gB,CAAAA,GAAc5gB,CAAAA,CAAGyhB,EAAO,EAAA,CAAI,QAAQ,CAAA,CACxD,SAAA,CAAW,CAACK,CAAAA,CAGZ,QAAA,CAAA,CAAAnjB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CACd,6CAAA,CACA+jB,CAAAA,EAAe,gBACjB,CAAA,CACE,QAAA,CAAA,CAAAnjB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMgjB,IAAaH,CAAAA,CAAO,EAAE,CAAA,CACrC,SAAA,CAAU,4CAAA,CAET,QAAA,CAAAK,CAAAA,CAAcljB,GAAAA,CAACqP,aAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CAAKrP,GAAAA,CAAC8b,WAAAA,CAAA,CAAY,SAAA,CAAU,UAAU,CAAA,CACzF,CAAA,CAEC,CAACoH,CAAAA,EACAnjB,IAAAA,CAAAye,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAxe,IAAC,KAAA,CAAA,CACC,SAAA,CAAU,sBAAA,CACV,KAAA,CAAO,CAAE,eAAA,CAAiB6iB,CAAAA,CAAO,KAAA,EAAS,SAAU,CAAA,CACtD,CAAA,CACA7iB,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,uCAAA,CAAyC,QAAA,CAAA6iB,CAAAA,CAAO,MAAM,CAAA,CACpE7iB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yEAAA,CACb,QAAA,CAAA8iB,CAAAA,CAAM,MAAA,CACT,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAEC,CAACI,CAAAA,EACAnjB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,UAAU,wCAAA,CACV,OAAA,CAAS,IAAMuiB,CAAAA,GAAYF,CAAAA,CAAO,EAAE,CAAA,CAEpC,QAAA,CAAA7iB,IAACyV,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CAC5B,CAAA,CACAzV,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,wCAAA,CACV,OAAA,CAAS,IAAMyiB,IAAW,MAAM,CAAA,CAEhC,QAAA,CAAAjjB,GAAAA,CAACmjB,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,EACpC,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAGC,CAACD,CAAAA,EAAeL,CAAAA,CAAO,KAAA,EACtB7iB,GAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAAA,GAAAA,CAAC+gB,EAAAA,CAAA,CAAY,KAAA,CAAO+B,CAAAA,CAAM,MAAA,CAAQ,KAAA,CAAOD,CAAAA,CAAO,KAAA,CAAO,CAAA,CACzD,CAAA,CAIF7iB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CACd,gEAAA,CACA+jB,CAAAA,EAAe,QACjB,CAAA,CACG,QAAA,CAAAzjB,CAAAA,EAAYqjB,CAAAA,CAAM,IAAIzB,CAAAA,EACrBrhB,GAAAA,CAACohB,EAAAA,CAAA,CAEC,IAAA,CAAMC,CAAAA,CACN,WAAA,CAAa,CAACzV,EAAG6K,CAAAA,GAAMoL,CAAAA,GAAcpL,CAAC,CAAA,CACtC,WAAA,CAAcrV,CAAAA,EAAM4gB,CAAAA,GAAc5gB,CAAAA,CAAGigB,EAAK,EAAA,CAAI,MAAM,CAAA,CACpD,UAAA,CAAajgB,CAAAA,EAAM6gB,CAAAA,GAAa7gB,CAAAA,CAAGigB,CAAAA,CAAK,EAAE,CAAA,CAC1C,MAAA,CAASjgB,CAAAA,EAAM0R,CAAAA,GAAS1R,CAAAA,CAAGigB,CAAAA,CAAK,EAAE,CAAA,CAAA,CAL7BA,EAAK,EAMZ,CACD,CAAA,CACH,CAAA,CAGC6B,CAAAA,EACCljB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CACb,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2FAAA,CACb,QAAA,CAAA6iB,CAAAA,CAAO,KAAA,CACV,CAAA,CACF,CAAA,CAAA,CAEJ,CAEJ,CCtHO,SAASO,EAAAA,CAAe,CAAE,KAAA,CAAAN,CAAAA,CAAO,OAAA,CAAAlG,CAAAA,CAAS,YAAAiF,CAAAA,CAAa,SAAA,CAAAniB,CAAU,CAAA,CAAwB,CAC9F,IAAM2jB,CAAAA,CAAald,CAAAA,EAAeyW,EAAQ,IAAA,CAAK0G,CAAAA,EAAKA,CAAAA,CAAE,EAAA,GAAOnd,CAAE,CAAA,CAE/D,OACEnG,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,mEAAA,CAAqEO,CAAS,CAAA,CAC/F,QAAA,CAAAK,IAAAA,CAACic,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAhc,GAAAA,CAACoc,EAAAA,CAAA,CACC,QAAA,CAAArc,IAAAA,CAACuc,EAAAA,CAAA,CAAS,UAAU,qCAAA,CAClB,QAAA,CAAA,CAAAtc,GAAAA,CAACyc,EAAAA,CAAA,CAAU,SAAA,CAAU,+CAAA,CAAgD,QAAA,CAAA,MAAA,CAAI,EACzEzc,GAAAA,CAACyc,EAAAA,CAAA,CAAU,SAAA,CAAU,+CAAA,CAAgD,QAAA,CAAA,QAAA,CAAM,CAAA,CAC3Ezc,GAAAA,CAACyc,EAAAA,CAAA,CAAU,SAAA,CAAU,+CAAA,CAAgD,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC7Ezc,GAAAA,CAACyc,EAAAA,CAAA,CAAU,SAAA,CAAU,+CAAA,CAAgD,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC7Ezc,GAAAA,CAACyc,EAAAA,CAAA,CAAU,SAAA,CAAU,gDAAgD,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAC/E,CAAA,CACF,CAAA,CACAzc,GAAAA,CAACqc,EAAAA,CAAA,CACE,QAAA,CAAAyG,EAAM,GAAA,CAAKzB,CAAAA,EAAS,CACnB,IAAMwB,CAAAA,CAASQ,CAAAA,CAAUhC,CAAAA,CAAK,QAAQ,EACtC,OACEthB,IAAAA,CAACuc,EAAAA,CAAA,CAEC,SAAA,CAAU,uEAAA,CACV,OAAA,CAAS,IAAMuF,IAAcR,CAAI,CAAA,CAEjC,QAAA,CAAA,CAAArhB,GAAAA,CAAC0c,EAAAA,CAAA,CAAU,SAAA,CAAU,wBAAA,CAA0B,SAAA2E,CAAAA,CAAK,KAAA,CAAM,CAAA,CAC1DrhB,GAAAA,CAAC0c,EAAAA,CAAA,CACC,QAAA,CAAA3c,IAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBAAA,CAAuB,KAAA,CAAO,CAAE,eAAA,CAAiB6iB,CAAAA,EAAQ,KAAA,EAAS,SAAU,CAAA,CAAG,CAAA,CAC9F7iB,GAAAA,CAAC,QAAK,SAAA,CAAU,uBAAA,CAAyB,QAAA,CAAA6iB,CAAAA,EAAQ,KAAA,CAAM,CAAA,CAAA,CACzD,CAAA,CACF,CAAA,CACA7iB,IAAC0c,EAAAA,CAAA,CACC,QAAA,CAAA1c,GAAAA,CAACuR,EAAAA,CAAA,CACC,OAAA,CAAS8P,CAAAA,CAAK,WAAa,QAAA,CAAW,QAAA,CAAWA,CAAAA,CAAK,QAAA,GAAa,MAAA,CAAS,SAAA,CAAY,MAAA,CACxF,SAAA,CAAU,wBAET,QAAA,CAAAA,CAAAA,CAAK,QAAA,EAAY,QAAA,CACpB,CAAA,CACF,CAAA,CACArhB,GAAAA,CAAC0c,EAAAA,CAAA,CACE,QAAA,CAAA2E,CAAAA,CAAK,QAAA,EACJthB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,IAACgb,CAAAA,CAAA,CAAO,GAAA,CAAKqG,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAK,SAAS,IAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CACtErhB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAyB,QAAA,CAAAqhB,CAAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,CAC9D,CAAA,CAEJ,CAAA,CACArhB,GAAAA,CAAC0c,GAAA,CAAU,SAAA,CAAU,uBAAA,CAClB,QAAA,CAAA2E,CAAAA,CAAK,OAAA,CAAU,IAAI,IAAA,CAAKA,EAAK,OAAO,CAAA,CAAE,kBAAA,EAAmB,CAAI,GAAA,CAChE,CAAA,CAAA,CAAA,CA7BKA,CAAAA,CAAK,EA8BZ,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CC9DO,SAASkC,EAAAA,CAAmB,CAAE,KAAA,CAAAT,CAAAA,CAAO,SAAA,CAAApjB,CAAU,CAAA,CAA4B,CAEhF,OACEK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,+GAAA,CAAiHO,CAAS,CAAA,CAC3I,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6EAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,OAAI,SAAA,CAAU,iFAAA,CAAkF,CAAA,CACnG,CAAA,CACAA,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mCAAA,CAAoC,QAAA,CAAA,eAAA,CAAa,CAAA,CAC/DD,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,4CAAA,CAA6C,QAAA,CAAA,CAAA,mFAAA,CAC0B+iB,CAAAA,CAAM,OAAO,SAAA,CAAA,CACjG,CAAA,CAAA,CACF,CAEJ,CCVO,SAASU,GAAgB,CAAE,KAAA,CAAAV,CAAAA,CAAO,OAAA,CAAAlG,CAAAA,CAAS,WAAA,CAAAiF,CAAAA,CAAa,SAAA,CAAAniB,CAAU,CAAA,CAAyB,CAEhG,OAAOM,GAAAA,CAACojB,EAAAA,CAAA,CAAe,KAAA,CAAON,CAAAA,CAAO,QAASlG,CAAAA,CAAS,WAAA,CAAaiF,CAAAA,CAAa,SAAA,CAAWniB,CAAAA,CAAW,CACzG,CCAO,SAAS+jB,EAAAA,CAAmB,CACjC,KAAA,CAAAX,CAAAA,CACA,WAAA,CAAAjB,CAAAA,CACA,SAAA,CAAAkB,CAAAA,CACA,SAAA,CAAArjB,CACF,CAAA,CAA4B,CAC1B,GAAM,CAACsO,CAAAA,CAAaC,CAAc,CAAA,CAAI7J,QAAAA,CAAS,IAAI,IAAM,CAAA,CAEnD4K,CAAAA,CAAc,CAACX,CAAAA,CAAcC,IAAkB,IAAI,IAAA,CAAKD,CAAAA,CAAMC,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAA,CAAE,OAAA,GAC5EoV,CAAAA,CAAkB,CAACrV,CAAAA,CAAcC,CAAAA,GAAkB,IAAI,IAAA,CAAKD,CAAAA,CAAMC,CAAAA,CAAO,CAAC,CAAA,CAAE,MAAA,EAAO,CAEnFD,CAAAA,CAAOL,CAAAA,CAAY,WAAA,EAAY,CAC/BM,CAAAA,CAAQN,EAAY,QAAA,EAAS,CAC7B2V,CAAAA,CAAY3U,CAAAA,CAAYX,CAAAA,CAAMC,CAAK,CAAA,CACnCsV,CAAAA,CAAWF,EAAgBrV,CAAAA,CAAMC,CAAK,CAAA,CAEtCuV,CAAAA,CAAY,IAAM5V,CAAAA,CAAe,IAAI,IAAA,CAAKI,EAAMC,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAC,CAAA,CAC7DwV,CAAAA,CAAY,IAAM7V,CAAAA,CAAe,IAAI,IAAA,CAAKI,CAAAA,CAAMC,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAC,CAAA,CAE7DyV,EAAa,CACjB,SAAA,CAAW,UAAA,CAAY,OAAA,CAAS,OAAA,CAAS,KAAA,CAAO,MAAA,CAChD,MAAA,CAAQ,SAAU,WAAA,CAAa,SAAA,CAAW,UAAA,CAAY,UACxD,CAAA,CAEM7U,CAAAA,CAAO,EAAC,CAEd,QAASvJ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIie,CAAAA,CAAUje,CAAAA,EAAAA,CAC5BuJ,CAAAA,CAAK,IAAA,CAAK,IAAI,EAGhB,IAAA,IAASvJ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAKge,CAAAA,CAAWhe,CAAAA,EAAAA,CAC9BuJ,CAAAA,CAAK,IAAA,CAAK,IAAI,IAAA,CAAKb,CAAAA,CAAMC,CAAAA,CAAO3I,CAAC,CAAC,CAAA,CAGpC,IAAMqe,CAAAA,CAAmBzU,GAChBuT,CAAAA,CAAM,MAAA,CAAOzB,CAAAA,EAAQ,CAC1B,GAAI,CAACA,CAAAA,CAAK,OAAA,CAAS,OAAO,MAAA,CAC1B,IAAM3R,CAAAA,CAAI,IAAI,IAAA,CAAK2R,CAAAA,CAAK,OAAO,CAAA,CAC/B,OAAO3R,CAAAA,CAAE,OAAA,EAAQ,GAAMH,CAAAA,CAAK,OAAA,EAAQ,EAC7BG,CAAAA,CAAE,UAAS,GAAMH,CAAAA,CAAK,QAAA,EAAS,EAC/BG,CAAAA,CAAE,WAAA,EAAY,GAAMH,CAAAA,CAAK,aAClC,CAAC,CAAA,CAGH,OACExP,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,uBAAwBO,CAAS,CAAA,CAClD,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAACsD,EAAAA,CAAA,CAAQ,KAAA,CAAO,EAAG,SAAA,CAAU,YAAA,CAAc,QAAA,CAAA,CAAA0gB,CAAAA,CAAWzV,CAAK,CAAA,CAAE,GAAA,CAAED,CAAAA,CAAAA,CAAK,EACpEtO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CAAO,QAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAASqjB,CAAAA,CACzC,QAAA,CAAA7jB,GAAAA,CAACoP,WAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CAAU,CAAA,CACnC,CAAA,CACApP,GAAAA,CAACQ,CAAAA,CAAA,CAAO,QAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAASsjB,CAAAA,CACzC,QAAA,CAAA9jB,GAAAA,CAACqP,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CACpC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACArP,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAAS,IAAMyN,CAAAA,CAAe,IAAI,IAAM,CAAA,CAAG,QAAA,CAAA,OAAA,CAE7E,CAAA,CAAA,CACF,CAAA,CAEAlO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6FAAA,CACZ,WAAC,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAK,CAAA,CAAE,IAAI4O,CAAAA,EACrD3O,GAAAA,CAAC,KAAA,CAAA,CAAc,SAAA,CAAU,iCAAA,CACvB,QAAA,CAAAA,GAAAA,CAACiD,EAAAA,CAAA,CAAK,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,oDAAA,CAAsD,QAAA,CAAA0L,CAAAA,CAAI,CAAA,CAAA,CAD5EA,CAEV,CACD,CAAA,CAEAO,CAAAA,CAAK,GAAA,CAAI,CAACK,CAAAA,CAAM5J,CAAAA,GACf3F,GAAAA,CAAC,OAEC,SAAA,CAAWb,CAAAA,CACT,gFAAA,CACA,CAACoQ,CAAAA,EAAQ,gBACX,CAAA,CAEC,QAAA,CAAAA,GACCxP,IAAAA,CAAAye,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAze,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CACf,2EAAA,CACAoQ,CAAAA,CAAK,YAAA,EAAa,GAAM,IAAI,IAAA,EAAK,CAAE,YAAA,EAAa,CAC5C,wBAAA,CACA,eACN,CAAA,CACG,QAAA,CAAAA,EAAK,OAAA,EAAQ,CAChB,CAAA,CACAvP,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAM+iB,CAAAA,GAAYxT,CAAI,CAAA,CAC/B,SAAA,CAAU,mFAAA,CAEV,QAAA,CAAAvP,GAAAA,CAACyV,IAAAA,CAAA,CAAK,SAAA,CAAU,wBAAwB,CAAA,CAC1C,CAAA,CAAA,CACF,CAAA,CACAzV,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAAgkB,CAAAA,CAAgBzU,CAAI,CAAA,CAAE,GAAA,CAAI8R,CAAAA,EACzBrhB,GAAAA,CAAC,KAAA,CAAA,CAEC,OAAA,CAAS,IAAM6hB,CAAAA,GAAcR,CAAI,CAAA,CACjC,SAAA,CAAU,kHAAA,CAEV,QAAA,CAAArhB,GAAAA,CAACiD,EAAAA,CAAA,CAAK,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,wBAAA,CAA0B,QAAA,CAAAoe,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAJ1DA,EAAK,EAKZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAnCG1b,CAqCP,CACD,CAAA,CAAA,CACH,GACF,CAEJ,CAEA,SAAStC,EAAAA,CAAQ,CAAE,QAAA,CAAA5D,CAAAA,CAAU,KAAA,CAAAwkB,EAAO,SAAA,CAAAvkB,CAAU,CAAA,CAAqE,CACjH,IAAMwkB,CAAAA,CAAM,CAAA,CAAA,EAAID,CAAK,GACrB,OAAOjkB,GAAAA,CAACkkB,CAAAA,CAAA,CAAI,SAAA,CAAW/kB,CAAAA,CAAG,eAAA,CAAiBO,CAAS,EAAI,QAAA,CAAAD,CAAAA,CAAS,CACnE,CC1HO,SAAS0kB,EAAAA,CAAQ,CAAE,QAAA,CAAA1kB,EAAU,GAAGI,CAAM,CAAA,CAAkB,CAC7D,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kHACb,QAAA,CAAAA,GAAAA,CAAC6K,EAAAA,CAAA,CAAS,UAAA,CAAY,KAAA,CAAQ,GAAGhL,CAAAA,CAC9B,SAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAEO,SAAS2kB,EAAAA,CAAc,CAC5B,QAAA,CAAA3kB,EACA,IAAA,CAAAuK,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,GAAGpK,CACL,CAAA,CAAuB,CACrB,IAAMwkB,CAAAA,CAAanjB,MAAAA,CAAuB,IAAI,CAAA,CAE9CsD,SAAAA,CAAU,IAAM,CACd,IAAM8f,CAAAA,CAAgBljB,CAAAA,EAAqB,CACrCA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAU6I,CAAAA,CAAa,KAAK,EAC5C,CAAA,CAEA,OAAID,CAAAA,GACF,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWsa,CAAY,CAAA,CACjD,SAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,CAG1B,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,UAAWA,CAAY,CAAA,CACpD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QACjC,CACF,EAAG,CAACta,CAAAA,CAAMC,CAAY,CAAC,CAAA,CAEvB,IAAMsa,CAAAA,CAAuBnjB,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWijB,CAAAA,CAAW,OAAA,EAC1Bpa,CAAAA,CAAa,KAAK,EAEtB,CAAA,CAEA,OAAKD,CAAAA,CAEEW,YAAAA,CACL3K,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKqkB,CAAAA,CACL,OAAA,CAASE,CAAAA,CACT,SAAA,CAAU,8HAAA,CAEV,QAAA,CAAAvkB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0KAAA,CACb,QAAA,CAAAA,IAAC6K,EAAAA,CAAA,CAAS,UAAA,CAAY,KAAA,CAAQ,GAAGhL,CAAAA,CAC9B,QAAA,CAAAJ,CAAAA,CACH,EACF,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CAAA,CAfkB,IAgBpB,CAEO,SAAS+kB,GAAa,CAAE,SAAA,CAAA9kB,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAgD,CACjG,OACEE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,oBAAA,CAAmB,EAAA,CACvG,QAAA,CAAA,CAAAC,GAAAA,CAAC2d,MAAAA,CAAA,CAAO,SAAA,CAAU,kCAAA,CAAmC,CAAA,CACrD3d,GAAAA,CAACiM,EAAAA,CAAA,CACC,SAAA,CAAW9M,CAAAA,CACT,4OACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAEO,SAAS4kB,GAAY,CAAE,SAAA,CAAA/kB,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAyC,CACzF,OACEG,GAAAA,CAACkM,EAAAA,CAAA,CACC,SAAA,CAAW/M,CAAAA,CAAG,qDAAA,CAAuDO,CAAS,CAAA,CAC7E,GAAGG,CAAAA,CACN,CAEJ,CAEO,SAAS6kB,EAAAA,CAAa7kB,CAAAA,CAA6C,CACxE,OAAOG,IAACmM,EAAAA,CAAA,CAAc,SAAA,CAAU,0BAAA,CAA4B,GAAGtM,CAAAA,CAAO,CACxE,CAEO,SAAS8kB,EAAAA,CAAa,CAC3B,QAAA,CAAAllB,CAAAA,CACA,OAAA,CAAAmlB,CAAAA,CACA,SAAA,CAAAllB,CAAAA,CACA,GAAGG,CACL,CAAA,CAAyE,CACvE,OACEE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,oDAAqDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACrF,QAAA,CAAA,CAAA+kB,CAAAA,EACC5kB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kEAAA,CACZ,QAAA,CAAA4kB,CAAAA,CACH,CAAA,CAEDnlB,CAAAA,CAAAA,CACH,CAEJ,CAEO,SAASolB,GAAY,CAC1B,SAAA,CAAAnlB,CAAAA,CACA,GAAGG,CACL,CAAA,CAA8C,CAC5C,OACEG,GAAAA,CAACoM,EAAAA,CAAA,CACC,SAAA,CAAWjN,CAAAA,CACT,wTAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,CAEO,SAASilB,EAAAA,CAAgB,CAAE,SAAA,CAAAplB,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAA0C,CAC9F,OACEG,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,mEACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CAEJ,CClHO,SAASklB,EAAAA,CAAgB,CAC9B,cAAA,CAAAC,CAAAA,CACA,eAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,YAAA,CAAAnF,CAAAA,CACA,aAAA,CAAAoF,CAAAA,CACA,eAAA,CAAAC,EAAkB,EAAC,CACnB,UAAA,CAAAC,CAAAA,CAAa,EAAC,CACd,eAAA,CAAAC,CAAAA,CAAkB,EAAC,CACnB,WAAA,CAAAC,CAAAA,CAAc,CAAC,OAAA,CAAS,MAAA,CAAQ,UAAA,CAAY,UAAU,CAAA,CACtD,WAAA,CAAAC,CAAAA,CAAc,EAAC,CACf,YAAA,CAAAC,CAAAA,CAAe,GACf,YAAA,CAAAC,CAAAA,CAAe,EAAC,CAChB,YAAA,CAAAC,CAAAA,CACA,SAAA,CAAAjmB,CACF,EAAyB,CACvB,GAAM,CAACuL,CAAAA,CAAQ+R,CAAS,CAAA,CAAI5Y,QAAAA,CAAS,EAAE,EACjC,CAACwhB,CAAAA,CAAeC,CAAgB,CAAA,CAAIzhB,QAAAA,CAAmC,EAAE,CAAA,CACzE,CAAC0hB,CAAAA,CAAaC,CAAc,CAAA,CAAI3hB,QAAAA,CAAS,OAAO,CAAA,CAEhD4hB,CAAAA,CAAe,CAACC,EAAkBhkB,CAAAA,GAAkB,CACxD,IAAMoY,CAAAA,CAAUuL,CAAAA,CAAcK,CAAQ,CAAA,EAAK,GACrCxa,CAAAA,CAAO4O,CAAAA,CAAQ,QAAA,CAASpY,CAAK,CAAA,CAC/BoY,CAAAA,CAAQ,MAAA,CAAOqB,CAAAA,EAAKA,IAAMzZ,CAAK,CAAA,CAC/B,CAAC,GAAGoY,CAAAA,CAASpY,CAAK,CAAA,CAEhBikB,CAAAA,CAAa,CAAE,GAAGN,CAAAA,CAAe,CAACK,CAAQ,EAAGxa,CAAK,CAAA,CACpDA,EAAK,MAAA,GAAW,CAAA,EAAG,OAAOya,CAAAA,CAAWD,CAAQ,CAAA,CAEjDJ,CAAAA,CAAiBK,CAAU,EAC3BjB,CAAAA,GAAiBiB,CAAU,EAC7B,CAAA,CAEMC,CAAAA,CAAe,IAAM,CACzBN,CAAAA,CAAiB,EAAE,CAAA,CACnBZ,CAAAA,GAAiB,EAAE,CAAA,CACnBjI,CAAAA,CAAU,EAAE,EACZgI,CAAAA,GAAiB,EAAE,EACrB,CAAA,CAEMoB,CAAAA,CAAc,MAAA,CAAO,MAAA,CAAOR,CAAa,EAAE,IAAA,EAAK,CAAE,MAAA,CAExD,OACE7lB,IAAAA,CAAC2C,CAAAA,CAAA,CAAQ,SAAA,CAAWvD,EAAG,sEAAA,CAAwEO,CAAS,CAAA,CACtG,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BAAA,CACb,UAAAC,GAAAA,CAAC2d,MAAAA,CAAA,CAAO,SAAA,CAAU,gEAAA,CAAiE,CAAA,CACnF3d,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,WAAA,CAAY,iBAAA,CACZ,SAAA,CAAU,8LAAA,CACV,KAAA,CAAOiL,CAAAA,CACP,SAAW7J,CAAAA,EAAM,CACf4b,CAAAA,CAAU5b,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxB4jB,CAAAA,GAAiB5jB,EAAE,MAAA,CAAO,KAAK,EACjC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEArB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACqmB,EAAAA,CAAA,CACC,KAAA,CAAM,UAAA,CACN,OAAA,CAASjB,EACT,QAAA,CAAUQ,CAAAA,CAAc,QAAA,EAAe,EAAC,CACxC,QAAA,CAAWpV,CAAAA,EAAQwV,CAAAA,CAAa,WAAYxV,CAAG,CAAA,CACjD,CAAA,CAEAxQ,GAAAA,CAACqmB,EAAAA,CAAA,CACC,KAAA,CAAM,MAAA,CACN,QAAShB,CAAAA,CACT,QAAA,CAAUO,CAAAA,CAAc,IAAA,EAAW,EAAC,CACpC,QAAA,CAAWpV,CAAAA,EAAQwV,EAAa,MAAA,CAAQxV,CAAG,CAAA,CAC7C,CAAA,CAEAxQ,GAAAA,CAACqmB,EAAAA,CAAA,CACC,KAAA,CAAM,UAAA,CACN,OAAA,CAASf,CAAAA,CACT,QAAA,CAAUM,CAAAA,CAAc,QAAA,EAAe,EAAC,CACxC,SAAWpV,CAAAA,EAAQwV,CAAAA,CAAa,UAAA,CAAYxV,CAAG,CAAA,CACjD,CAAA,CAEAxQ,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2BAAA,CAA4B,CAAA,CAE3CD,IAAAA,CAACgK,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA/J,GAAAA,CAACqK,EAAAA,CAAA,CACC,QAAA,CAAAtK,IAAAA,CAACS,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,UAAU,yBAAA,CAC1C,QAAA,CAAA,CAAAR,GAAAA,CAAC6gB,OAAAA,CAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,QAEjC,CAAA,CACF,CAAA,CACA7gB,GAAAA,CAACwK,EAAAA,CAAA,CAAe,SAAA,CAAU,sCAAA,CACvB,QAAA,CAAAgb,EAAY,GAAA,CAAI1d,CAAAA,EACf9H,GAAAA,CAAC,QAAA,CAAA,CAEC,SAAA,CAAU,uHAAA,CACV,OAAA,CAAS,IAAMklB,IAAepd,CAAAA,CAAI,KAAA,CAAO,KAAK,CAAA,CAE7C,QAAA,CAAAA,CAAAA,CAAI,KAAA,CAAA,CAJAA,CAAAA,CAAI,KAKX,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAECse,CAAAA,CAAc,CAAA,EACbrmB,IAAAA,CAACS,EAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,OAAA,CAAS2lB,CAAAA,CACT,SAAA,CAAU,wDAEV,QAAA,CAAA,CAAAnmB,GAAAA,CAAC+R,CAAAA,CAAA,CAAE,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,QAAA,CAC7B/R,IAACuR,EAAAA,CAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,sCAAA,CAChC,QAAA,CAAA6U,CAAAA,CACH,GACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CAEA,SAASC,EAAAA,CAAc,CAAE,KAAA,CAAApgB,EAAO,OAAA,CAAAhC,CAAAA,CAAS,QAAA,CAAAkL,CAAAA,CAAU,QAAA,CAAAmQ,CAAS,CAAA,CAKzD,CACD,OACEvf,IAAAA,CAACgK,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA/J,GAAAA,CAACqK,EAAAA,CAAA,CACC,QAAA,CAAAtK,KAACS,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,SAAA,CAAWrB,CAAAA,CACT,kCAAA,CACAgQ,CAAAA,CAAS,MAAA,CAAS,CAAA,CAAI,8BAAA,CAAiC,gCACzD,CAAA,CAEC,QAAA,CAAA,CAAAlJ,EACAkJ,CAAAA,CAAS,MAAA,CAAS,CAAA,CACjBnP,GAAAA,CAACuR,EAAAA,CAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,UAAU,0DAAA,CAC7B,QAAA,CAAApC,CAAAA,CAAS,MAAA,CACZ,CAAA,CAEAnP,GAAAA,CAAC8b,WAAAA,CAAA,CAAY,UAAU,wBAAA,CAAyB,CAAA,CAAA,CAEpD,CAAA,CACF,CAAA,CACA9b,GAAAA,CAACwK,EAAAA,CAAA,CAAe,SAAA,CAAU,kDACxB,QAAA,CAAAzK,IAAAA,CAACokB,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAnkB,GAAAA,CAACwkB,EAAAA,CAAA,CAAa,YAAa,CAAA,OAAA,EAAUve,CAAAA,CAAM,WAAA,EAAa,CAAA,GAAA,CAAA,CAAO,SAAA,CAAU,aAAA,CAAc,CAAA,CACvFjG,IAACykB,EAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CACrB,QAAA,CAAAzkB,GAAAA,CAAC2kB,EAAAA,CAAA,CACE,SAAA1gB,CAAAA,CAAQ,GAAA,CAAKqE,CAAAA,EACZvI,IAAAA,CAAC8kB,EAAAA,CAAA,CAEC,KAAA,CAAOvc,CAAAA,CAAO,KAAA,CACd,OAAA,CAAS,IAAMgX,CAAAA,CAAShX,CAAAA,CAAO,KAAK,CAAA,CACpC,SAAA,CAAU,8EAEV,QAAA,CAAA,CAAAtI,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAyB,QAAA,CAAAsI,CAAAA,CAAO,KAAA,CAAM,EACrD6G,CAAAA,CAAS,QAAA,CAAS7G,CAAAA,CAAO,KAAK,CAAA,EAC7BtI,GAAAA,CAACsmB,KAAAA,CAAA,CAAM,UAAU,2BAAA,CAA4B,CAAA,CAAA,CAAA,CAP1Che,CAAAA,CAAO,KASd,CACD,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,EACF,CAAA,CAAA,CACF,CAEJ,CCzLO,SAASie,GAAM,CAAE,MAAA,CAAAnf,CAAAA,CAAQ,OAAA,CAAAof,CAAAA,CAAS,QAAA,CAAA/mB,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAe,CAC1E,IAAM+mB,CAAAA,CAAYvlB,MAAAA,CAA0B,IAAI,CAAA,CAEhD,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAMkiB,CAAAA,CAASD,CAAAA,CAAU,OAAA,CACpBC,CAAAA,GAEDtf,EACGsf,CAAAA,CAAO,IAAA,GACVA,CAAAA,CAAO,SAAA,EAAU,CACjB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,SAAW,QAAA,CAAA,CAG7BA,CAAAA,CAAO,IAAA,GACTA,CAAAA,CAAO,KAAA,EAAM,CACb,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,CAAW,OAAA,CAAA,EAGrC,CAAA,CAAG,CAACtf,CAAM,CAAC,CAAA,CAEX5C,SAAAA,CAAU,IAAM,CACd,IAAMkiB,CAAAA,CAASD,CAAAA,CAAU,OAAA,CACzB,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAgBvlB,CAAAA,EAAa,CACjCA,CAAAA,CAAE,cAAA,EAAe,CACjBolB,CAAAA,GACF,CAAA,CAEA,OAAAE,CAAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUC,CAAY,CAAA,CACvC,IAAMD,CAAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUC,CAAY,CAChE,CAAA,CAAG,CAACH,CAAO,CAAC,CAAA,CAQL7b,YAAAA,CACL3K,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKymB,CAAAA,CACL,OAAA,CATyBrlB,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWqlB,CAAAA,CAAU,OAAA,EACzBD,CAAAA,GAEJ,CAAA,CAMI,SAAA,CAAWrnB,EACT,yIAAA,CACA,iCAAA,CACAO,CACF,CAAA,CAEA,QAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,EACT,kLAAA,CACA,mEACF,CAAA,CAEC,QAAA,CAAA,CAAAM,CAAAA,CACDM,IAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASymB,EACT,SAAA,CAAU,oNAAA,CAEV,QAAA,CAAA,CAAAzmB,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,YAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,+BAAA,CAC1L,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,CACpCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,KAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CACtC,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,iBAAK,CAAA,CAAA,CACjC,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CACF,CAEO,SAAS4mB,EAAAA,CAAY,CAAE,SAAA,CAAAlnB,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAAyC,CACzF,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,yDAAA,CAA2DO,CAAS,CAAA,CACpF,QAAA,CAAAD,EACH,CAEJ,CAEO,SAASonB,EAAAA,CAAY,CAAE,SAAA,CAAAnnB,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAAyC,CACzF,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,oEAAA,CAAsEO,CAAS,CAAA,CAC/F,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAASqnB,EAAAA,CAAW,CAAE,SAAA,CAAApnB,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAA6C,CAC5F,OACEO,GAAAA,CAACqD,GAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,SAAA,CAAWlE,CAAAA,CAAG,mDAAA,CAAqDO,CAAS,CAAA,CAC1F,SAAAD,CAAAA,CACH,CAEJ,CAEO,SAASsnB,EAAAA,CAAiB,CAAE,SAAA,CAAArnB,CAAAA,CAAW,SAAAD,CAAS,CAAA,CAA+C,CACpG,OACEO,GAAAA,CAACiD,EAAAA,CAAA,CAAK,OAAA,CAAQ,QAAQ,SAAA,CAAW9D,CAAAA,CAAG,SAAA,CAAWO,CAAS,CAAA,CACrD,QAAA,CAAAD,CAAAA,CACH,CAEJ,CCxGO,SAASunB,EAAAA,CAAU,CAAE,KAAA,CAAA3b,CAAAA,CAAO,QAAA,CAAA4b,EAAU,SAAA,CAAAvnB,CAAU,CAAA,CAAmB,CACxE,GAAI,CAAC2L,CAAAA,EAASA,CAAAA,CAAM,SAAW,CAAA,CAAG,OAAO,IAAA,CAEzC,IAAM6b,CAAAA,CAAiB7b,CAAAA,CAAM,MAAA,CAAO1F,CAAAA,EAAKA,EAAE,SAAS,CAAA,CAAE,MAAA,CAChDyU,CAAAA,CAAY8M,CAAAA,CAAiB7b,CAAAA,CAAM,MAAA,CAAU,GAAA,CAEnD,OACEtL,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACvC,QAAA,CAAA,CAAAK,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gGAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,WAAA,CAAS,CAAA,CACfD,KAAC,MAAA,CAAA,CAAM,QAAA,CAAA,CAAAmnB,CAAAA,CAAe,GAAA,CAAE7b,CAAAA,CAAM,MAAA,CAAA,CAAO,CAAA,CAAA,CACvC,CAAA,CAEArL,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oDAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,gDAAA,CACV,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGoa,CAAQ,CAAA,CAAA,CAAI,CAAA,CACjC,CAAA,CACF,EAEApa,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAAqL,CAAAA,CAAM,GAAA,CAAKQ,CAAAA,EACV9L,KAAC,KAAA,CAAA,CAEC,SAAA,CAAU,8CAAA,CACV,OAAA,CAAS,IAAMknB,CAAAA,GAAWpb,CAAAA,CAAK,EAAE,EAEhC,QAAA,CAAA,CAAAA,CAAAA,CAAK,SAAA,CACJ7L,GAAAA,CAACmnB,WAAAA,CAAA,CAAY,SAAA,CAAU,uBAAA,CAAwB,EAE/CnnB,GAAAA,CAAConB,MAAAA,CAAA,CAAO,SAAA,CAAU,iDAAA,CAAkD,CAAA,CAEtEpnB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CACf,2BAAA,CACA0M,CAAAA,CAAK,SAAA,CAAY,4BAAA,CAA+B,eAClD,CAAA,CACG,QAAA,CAAAA,EAAK,KAAA,CACR,CAAA,CAAA,CAAA,CAdKA,CAAAA,CAAK,EAeZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CCjCO,SAASwb,EAAAA,CAAa,CAAE,SAAAC,CAAAA,CAAU,YAAA,CAAAC,CAAAA,CAAc,SAAA,CAAA7nB,CAAU,CAAA,CAAsB,CACrF,GAAM,CAAC8nB,CAAAA,CAAYC,CAAa,CAAA,CAAIrjB,QAAAA,CAAS,EAAE,CAAA,CAEzCsjB,CAAAA,CAAe,IAAM,CACpBF,CAAAA,CAAW,IAAA,EAAK,GACrBD,CAAAA,GAAeC,CAAU,CAAA,CACzBC,CAAAA,CAAc,EAAE,GAClB,CAAA,CAEA,OACE1nB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,EACvC,QAAA,CAAA,CAAAM,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8DAAA,CAA+D,QAAA,CAAA,UAAA,CAAQ,CAAA,CAErFA,GAAAA,CAAC,OAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAAD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,QAAA,CACb,QAAA,CAAA,CAAAC,IAAC+Q,EAAAA,CAAA,CACC,WAAA,CAAY,oBAAA,CACZ,KAAA,CAAOyW,CAAAA,CACP,QAAA,CAAWpmB,CAAAA,EAAMqmB,CAAAA,CAAcrmB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC7C,SAAA,CAAU,sDAAA,CACZ,CAAA,CACApB,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CACb,QAAA,CAAAD,IAAAA,CAACS,CAAAA,CAAA,CACC,IAAA,CAAK,KACL,OAAA,CAASknB,CAAAA,CACT,QAAA,CAAU,CAACF,CAAAA,CAAW,IAAA,EAAK,CAC3B,SAAA,CAAU,QAEV,QAAA,CAAA,CAAAxnB,GAAAA,CAAC2nB,IAAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,SAAA,CAAA,CAElC,EACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAEA3nB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAAsnB,EAAS,GAAA,CAAKM,CAAAA,EACb7nB,IAAAA,CAAC,KAAA,CAAA,CAAqB,SAAA,CAAU,YAAA,CAC9B,QAAA,CAAA,CAAAC,GAAAA,CAACgb,EAAA,CAAO,GAAA,CAAK4M,CAAAA,CAAQ,IAAA,CAAK,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAQ,IAAA,CAAK,KAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CACpE7nB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8DAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+BAAgC,QAAA,CAAA4nB,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,CAClE5nB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,4BAA6B,QAAA,CAAA4nB,CAAAA,CAAQ,SAAA,CAAU,cAAA,EAAe,CAAE,CAAA,CAAA,CAClF,CAAA,CACA5nB,GAAAA,CAAC,KAAE,SAAA,CAAU,uCAAA,CAAyC,QAAA,CAAA4nB,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAA,CACxE,CAAA,CAAA,CAAA,CARQA,CAAAA,CAAQ,EASlB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CCnDO,SAASC,EAAAA,CAAgB,CAAE,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAC,EAAU,UAAA,CAAAC,CAAAA,CAAY,SAAA,CAAAtoB,CAAU,CAAA,CAAyB,CACtG,OACEK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACvC,QAAA,CAAA,CAAAK,IAAAA,CAAC,OAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8DAAA,CAA+D,QAAA,CAAA,aAAA,CAAW,EACxFD,IAAAA,CAACS,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,6CAC1C,QAAA,CAAA,CAAAR,GAAAA,CAAC2iB,SAAAA,CAAA,CAAU,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,KAAA,CAAA,CAEnC,GACF,CAAA,CAEA3iB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CACZ,QAAA,CAAA8nB,CAAAA,CAAY,GAAA,CAAK1T,GAChBrU,IAAAA,CAAC,KAAA,CAAA,CAEC,SAAA,CAAU,sHAAA,CAET,QAAA,CAAA,CAAAqU,CAAAA,CAAK,SAAA,CACJpU,GAAAA,CAAC,OAAI,SAAA,CAAU,qCAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKoU,CAAAA,CAAK,SAAA,CAAW,IAAKA,CAAAA,CAAK,IAAA,CAAM,SAAA,CAAU,4BAAA,CAA6B,CAAA,CACnF,CAAA,CAEApU,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iEAAA,CACb,QAAA,CAAAA,GAAAA,CAACqU,QAAAA,CAAA,CAAS,SAAA,CAAU,uBAAA,CAAwB,EAC9C,CAAA,CAGFtU,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,KAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,yCAAA,CAA2C,QAAA,CAAAoU,CAAAA,CAAK,IAAA,CAAK,CAAA,CAClEpU,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sCAAuC,QAAA,CAAAoU,CAAAA,CAAK,IAAA,CAAK,CAAA,CAAA,CAChE,CAAA,CAEArU,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2HACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,UAAU,oDAAA,CACV,OAAA,CAAS,IAAMwnB,CAAAA,GAAa5T,CAAI,CAAA,CAEhC,QAAA,CAAApU,GAAAA,CAACioB,SAAA,CAAS,SAAA,CAAU,SAAA,CAAU,CAAA,CAChC,CAAA,CACAjoB,GAAAA,CAACQ,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,qEAAA,CACV,OAAA,CAAS,IAAMunB,CAAAA,GAAW3T,CAAAA,CAAK,EAAE,CAAA,CAEjC,QAAA,CAAApU,GAAAA,CAAC+R,CAAAA,CAAA,CAAE,SAAA,CAAU,UAAU,CAAA,CACzB,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CAnCKqC,CAAAA,CAAK,EAoCZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CChEO,SAAS8T,EAAAA,CAAY,CAAE,MAAA,CAAAC,EAAQ,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAnB,CAAAA,CAAU,SAAA,CAAAvnB,CAAU,CAAA,CAAqB,CAC1F,OACEK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACvC,QAAA,CAAA,CAAAK,KAAC,IAAA,CAAA,CAAG,SAAA,CAAU,sFAAA,CACZ,QAAA,CAAA,CAAAC,GAAAA,CAACkkB,GAAAA,CAAA,CAAI,SAAA,CAAU,UAAU,CAAA,CAAE,QAAA,CAAA,CAE7B,CAAA,CACAlkB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBAAA,CACZ,QAAA,CAAAmoB,CAAAA,CAAO,GAAA,CAAKliB,CAAAA,EAAU,CACrB,IAAMsG,CAAAA,CAAa6b,CAAAA,CAAY,QAAA,CAASniB,EAAM,EAAE,CAAA,CAChD,OACElG,IAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMknB,CAAAA,CAAShhB,EAAM,EAAE,CAAA,CAChC,SAAA,CAAW9G,CAAAA,CACT,4FAAA,CACAoN,CAAAA,CACI,wCAAA,CACA,mEACN,EAEA,QAAA,CAAA,CAAAvM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,sBAAA,CACV,KAAA,CAAO,CAAE,eAAA,CAAiBiG,EAAM,KAAM,CAAA,CACxC,CAAA,CACCA,CAAAA,CAAM,IAAA,CACNsG,CAAAA,EAAcvM,GAAAA,CAACsmB,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAAA,CAAA,CAdrCrgB,CAAAA,CAAM,EAeb,CAEJ,CAAC,CAAA,CACH,GACF,CAEJ,CChCO,SAASoiB,EAAAA,CAAe,CAAE,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,QAAA,CAAAjJ,CAAAA,CAAU,SAAA,CAAA5f,CAAU,EAAwB,CAC9F,OACEK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,EACvC,QAAA,CAAA,CAAAK,IAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,sFAAA,CACZ,QAAA,CAAA,CAAAC,GAAAA,CAACwoB,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,UAAA,CAAA,CAE/B,CAAA,CACAxoB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBACZ,QAAA,CAAAsoB,CAAAA,CAAM,GAAA,CAAK3J,CAAAA,EAAS,CACnB,IAAMpS,CAAAA,CAAagc,CAAAA,GAAe5J,EAAK,EAAA,CACvC,OACE5e,IAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMuf,CAAAA,CAASX,CAAAA,CAAK,EAAE,CAAA,CAC/B,SAAA,CAAWxf,CAAAA,CACT,iEAAA,CACAoN,CAAAA,CACI,wBAAA,CACA,gCACN,CAAA,CAEA,UAAAvM,GAAAA,CAACgb,CAAAA,CAAA,CAAO,GAAA,CAAK2D,CAAAA,CAAK,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAK,IAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CACpD3e,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yBAAA,CAA2B,SAAA2e,CAAAA,CAAK,IAAA,CAAK,CAAA,CACpDpS,CAAAA,EAAcvM,GAAAA,CAACsmB,KAAAA,CAAA,CAAM,SAAA,CAAU,wBAAwB,CAAA,CAAA,CAAA,CAXnD3H,CAAAA,CAAK,EAYZ,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CChCO,SAAS8J,EAAAA,CAAc,CAAE,KAAAlZ,CAAAA,CAAM,QAAA,CAAA7I,CAAAA,CAAU,SAAA,CAAAhH,CAAU,CAAA,CAAuB,CAC/E,OACEK,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACvC,QAAA,CAAA,CAAAK,IAAAA,CAAC,MAAG,SAAA,CAAU,sFAAA,CACZ,QAAA,CAAA,CAAAC,GAAAA,CAAC2P,QAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,UAAA,CAAA,CAEtC,CAAA,CAECJ,CAAAA,CACCxP,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2EAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kFAAA,CACb,QAAA,CAAAA,GAAAA,CAAC8Q,KAAAA,CAAA,CAAM,UAAU,SAAA,CAAU,CAAA,CAC7B,CAAA,CACA/Q,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,QAAA,CACb,QAAA,CAAA,CAAAC,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAA,CACV,QAAA,CAAAuP,CAAAA,CAAK,kBAAA,CAAmB,MAAA,CAAW,CAAE,MAAO,OAAA,CAAS,GAAA,CAAK,SAAA,CAAW,IAAA,CAAM,SAAU,CAAC,CAAA,CACzF,CAAA,CACAvP,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2BAAA,CACV,QAAA,CAAAuP,CAAAA,CAAK,kBAAA,CAAmB,MAAA,CAAW,CAAE,KAAM,SAAA,CAAW,MAAA,CAAQ,SAAU,CAAC,CAAA,CAC5E,CAAA,CAAA,CACF,CAAA,CACAvP,GAAAA,CAACQ,EAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,0CAAA,CACV,OAAA,CAAS,IAAMkG,CAAAA,CAAS,MAAS,CAAA,CAEjC,QAAA,CAAA1G,GAAAA,CAAC+R,CAAAA,CAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CACzB,CAAA,CAAA,CACF,CAAA,CAEAhS,IAAAA,CAACS,CAAAA,CAAA,CACC,OAAA,CAAQ,QACR,SAAA,CAAU,uIAAA,CACV,OAAA,CAAS,IAAMkG,CAAAA,CAAS,IAAI,IAAM,CAAA,CAElC,UAAA1G,GAAAA,CAAC2P,QAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CAAE,cAAA,CAAA,CAEtC,CAAA,CAAA,CAEJ,CAEJ,CC1CO,SAAS+Y,EAAAA,CAAY,CAAE,eAAAC,CAAAA,CAAiB,CAAA,CAAG,YAAA,CAAAC,CAAAA,CAAc,SAAA,CAAAlpB,CAAU,CAAA,CAAqB,CAC7F,GAAM,CAACmpB,CAAAA,CAASC,CAAU,CAAA,CAAI1kB,QAAAA,CAASukB,CAAc,CAAA,CAC/C,CAAClc,CAAAA,CAAUsc,CAAW,CAAA,CAAI3kB,QAAAA,CAAS,KAAK,CAAA,CAE9CI,SAAAA,CAAU,IAAM,CACd,IAAIwkB,CAAAA,CAAgB,IAAA,CACpB,OAAIvc,CAAAA,CACFuc,CAAAA,CAAW,WAAA,CAAY,IAAM,CAC3BF,CAAAA,CAAYG,CAAAA,EAAM,CAChB,IAAMxd,CAAAA,CAAOwd,CAAAA,CAAI,CAAA,CACjB,OAAAL,IAAend,CAAI,CAAA,CACZA,CACT,CAAC,EACH,CAAA,CAAG,GAAI,CAAA,CAEP,cAAcud,CAAQ,CAAA,CAEjB,IAAM,aAAA,CAAcA,CAAQ,CACrC,CAAA,CAAG,CAACvc,EAAUmc,CAAY,CAAC,CAAA,CAE3B,IAAMM,CAAAA,CAAcD,CAAAA,EAAc,CAChC,IAAME,EAAM,IAAA,CAAK,KAAA,CAAMF,CAAAA,CAAI,IAAI,CAAA,CACzBG,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAOH,CAAAA,CAAI,IAAA,CAAQ,EAAE,CAAA,CACjCI,CAAAA,CAAOJ,CAAAA,CAAI,EAAA,CACjB,OAAO,GAAGE,CAAAA,CAAI,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAA,EAAIC,EAAK,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAA,EAAIC,CAAAA,CAAK,UAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CACnH,CAAA,CAEA,OACEtpB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACvC,QAAA,CAAA,CAAAK,IAAAA,CAAC,MAAG,SAAA,CAAU,sFAAA,CACZ,QAAA,CAAA,CAAAC,GAAAA,CAACspB,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,EAAE,eAAA,CAAA,CAE/B,CAAA,CAEAvpB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+EAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,QAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,wDAAA,CACV,QAAA,CAAAkpB,CAAAA,CAAWL,CAAO,CAAA,CACrB,CAAA,CACA7oB,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,oDAAA,CAAqD,4BAAgB,CAAA,CAAA,CACpF,CAAA,CAEAD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,EAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,qDAAA,CACV,OAAA,CAAS,IAAMsoB,CAAAA,CAAW,CAAC,CAAA,CAE3B,QAAA,CAAA9oB,GAAAA,CAACupB,SAAAA,CAAA,CAAU,SAAA,CAAU,UAAU,CAAA,CACjC,CAAA,CACAvpB,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAASiM,CAAAA,CAAW,WAAA,CAAc,UAClC,IAAA,CAAK,MAAA,CACL,SAAA,CAAWtN,CAAAA,CACT,iDAAA,CACAsN,CAAAA,CAAW,mCAAA,CAAsC,+BACnD,EACA,OAAA,CAAS,IAAMsc,CAAAA,CAAY,CAACtc,CAAQ,CAAA,CAEnC,QAAA,CAAAA,CAAAA,CAAWzM,IAACwiB,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAAKxiB,GAAAA,CAACyiB,IAAAA,CAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,CAAA,CAC/E,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCtCO,SAAS+G,GAAgB,CAC9B,MAAA,CAAApiB,CAAAA,CACA,OAAA,CAAAof,CAAAA,CACA,MAAA,CAAAiD,CAAAA,CACA,QAAA,CAAAjI,EACA,WAAA,CAAAkI,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,IAAA,CAAAtI,CAAAA,CACA,QAAA,CAAAuI,CAAAA,CACA,QAAAhN,CAAAA,CAAU,EAAC,CACX,KAAA,CAAA0L,CAAAA,CAAQ,EAAC,CACT,eAAA,CAAAuB,EAAkB,EAAC,CACnB,YAAA,CAAAC,CAAAA,CAAe,IAAA,CACf,aAAA,CAAAC,CAAAA,CAAgB,IAAA,CAChB,gBAAAC,CAAAA,CAAkB,IAAA,CAClB,YAAA,CAAAC,CAAAA,CAAe,IAAA,CACf,YAAA,CAAAC,CAAAA,CAAe,IACjB,EAAyB,CACvB,GAAM,CAACjlB,CAAAA,CAAOklB,CAAQ,CAAA,CAAI/lB,QAAAA,CAAS,EAAE,CAAA,CAC/B,CAAC6O,CAAAA,CAAamX,CAAc,CAAA,CAAIhmB,QAAAA,CAAS,EAAE,CAAA,CAC3C,CAACge,CAAAA,CAAUiI,CAAW,CAAA,CAAIjmB,QAAAA,CAA+C,QAAQ,CAAA,CACjF,CAACkmB,CAAAA,CAAiBC,CAAkB,CAAA,CAAInmB,QAAAA,CAAS,EAAE,CAAA,CACnD,CAAComB,CAAAA,CAAYC,CAAa,CAAA,CAAIrmB,SAA6B,MAAS,CAAA,CACpE,CAACsmB,CAAAA,CAAgBC,CAAiB,CAAA,CAAIvmB,QAAAA,CAAmB,EAAE,CAAA,CAC3D,CAACwmB,CAAAA,CAASC,CAAU,CAAA,CAAIzmB,QAAAA,CAA2B,MAAS,CAAA,CAElEI,UAAU,IAAM,CACV6c,CAAAA,EACF8I,CAAAA,CAAS9I,CAAAA,CAAK,KAAA,EAAS,EAAE,CAAA,CACzB+I,EAAe/I,CAAAA,CAAK,WAAA,EAAe,EAAE,CAAA,CACrCgJ,CAAAA,CAAYhJ,CAAAA,CAAK,QAAA,EAAY,QAAQ,EACrCkJ,CAAAA,CAAmBlJ,CAAAA,CAAK,QAAA,EAAY,EAAE,CAAA,CACtCoJ,CAAAA,CAAcpJ,CAAAA,CAAK,QAAA,EAAU,EAAE,CAAA,CAC/BsJ,CAAAA,CAAkBtJ,CAAAA,CAAK,MAAA,EAAQ,GAAA,CAAIyJ,CAAAA,EAAKA,CAAAA,CAAE,EAAE,CAAA,EAAK,EAAE,CAAA,CACnDD,CAAAA,CAAWxJ,CAAAA,CAAK,OAAA,CAAU,IAAI,KAAKA,CAAAA,CAAK,OAAO,CAAA,CAAI,MAAS,CAAA,GAE5D8I,CAAAA,CAAS,EAAE,CAAA,CACXC,EAAe,EAAE,CAAA,CACjBC,CAAAA,CAAY,QAAQ,CAAA,CACpBE,CAAAA,CAAmBX,CAAAA,EAAY,EAAE,EACjCa,CAAAA,CAAc,MAAS,CAAA,CACvBE,CAAAA,CAAkB,EAAE,CAAA,CACpBE,CAAAA,CAAW,MAAS,CAAA,EAExB,CAAA,CAAG,CAACxJ,CAAAA,CAAMja,CAAAA,CAAQwiB,CAAQ,CAAC,CAAA,CAE3B,IAAMmB,CAAAA,CAAa,IAAM,CAClB9lB,CAAAA,CAAM,IAAA,EAAK,GAChBwkB,CAAAA,CAAO,CACL,GAAGpI,CAAAA,CACH,KAAA,CAAApc,CAAAA,CACA,WAAA,CAAAgO,CAAAA,CACA,QAAA,CAAAmP,CAAAA,CACA,QAAA,CAAUkI,CAAAA,CACV,QAAA,CAAUhC,CAAAA,CAAM,IAAA,CAAK0C,CAAAA,EAAKA,CAAAA,CAAE,EAAA,GAAOR,CAAU,EAC7C,MAAA,CAAQX,CAAAA,CAAgB,MAAA,CAAOiB,CAAAA,EAAKJ,CAAAA,CAAe,QAAA,CAASI,CAAAA,CAAE,EAAE,CAAC,CAAA,CACjE,OAAA,CAASF,CAAAA,EAAS,WAAA,EACpB,CAAC,CAAA,CACDpE,CAAAA,IACF,CAAA,CAEA,OACEzmB,IAAAA,CAACwmB,EAAAA,CAAA,CAAM,MAAA,CAAQnf,CAAAA,CAAQ,OAAA,CAASof,EAC9B,QAAA,CAAA,CAAAzmB,IAAAA,CAAC6mB,EAAAA,CAAA,CAAY,SAAA,CAAU,yCAAA,CACrB,QAAA,CAAA,CAAA5mB,GAAAA,CAAC8mB,GAAA,CAAY,QAAA,CAAAzF,CAAAA,CAAO,WAAA,CAAc,iBAAA,CAAkB,CAAA,CACpDrhB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACZ,QAAA,CAAAqhB,CAAAA,EACCthB,IAAAA,CAAAye,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAxe,GAAAA,CAACQ,EAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,wCAAA,CAAyC,OAAA,CAAS,IAAMkpB,CAAAA,GAAcrI,CAAI,CAAA,CACtH,QAAA,CAAArhB,GAAAA,CAACirB,IAAAA,CAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAC5B,CAAA,CACAjrB,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,MAAA,CAAO,SAAA,CAAU,wCAAA,CAAyC,OAAA,CAAS,IAAMmpB,CAAAA,GAAYtI,CAAAA,CAAK,EAAE,EACvH,QAAA,CAAArhB,GAAAA,CAACkrB,OAAAA,CAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,CAAA,CAC/B,CAAA,CACAlrB,IAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,0CAAA,CAA2C,QAAS,IAAMghB,CAAAA,GAAWH,CAAAA,CAAK,EAAE,CAAA,CACxH,QAAA,CAAArhB,GAAAA,CAACsiB,MAAAA,CAAA,CAAO,SAAA,CAAU,SAAA,CAAU,CAAA,CAC9B,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAEAviB,IAAAA,CAAC,OAAI,SAAA,CAAU,4CAAA,CAEb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC4F,CAAAA,CAAA,CAAM,QAAQ,YAAA,CAAa,SAAA,CAAU,8DAAA,CAA+D,QAAA,CAAA,OAAA,CAAK,CAAA,CAC1G5F,GAAAA,CAAC+F,EAAAA,CAAA,CACC,GAAG,YAAA,CACH,WAAA,CAAY,wBAAA,CACZ,KAAA,CAAOd,CAAAA,CACP,QAAA,CAAW7D,CAAAA,EAAM+oB,CAAAA,CAAS/oB,EAAE,MAAA,CAAO,KAAK,CAAA,CACxC,SAAA,CAAU,wEAAA,CACV,SAAA,CAAS,IAAA,CACX,CAAA,CAAA,CACF,EAEArB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC4F,CAAAA,CAAA,CAAM,QAAQ,WAAA,CAAY,SAAA,CAAU,8DAAA,CAA+D,QAAA,CAAA,aAAA,CAAW,CAAA,CAC/G5F,GAAAA,CAAC+Q,EAAAA,CAAA,CACC,GAAG,WAAA,CACH,WAAA,CAAY,qBAAA,CACZ,KAAA,CAAOkC,CAAAA,CACP,QAAA,CAAW7R,CAAAA,EAAMgpB,CAAAA,CAAehpB,EAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,IAAA,CAAM,CAAA,CACN,SAAA,CAAU,yDAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAEC2oB,CAAAA,EAAiB1I,CAAAA,EAAM,SAAA,EACtBrhB,GAAAA,CAACgnB,EAAAA,CAAA,CAAU,KAAA,CAAO3F,EAAK,SAAA,CAAW,CAAA,CAGnC2I,CAAAA,EAAmB3I,CAAAA,EAAM,WAAA,EACxBrhB,GAAAA,CAAC6nB,EAAAA,CAAA,CAAgB,YAAa,EAAC,CAAG,CAAA,CAGnCoC,CAAAA,EACCjqB,GAAAA,CAACqnB,EAAAA,CAAA,CAAa,QAAA,CAAU,EAAC,CAAG,CAAA,CAAA,CAEhC,CAAA,CAGAtnB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uEAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC4F,CAAAA,CAAA,CAAM,SAAA,CAAU,+DAA+D,QAAA,CAAA,QAAA,CAAM,CAAA,CACtF5F,GAAAA,CAACgH,EAAAA,CAAA,CACC,KAAA,CAAOsjB,CAAAA,CACP,QAAA,CAAW9Z,GAAQ+Z,CAAAA,CAAmB/Z,CAAG,CAAA,CACzC,OAAA,CAASoM,CAAAA,CAAQ,GAAA,CAAI0G,CAAAA,GAAM,CAAE,MAAOA,CAAAA,CAAE,KAAA,CAAO,KAAA,CAAOA,CAAAA,CAAE,EAAG,CAAA,CAAE,CAAA,CAC3D,SAAA,CAAU,4BAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAEAvjB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAC,IAAC4F,CAAAA,CAAA,CAAM,SAAA,CAAU,8DAAA,CAA+D,QAAA,CAAA,UAAA,CAAQ,CAAA,CACxF5F,GAAAA,CAACgH,EAAAA,CAAA,CACC,KAAA,CAAOob,CAAAA,CACP,QAAA,CAAW5R,CAAAA,EAAQ6Z,CAAAA,CAAY7Z,CAAU,CAAA,CACzC,OAAA,CAAS,CACP,CAAE,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAM,CAAA,CAC7B,CAAE,KAAA,CAAO,SAAU,KAAA,CAAO,QAAS,CAAA,CACnC,CAAE,KAAA,CAAO,MAAA,CAAQ,KAAA,CAAO,MAAO,EAC/B,CAAE,KAAA,CAAO,QAAA,CAAU,KAAA,CAAO,QAAS,CACrC,CAAA,CACA,SAAA,CAAU,6BACZ,CAAA,CAAA,CACF,CAAA,CAEAxQ,GAAAA,CAACqoB,EAAAA,CAAA,CACC,KAAA,CAAOC,CAAAA,CACP,UAAA,CAAYkC,EACZ,QAAA,CAAUC,CAAAA,CACZ,CAAA,CAEAzqB,GAAAA,CAACkoB,EAAAA,CAAA,CACC,MAAA,CAAQ2B,CAAAA,CACR,WAAA,CAAaa,CAAAA,CACb,QAAA,CAAWvkB,CAAAA,EAAOwkB,CAAAA,CAAkBtiB,CAAAA,EAAQA,CAAAA,CAAK,QAAA,CAASlC,CAAE,CAAA,CAAIkC,CAAAA,CAAK,MAAA,CAAO1C,EAAAA,EAAKA,EAAAA,GAAMQ,CAAE,CAAA,CAAI,CAAC,GAAGkC,CAAAA,CAAMlC,CAAE,CAAC,CAAA,CAC5G,CAAA,CAEAnG,GAAAA,CAACyoB,EAAAA,CAAA,CACC,KAAMmC,CAAAA,CACN,QAAA,CAAUC,CAAAA,CACZ,CAAA,CAEA7qB,GAAAA,CAAC0oB,EAAAA,CAAA,CAAY,cAAA,CAAgBrH,GAAM,SAAA,CAAW,CAAA,CAAA,CAChD,CAAA,CAAA,CACF,CAAA,CAEAthB,IAAAA,CAAC8mB,EAAAA,CAAA,CAAY,SAAA,CAAU,+BACrB,QAAA,CAAA,CAAA7mB,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAASgmB,CAAAA,CAAS,kBAAM,CAAA,CAChDxmB,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAASuqB,CAAAA,CAAY,SAAA,CAAU,MAAA,CAAO,wBAAY,CAAA,CAAA,CAC5D,CAAA,CAAA,CACF,CAEJ,CC1MO,SAASI,EAAAA,CAAe,CAC7B,KAAA,CAAAlmB,CAAAA,CACA,KAAA,CAAA+b,CAAAA,CACA,WAAA,CAAAkC,CAAAA,CACA,SAAA+D,CAAAA,CACA,QAAA,CAAAxnB,CAAAA,CACA,SAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,OACEK,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACvC,QAAA,CAAA,CAAAK,IAAAA,CAAC,UACC,OAAA,CAASknB,CAAAA,CACT,SAAA,CAAU,sCAAA,CAEV,QAAA,CAAA,CAAAlnB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACZ,QAAA,CAAA,CAAAmjB,CAAAA,CAAcljB,GAAAA,CAACqP,YAAAA,CAAA,CAAa,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAKrP,IAAC8b,WAAAA,CAAA,CAAY,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACnH9b,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,wGACX,QAAA,CAAAiF,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CACAjF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CAAyB,CAAA,CACxCA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yEAAA,CACb,QAAA,CAAAghB,CAAAA,CACH,CAAA,CAAA,CACF,EAEC,CAACkC,CAAAA,EACAljB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qDAAA,CACZ,QAAA,CAAAP,CAAAA,CACH,GAEJ,CAEJ,CC3CO,SAAS2rB,EAAAA,CAAiBtI,CAAAA,CAAqB,CACpD,GAAM,CAACuI,CAAAA,CAAaC,CAAc,CAAA,CAAIlnB,QAAAA,CAAS,EAAE,CAAA,CAC3C,CAACwhB,CAAAA,CAAeC,CAAgB,CAAA,CAAIzhB,SAAgC,EAAE,CAAA,CAEtEmnB,CAAAA,CAAgB5f,OAAAA,CAAQ,IACrBmX,CAAAA,CAAM,MAAA,CAAOzB,GAAQ,CAE1B,GAAIgK,CAAAA,CAAa,CACf,IAAMG,CAAAA,CAAQH,CAAAA,CAAY,WAAA,GAM1B,GAAI,EAJFhK,CAAAA,CAAK,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAASmK,CAAK,CAAA,EACvCnK,CAAAA,CAAK,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAASmK,CAAK,CAAA,EAC9CnK,EAAK,IAAA,EAAM,IAAA,CAAKvP,CAAAA,EAAOA,CAAAA,CAAI,WAAA,EAAY,CAAE,QAAA,CAAS0Z,CAAK,CAAC,CAAA,CAAA,CAEtC,OAAO,MAC7B,CAGA,IAAA,GAAW,CAACnO,CAAAA,CAAKoO,CAAM,IAAK,MAAA,CAAO,OAAA,CAAQ7F,CAAa,CAAA,CACtD,GAAI,EAAA,CAAC6F,CAAAA,EAAUA,CAAAA,CAAO,SAAW,CAAA,CAAA,GAE7BpO,CAAAA,GAAQ,UAAA,EACN,CAACoO,CAAAA,CAAO,QAAA,CAASpK,CAAAA,CAAK,QAAQ,GAGhChE,CAAAA,GAAQ,UAAA,GACN,CAACgE,CAAAA,CAAK,QAAA,EAAY,CAACoK,CAAAA,CAAO,QAAA,CAASpK,EAAK,QAAA,CAAS,EAAE,CAAA,CAAA,EAGrDhE,CAAAA,GAAQ,MAAA,EACN,CAACgE,CAAAA,CAAK,IAAA,EAAM,KAAKvP,CAAAA,EAAO2Z,CAAAA,CAAO,QAAA,CAAS3Z,CAAG,CAAC,CAAA,CAAA,CAAG,OAAO,MAAA,CAI9D,OAAO,KACT,CAAC,CAAA,CACA,CAACgR,CAAAA,CAAOuI,CAAAA,CAAazF,CAAa,CAAC,CAAA,CAEhCI,CAAAA,CAAe7c,WAAAA,CAAY,CAAC8c,CAAAA,CAAkBhkB,CAAAA,GAAe,CACjE4jB,CAAAA,CAAiBxd,GAAQ,CACvB,IAAMgS,CAAAA,CAAUhS,CAAAA,CAAK4d,CAAQ,CAAA,EAAK,EAAC,CAC7Bxa,EAAO4O,CAAAA,CAAQ,QAAA,CAASpY,CAAK,CAAA,CAC/BoY,CAAAA,CAAQ,MAAA,CAAOqB,CAAAA,EAAKA,CAAAA,GAAMzZ,CAAK,CAAA,CAC/B,CAAC,GAAGoY,CAAAA,CAASpY,CAAK,CAAA,CAEhBypB,CAAAA,CAAW,CAAE,GAAGrjB,CAAAA,CAAM,CAAC4d,CAAQ,EAAGxa,CAAK,CAAA,CAC7C,OAAIA,CAAAA,CAAK,SAAW,CAAA,EAAG,OAAOigB,CAAAA,CAASzF,CAAQ,CAAA,CACxCyF,CACT,CAAC,EACH,EAAG,EAAE,CAAA,CAECvF,CAAAA,CAAehd,WAAAA,CAAY,IAAM,CACrC0c,CAAAA,CAAiB,EAAE,CAAA,CACnByF,CAAAA,CAAe,EAAE,EACnB,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,WAAA,CAAAD,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,aAAA,CAAA1F,EACA,gBAAA,CAAAC,CAAAA,CACA,aAAA,CAAA0F,CAAAA,CACA,YAAA,CAAAvF,CAAAA,CACA,YAAA,CAAAG,CACF,CACF,CCvDO,SAASwF,EAAAA,CAAcC,CAAAA,CAA2B,CACvD,GAAM,CAACC,EAAOC,CAAQ,CAAA,CAAI1nB,QAAAA,CAAuB,CAC/C,OAAA,CAAS,CAACwnB,CAAY,CAAA,CACtB,aAAc,CAChB,CAAC,CAAA,CAEKG,CAAAA,CAAmB7qB,MAAAA,CAAO0qB,CAAY,CAAA,CAG5CpnB,SAAAA,CAAU,IAAM,CACd,IAAMwnB,CAAAA,CAAeJ,CAAAA,CAAa,KAAA,CAAM,MAAA,GAAWG,CAAAA,CAAiB,OAAA,CAAQ,KAAA,CAAM,MAAA,EAC9DH,CAAAA,CAAa,KAAA,CAAM,IAAA,CAAK,CAACnV,CAAAA,CAAG9Q,CAAAA,GAAM8Q,EAAE,EAAA,GAAOsV,CAAAA,CAAiB,OAAA,CAAQ,KAAA,CAAMpmB,CAAC,CAAA,EAAG,EAAA,EAAM8Q,CAAAA,CAAE,WAAasV,CAAAA,CAAiB,OAAA,CAAQ,KAAA,CAAMpmB,CAAC,CAAA,EAAG,QAAQ,CAAA,CAC5JsmB,CAAAA,CAAiBL,EAAa,OAAA,CAAQ,MAAA,GAAWG,CAAAA,CAAiB,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAClEH,CAAAA,CAAa,OAAA,CAAQ,KAAK,CAACtI,CAAAA,CAAG3d,CAAAA,GAAM2d,CAAAA,CAAE,EAAA,GAAOyI,CAAAA,CAAiB,OAAA,CAAQ,OAAA,CAAQpmB,CAAC,CAAA,EAAG,EAAE,CAAA,CAE1G,GAAIqmB,CAAAA,EAAgBC,CAAAA,CAAgB,CAElC,IAAMC,EAAeL,CAAAA,CAAM,OAAA,CAAQA,CAAAA,CAAM,YAAY,CAAA,CAC7BK,CAAAA,EACDN,CAAAA,CAAa,KAAA,CAAM,SAAWM,CAAAA,CAAa,KAAA,CAAM,MAAA,EACjDN,CAAAA,CAAa,KAAA,CAAM,KAAA,CAAM,CAACnV,CAAAA,CAAG9Q,CAAAA,GAAM8Q,CAAAA,CAAE,EAAA,GAAOyV,CAAAA,CAAa,KAAA,CAAMvmB,CAAC,CAAA,EAAG,EAAA,EAAM8Q,EAAE,QAAA,GAAayV,CAAAA,CAAa,KAAA,CAAMvmB,CAAC,CAAA,EAAG,QAAQ,CAAA,EAG5ImmB,CAAAA,CAAS,CACP,OAAA,CAAS,CAACF,CAAY,CAAA,CACtB,YAAA,CAAc,CAChB,CAAC,CAAA,CAEHG,EAAiB,OAAA,CAAUH,EAC7B,CACF,CAAA,CAAG,CAACA,CAAAA,CAAcC,CAAAA,CAAM,OAAA,CAASA,EAAM,YAAY,CAAC,CAAA,CAEpD,IAAMM,CAAAA,CAAYhjB,WAAAA,CAAauiB,CAAAA,EAA0B,CACvDI,EAASzjB,CAAAA,GAEA,CACL,OAAA,CAAS,CAAC,GAFQA,CAAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,EAAGA,CAAAA,CAAK,YAAA,CAAe,CAAC,CAAA,CAEnCqjB,CAAQ,CAAA,CAClC,YAAA,CAAcrjB,CAAAA,CAAK,aAAe,CACpC,CAAA,CACD,EACH,CAAA,CAAG,EAAE,CAAA,CAEC+jB,CAAAA,CAAOjjB,WAAAA,CAAY,IAAM,CAC7B2iB,CAAAA,CAASzjB,CAAAA,EACHA,CAAAA,CAAK,YAAA,CAAe,CAAA,CACf,CAAE,GAAGA,CAAAA,CAAM,YAAA,CAAcA,CAAAA,CAAK,YAAA,CAAe,CAAE,CAAA,CAEjDA,CACR,EACH,CAAA,CAAG,EAAE,CAAA,CAECgkB,CAAAA,CAAOljB,WAAAA,CAAY,IAAM,CAC7B2iB,EAASzjB,CAAAA,EACHA,CAAAA,CAAK,YAAA,CAAeA,CAAAA,CAAK,OAAA,CAAQ,MAAA,CAAS,CAAA,CACrC,CAAE,GAAGA,CAAAA,CAAM,YAAA,CAAcA,CAAAA,CAAK,YAAA,CAAe,CAAE,CAAA,CAEjDA,CACR,EACH,EAAG,EAAE,CAAA,CAEL,OAAO,CACL,KAAA,CAAOwjB,CAAAA,CAAM,OAAA,CAAQA,EAAM,YAAY,CAAA,CACvC,SAAA,CAAAM,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,QAASR,CAAAA,CAAM,YAAA,CAAe,CAAA,CAC9B,OAAA,CAASA,CAAAA,CAAM,YAAA,CAAeA,CAAAA,CAAM,OAAA,CAAQ,MAAA,CAAS,CACvD,CACF,CCtEO,SAASS,EAAAA,CAAkB,CAChC,MAAA,CAAAjM,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,QAAA,CAAAiM,CAAAA,CACA,UAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,OAAA,CAAAloB,CAAAA,CAAU,IACZ,CAAA,CAA2B,CACzBC,UAAU,IAAM,CACd,GAAI,CAACD,CAAAA,CAAS,OAEd,IAAM6D,CAAAA,CAAiBhH,GAAqB,CAAA,CAErCA,CAAAA,CAAE,OAAA,EAAWA,CAAAA,CAAE,OAAA,GAAYA,CAAAA,CAAE,GAAA,GAAQ,GAAA,EAAO,CAACA,CAAAA,CAAE,QAAA,GAClDA,CAAAA,CAAE,cAAA,EAAe,CACjBif,CAAAA,IAAS,CAAA,CAAA,CAAA,CAILjf,CAAAA,CAAE,SAAWA,CAAAA,CAAE,OAAA,GAAYA,CAAAA,CAAE,GAAA,GAAQ,GAAA,EAAOA,CAAAA,CAAE,QAAA,EAAA,CAAeA,CAAAA,CAAE,SAAWA,CAAAA,CAAE,OAAA,GAAYA,CAAAA,CAAE,GAAA,GAAQ,GAAA,IACtGA,CAAAA,CAAE,cAAA,EAAe,CACjBkf,CAAAA,IAAS,CAAA,CAAA,CAAA,CAILlf,CAAAA,CAAE,OAAA,EAAWA,CAAAA,CAAE,OAAA,GAAYA,CAAAA,CAAE,GAAA,GAAQ,KAASA,CAAAA,CAAE,GAAA,GAAQ,GAAA,EAAO,QAAA,CAAS,aAAA,GAAkB,QAAA,CAAS,IAAA,IACvGA,CAAAA,CAAE,gBAAe,CACjBmrB,CAAAA,IAAW,CAAA,CAITnrB,CAAAA,CAAE,GAAA,GAAQ,GAAA,EAAO,QAAA,CAAS,aAAA,GAAkB,SAAS,IAAA,GACvDA,CAAAA,CAAE,cAAA,EAAe,CACjBorB,CAAAA,IAAY,CAAA,CAIVprB,CAAAA,CAAE,GAAA,GAAQ,KAAO,QAAA,CAAS,aAAA,GAAkB,QAAA,CAAS,IAAA,GACvDA,CAAAA,CAAE,cAAA,EAAe,CACjBqrB,CAAAA,MAEJ,CAAA,CAEA,OAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,CAAWrkB,CAAa,CAAA,CACzC,IAAM,MAAA,CAAO,oBAAoB,SAAA,CAAWA,CAAa,CAClE,CAAA,CAAG,CAAC7D,CAAAA,CAAS8b,CAAAA,CAAQC,CAAAA,CAAQiM,EAAUC,CAAAA,CAAWC,CAAW,CAAC,EAChE,CC3CO,SAASC,EAAAA,CAAqB,CACnC,MAAA5J,CAAAA,CACA,OAAA,CAAAlG,CAAAA,CACA,eAAA,CAAA+P,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CACF,CAAA,CAA8B,CAC5B,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAI9oB,QAAAA,CAAwB,IAAI,CAAA,CAChE,CAAC+oB,EAAiBC,CAAkB,CAAA,CAAIhpB,QAAAA,CAAwB,IAAI,CAAA,CACpE,CAACipB,CAAAA,CAAkBC,CAAmB,EAAIlpB,QAAAA,CAAwB,IAAI,CAAA,CACtE,CAACmpB,CAAAA,CAAgBC,CAAiB,CAAA,CAAIppB,QAAAA,CAAwB,IAAI,CAAA,CAClE,CAACqpB,CAAAA,CAAcC,CAAe,CAAA,CAAItpB,QAAAA,CAA8B,IAAI,CAAA,CAEpEupB,EAAezsB,MAAAA,CAAY,IAAI,CAAA,CAC/B0sB,CAAAA,CAAe1sB,MAAAA,CAAwC,IAAI,CAAA,CAE3D2sB,CAAAA,CAAkB,CAACzsB,CAAAA,CAAoB+E,CAAAA,CAAYoK,CAAAA,GAA4B,CAC/EA,CAAAA,GAAS,MAAA,EACX2c,CAAAA,CAAiB/mB,CAAE,CAAA,CACnB/E,CAAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,QAAA,CAAU+E,CAAE,CAAA,CACnC4mB,CAAAA,GAAkB5mB,CAAE,CAAA,GAEpBinB,CAAAA,CAAmBjnB,CAAE,CAAA,CACrB/E,CAAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,UAAA,CAAY+E,CAAE,CAAA,CAAA,CAEvC/E,CAAAA,CAAE,YAAA,CAAa,aAAA,CAAgB,OACjC,CAAA,CAEM0sB,CAAAA,CAAgB3kB,WAAAA,CAAY,IAAM,CAClC8jB,CAAAA,EACFD,CAAAA,GAAgBC,CAAa,CAAA,CAE/BC,CAAAA,CAAiB,IAAI,CAAA,CACrBE,EAAmB,IAAI,CAAA,CACvBE,CAAAA,CAAoB,IAAI,CAAA,CACxBE,CAAAA,CAAkB,IAAI,CAAA,CACtBE,EAAgB,IAAI,EACtB,CAAA,CAAG,CAACT,CAAAA,CAAeD,CAAa,CAAC,CAAA,CAmHjC,OAAO,CACL,aAAA,CAAAC,CAAAA,CACA,eAAA,CAAAE,CAAAA,CACA,gBAAA,CAAAE,CAAAA,CACA,cAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,eAAA,CAAAI,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,cAAA,CAzHqB,CAAC1sB,CAAAA,CAAoBwoB,CAAAA,CAAkBmE,CAAAA,GAAoB,CAIhF,GAHA3sB,CAAAA,CAAE,cAAA,EAAe,CACjBA,EAAE,YAAA,CAAa,UAAA,CAAa,MAAA,CAExB+rB,CAAAA,CAAiB,CACnBG,CAAAA,CAAoB1D,CAAQ,CAAA,CAC5B,IAAMtoB,CAAAA,CAAQF,CAAAA,CAAE,aAAA,CAA8B,qBAAA,EAAsB,CAC9D4sB,CAAAA,CAAW1sB,CAAAA,CAAK,IAAA,CAAOA,EAAK,KAAA,CAAQ,CAAA,CAC1CosB,CAAAA,CAAgBtsB,CAAAA,CAAE,OAAA,CAAU4sB,CAAAA,CAAW,MAAA,CAAS,OAAO,EACzD,CAAA,KAAA,GACEV,CAAAA,CAAoB1D,CAAQ,CAAA,CAExBmE,CAAAA,CAAQ,CACVP,CAAAA,CAAkBO,CAAM,EACxB,IAAMzsB,CAAAA,CAAQF,CAAAA,CAAE,aAAA,CAA8B,qBAAA,EAAsB,CAC9D4sB,CAAAA,CAAW1sB,CAAAA,CAAK,IAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAC1CosB,CAAAA,CAAgBtsB,CAAAA,CAAE,OAAA,CAAU4sB,CAAAA,CAAW,KAAA,CAAQ,QAAQ,EACzD,CAAA,KAAW5sB,CAAAA,CAAE,MAAA,GAAWA,CAAAA,CAAE,aAAA,GACxBosB,CAAAA,CAAkB,IAAI,CAAA,CACtBE,CAAAA,CAAgB,IAAI,CAAA,EAG1B,CAAA,CAoGE,UAAA,CAlGiB,CAACtsB,CAAAA,CAAoB6sB,EAAoBC,CAAAA,GAAsB,CAChF9sB,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAM2sB,CAAAA,CAASd,CAAAA,EAAiB7rB,EAAE,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA,CACzDwoB,CAAAA,CAAWuD,CAAAA,EAAmB/rB,CAAAA,CAAE,YAAA,CAAa,QAAQ,UAAU,CAAA,CAErE,GAAIwoB,CAAAA,EAAYiD,CAAAA,CACdA,CAAAA,CAAajD,CAAAA,CAAUqE,CAAAA,CAAYR,IAAiB,OAAA,CAAU,OAAA,CAAU,MAAM,CAAA,CAAA,KAAA,GACrEM,CAAAA,EAAUnB,CAAAA,CAAY,CAE/B,GAAI,CADS9J,CAAAA,CAAM,IAAA,CAAKrM,EAAAA,EAAKA,EAAAA,CAAE,EAAA,GAAOsX,CAAM,CAAA,CACjC,OAAA,CAESpB,EAAgB,QAAA,CAASoB,CAAM,CAAA,CAC/CpB,CAAAA,CACA,CAACoB,CAAM,CAAA,EAEC,OAAA,CAAS5nB,EAAAA,EAAO,CAE1B,IAAMgoB,EAAAA,CADcrL,CAAAA,CAAM,IAAA,CAAKrM,EAAAA,EAAKA,EAAAA,CAAE,KAAOtQ,EAAE,CAAA,EACb,QAAA,EAAY,EAAA,CAC9CymB,CAAAA,CAAWzmB,EAAAA,CAAI8nB,CAAAA,CAAYC,CAAAA,CAAUT,IAAiB,QAAA,CAAW,QAAA,CAAW,KAAK,CAAA,CACjFX,CAAAA,GAAa3mB,EAAAA,CAAIgoB,EAAAA,CAAcF,CAAAA,CAAY,CAAC,EAC9C,CAAC,EACH,CAEAH,CAAAA,GACF,CAAA,CA2EE,gBAAA,CAzEuB,CAAC1sB,CAAAA,CAAqB+E,CAAAA,CAAYoK,CAAAA,GAA4B,CACrF,IAAM6d,CAAAA,CAAQhtB,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CACpBgtB,CAAAA,GAELT,CAAAA,CAAa,OAAA,CAAU,UAAA,CAAW,IAAM,CAClCpd,CAAAA,GAAS,QACX2c,CAAAA,CAAiB/mB,CAAE,CAAA,CACnB4mB,CAAAA,GAAkB5mB,CAAE,CAAA,EAEpBinB,CAAAA,CAAmBjnB,CAAE,EAEvBynB,CAAAA,CAAa,OAAA,CAAU,CAAE,CAAA,CAAGQ,CAAAA,CAAM,OAAA,CAAS,CAAA,CAAGA,CAAAA,CAAM,OAAQ,EAC9D,CAAA,CAAG,GAAG,CAAA,EACR,CAAA,CA6DE,eAAA,CA3DuBhtB,CAAAA,EAAwB,CAC/C,GAAI,CAAC6rB,CAAAA,EAAiB,CAACE,CAAAA,CAAiB,OACxC/rB,CAAAA,CAAE,cAAA,GAEF,IAAMgtB,CAAAA,CAAQhtB,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CACzB,GAAI,CAACgtB,EAAO,OAEZ,IAAMC,CAAAA,CAAS,QAAA,CAAS,gBAAA,CAAiBD,CAAAA,CAAM,OAAA,CAASA,CAAAA,CAAM,OAAO,CAAA,CACrE,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAWD,CAAAA,CAAO,QAAQ,kBAAkB,CAAA,CAC5CE,CAAAA,CAASF,CAAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA,CAE9C,GAAIC,EAAU,CACZ,IAAM1E,CAAAA,CAAW0E,CAAAA,CAAS,YAAA,CAAa,gBAAgB,CAAA,CAGvD,GAFAhB,EAAoB1D,CAAQ,CAAA,CAExBuD,CAAAA,CAAiB,CACnB,IAAM7rB,EAAAA,CAAOgtB,CAAAA,CAAS,qBAAA,EAAsB,CACtCN,EAAAA,CAAW1sB,EAAAA,CAAK,IAAA,CAAOA,EAAAA,CAAK,KAAA,CAAQ,CAAA,CAC1CosB,CAAAA,CAAgBU,EAAM,OAAA,CAAUJ,EAAAA,CAAW,MAAA,CAAS,OAAO,EAC7D,CAAA,KAAA,GAAWO,CAAAA,CAAQ,CACjB,IAAMR,EAAAA,CAASQ,CAAAA,CAAO,YAAA,CAAa,cAAc,CAAA,CACjDf,CAAAA,CAAkBO,EAAM,CAAA,CACxB,IAAMzsB,EAAAA,CAAOitB,CAAAA,CAAO,qBAAA,EAAsB,CACpCP,EAAAA,CAAW1sB,EAAAA,CAAK,GAAA,CAAMA,EAAAA,CAAK,OAAS,CAAA,CAC1CosB,CAAAA,CAAgBU,CAAAA,CAAM,OAAA,CAAUJ,EAAAA,CAAW,KAAA,CAAQ,QAAQ,EAC7D,CACF,CACF,CAAA,CA+BE,cAAA,CA7BsB5sB,CAAAA,EAAwB,CAE9C,GADA,YAAA,CAAausB,CAAAA,CAAa,OAAO,CAAA,CAC7BV,CAAAA,EAAiBE,CAAAA,CAAiB,CACpC,GAAIE,CAAAA,CAAkB,CACpB,IAAMU,EAASd,CAAAA,CACTrD,CAAAA,CAAWuD,CAAAA,CAEbvD,CAAAA,EAAYiD,CAAAA,CACdA,CAAAA,CAAajD,CAAAA,CAAUyD,CAAAA,CAAkBI,CAAAA,GAAiB,OAAA,CAAU,OAAA,CAAU,MAAM,CAAA,CAC3EM,CAAAA,EAAUnB,CAAAA,EACnBA,CAAAA,CAAWmB,EAAQV,CAAAA,CAAkBE,CAAAA,EAAkB,MAAA,CAAWE,CAAAA,GAAiB,QAAA,CAAW,QAAA,CAAW,KAAK,EAElH,CACAK,CAAAA,GACF,CACF,CAAA,CAeE,gBAAA,CAAAZ,CACF,CACF,CCvKO,SAASsB,EAAAA,CAAY,CAC1B,OAAA,CAASC,EACT,KAAA,CAAOC,CAAAA,CACP,UAAA,CAAA9B,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,WAAA,CAAAhL,CAAAA,CACA,UAAA8M,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,KAAA,CACZ,UAAA,CAAAC,CAAAA,CAAa,WACb,IAAA,CAAMC,CAAAA,CACN,YAAA,CAAAhP,CAAAA,CACA,SAAA,CAAArgB,CAAAA,CACA,GAAGG,CACL,EAAgB,CACd,GAAM,CAACmvB,CAAAA,CAAcC,CAAe,CAAA,CAAI7qB,QAAAA,CAA+D2qB,CAAAA,EAAY,OAAO,CAAA,CACpH,CAACG,CAAAA,CAAgBC,CAAiB,CAAA,CAAI/qB,QAAAA,CAAwB,IAAI,EAClE,CAACgrB,CAAAA,CAAoBC,CAAqB,CAAA,CAAIjrB,QAAAA,CAAmB,EAAE,CAAA,CAEnE0b,EAAOiP,CAAAA,EAAYC,CAAAA,CACnBM,CAAAA,CAAW5T,CAAAA,EAA4D,CAC3EuT,CAAAA,CAAgBvT,CAAC,CAAA,CACjBqE,IAAerE,CAAC,EAClB,CAAA,CAEM,CACJ,KAAA,CAAAmQ,CAAAA,CACA,SAAA,CAAAM,CAAAA,CACA,KAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,OAAA,CAAAlM,CAAAA,CACA,OAAA,CAAAC,CACF,CAAA,CAAIuL,GAAc,CAAE,KAAA,CAAO+C,CAAAA,CAAc,OAAA,CAASD,CAAe,CAAC,CAAA,CAE5D3L,CAAAA,CAAQ+I,GAAO,KAAA,EAAS,EAAC,CACzBjP,CAAAA,CAAUiP,CAAAA,EAAO,OAAA,EAAW,EAAC,CAE7B,CACJ,cAAA,CAAAP,CAAAA,CACA,gBAAA,CAAAzF,CAAAA,CACA,aAAA,CAAA0F,CACF,CAAA,CAAIH,EAAAA,CAAiBtI,CAAK,CAAA,CAEpByM,CAAAA,CAAiB5jB,OAAAA,CAAQ,IAAM,CACnC,GAAI,CAACkjB,EAAW,OAAO,IAAA,CACvB,IAAMW,CAAAA,CAAuC,EAAC,CAExCC,CAAAA,CAAiB,CAACC,EAAUC,EAAAA,GAC3BA,EAAAA,CAAK,QAAA,CAAS,GAAG,CAAA,CACfA,EAAAA,CAAK,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAACC,CAAAA,CAAKC,EAAAA,GAASD,CAAAA,EAAOA,CAAAA,CAAIC,EAAI,CAAA,CAAGH,CAAG,CAAA,CADlCA,CAAAA,CAAIC,EAAI,CAAA,CAI1C,OAAApE,CAAAA,CAAc,OAAA,CAAQlK,CAAAA,EAAQ,CAC5B,IAAMyO,EAAAA,CAAWL,CAAAA,CAAepO,CAAAA,CAAMyN,CAAoB,CAAA,CACpD7sB,CAAAA,CAAQ,MAAA,CAAO6tB,IAAY,eAAe,CAAA,CAC3CN,CAAAA,CAAOvtB,CAAK,CAAA,GAAGutB,CAAAA,CAAOvtB,CAAK,CAAA,CAAI,EAAC,CAAA,CACrCutB,CAAAA,CAAOvtB,CAAK,CAAA,CAAE,IAAA,CAAKof,CAAI,EACzB,CAAC,CAAA,CACMmO,CACT,CAAA,CAAG,CAACjE,CAAAA,CAAesD,CAAAA,CAAWC,CAAU,CAAC,EAEnC,CACJ,eAAA,CAAAjB,EAAAA,CACA,cAAA,CAAAra,EAAAA,CACA,UAAA,CAAAK,EAEF,CAAA,CAAI6Y,EAAAA,CAAqB,CACvB,OAAA,CAAA9P,CAAAA,CACA,KAAA,CAAAkG,CAAAA,CACA,eAAA,CAAiB,EAAC,CAClB,UAAA,CAAY,CAACiL,CAAAA,CAAQE,CAAAA,CAAYC,CAAAA,CAAUplB,EAAAA,GAAa,CACtD,IAAMinB,CAAAA,CAAW,CAAC,GAAGjN,CAAK,CAAA,CACpBkN,EAAAA,CAAYD,CAAAA,CAAS,SAAA,CAAUtZ,IAAKA,EAAAA,CAAE,EAAA,GAAOsX,CAAM,CAAA,CACzD,GAAIiC,EAAAA,GAAc,EAAA,CAAI,OAEtB,IAAM3O,EAAAA,CAAO,CAAE,GAAG0O,CAAAA,CAASC,EAAS,CAAA,CAAG,QAAA,CAAU/B,CAAW,EAG5D,GAFA8B,CAAAA,CAAS,MAAA,CAAOC,EAAAA,CAAW,CAAC,CAAA,CAExB,CAAC9B,CAAAA,CACH6B,CAAAA,CAAS,IAAA,CAAK1O,EAAI,CAAA,CAAA,KACb,CACL,IAAM4O,EAAAA,CAAcF,CAAAA,CAAS,UAAUtZ,EAAAA,EAAKA,EAAAA,CAAE,EAAA,GAAOyX,CAAQ,CAAA,CACvDgC,EAAAA,CAAcpnB,EAAAA,GAAa,QAAA,CAAWmnB,GAAc,CAAA,CAAIA,EAAAA,CAC9DF,CAAAA,CAAS,MAAA,CAAOG,EAAAA,CAAa,CAAA,CAAG7O,EAAI,EACtC,CAEA8K,CAAAA,CAAU,CAAE,KAAA,CAAO4D,CAAAA,CAAU,OAAA,CAAAnT,CAAQ,CAAC,CAAA,CACtCgQ,IAAamB,CAAAA,CAAQE,CAAAA,CAAYC,CAAAA,CAAUplB,EAAQ,EACrD,CACF,CAAC,CAAA,CAEDwjB,GAAkB,CAChB,MAAA,CAAQF,CAAAA,CACR,MAAA,CAAQC,CAAAA,CACR,QAAA,CAAU,IAAM,QAAA,CAAS,cAAgC,8BAA8B,CAAA,EAAG,KAAA,EAAM,CAChG,SAAA,CAAW,IAAMsC,CAAAA,GAAY,MAAA,CAAQ,UAAU,CACjD,CAAC,CAAA,CAED,IAAMwB,EAAAA,CAAexkB,OAAAA,CAAQ,IAC3BmX,CAAAA,CAAM,IAAA,CAAKrM,CAAAA,EAAKA,CAAAA,CAAE,EAAA,GAAOyY,CAAc,CAAA,CACvC,CAACpM,CAAAA,CAAOoM,CAAc,CACxB,CAAA,CAEMkB,EAAAA,CAAa,IAAM,CACvB,IAAMC,CAAAA,CAAmBhP,CAAAA,EAAqB,CAC5C8N,CAAAA,CAAkB9N,CAAAA,CAAK,EAAE,CAAA,CACzBQ,CAAAA,GAAcR,CAAI,EACpB,CAAA,CAEA,OAAQvB,CAAAA,EACN,KAAK,MAAA,CACH,OAAO9f,GAAAA,CAACojB,EAAAA,CAAA,CAAe,MAAOmI,CAAAA,CAAe,OAAA,CAAS3O,CAAAA,CAAS,WAAA,CAAayT,CAAAA,CAAiB,CAAA,CAC/F,KAAK,UAAA,CACH,OAAOrwB,GAAAA,CAACujB,EAAAA,CAAA,CAAmB,KAAA,CAAOgI,CAAAA,CAAe,CAAA,CACnD,KAAK,OAAA,CACH,OAAOvrB,GAAAA,CAACwjB,EAAAA,CAAA,CAAgB,KAAA,CAAO+H,CAAAA,CAAe,OAAA,CAAS3O,CAAAA,CAAS,WAAA,CAAayT,EAAiB,CAAA,CAChG,KAAK,UAAA,CACH,OAAOrwB,GAAAA,CAACyjB,EAAAA,CAAA,CAAmB,KAAA,CAAO8H,CAAAA,CAAe,WAAA,CAAa8E,CAAAA,CAAiB,CAAA,CACjF,QACE,GAAIxB,CAAAA,CAAW,CACb,IAAMW,CAAAA,CAASD,CAAAA,EAAkB,MAAA,CAAO,IAAA,CAAKA,CAAc,CAAA,CAAE,MAAA,CAAS,CAAA,CAClEA,EACA,CAAE,WAAA,CAAa,EAAG,CAAA,CAEtB,OACEvvB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kEAAA,CACZ,QAAA,CAAA,MAAA,CAAO,OAAA,CAAQwvB,CAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAACc,EAAWC,EAAU,CAAA,GACjDvwB,GAAAA,CAACmrB,EAAAA,CAAA,CAEC,KAAA,CAAOmF,CAAAA,CACP,KAAA,CAAOC,GAAW,MAAA,CAClB,WAAA,CAAanB,CAAAA,CAAmB,QAAA,CAASkB,CAAS,CAAA,CAClD,QAAA,CAAU,IAAMjB,EAAsBhnB,CAAAA,EACpCA,CAAAA,CAAK,QAAA,CAASioB,CAAS,CAAA,CAAIjoB,CAAAA,CAAK,MAAA,CAAO4gB,EAAAA,EAAKA,KAAMqH,CAAS,CAAA,CAAI,CAAC,GAAGjoB,CAAAA,CAAMioB,CAAS,CACpF,CAAA,CAEA,QAAA,CAAAtwB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CACZ,QAAA,CAAA4c,CAAAA,CAAQ,GAAA,CAAIiG,GACX7iB,GAAAA,CAAC4iB,EAAAA,CAAA,CAEC,MAAA,CAAQC,CAAAA,CACR,KAAA,CAAO0N,EAAAA,CAAW,MAAA,CAAO9Z,IAAKA,EAAAA,CAAE,QAAA,GAAaoM,CAAAA,CAAO,EAAE,CAAA,CACtD,WAAA,CAAawN,CAAAA,CACb,SAAA,CAAW,IAAM1B,CAAAA,GAAY9L,CAAAA,CAAO,EAAA,CAAI,UAAU,CAAA,CAClD,QAAA,CAAWrL,EAAAA,EAAWoX,CAAAA,GAAiB/L,EAAO,EAAA,CAAIrL,EAAM,CAAA,CACxD,WAAA,CAAaqW,EAAAA,CACb,UAAA,CAAY,CAACzsB,EAAAA,CAAG2sB,KAAWva,EAAAA,CAAepS,EAAAA,CAAGyhB,CAAAA,CAAO,EAAA,CAAIkL,EAAM,CAAA,CAC9D,MAAA,CAAQ,CAAC3sB,GAAG2sB,EAAAA,GAAWla,EAAAA,CAAWzS,EAAAA,CAAGyhB,CAAAA,CAAO,EAAA,CAAIkL,EAAM,CAAA,CAAA,CARjDlL,CAAAA,CAAO,EASd,CACD,CAAA,CACH,CAAA,CAAA,CAtBKyN,CAuBP,CACD,CAAA,CACH,CAEJ,CAEA,OACEtwB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uFAAA,CACZ,QAAA,CAAA4c,CAAAA,CAAQ,GAAA,CAAIiG,GACX7iB,GAAAA,CAAC4iB,EAAAA,CAAA,CAEC,MAAA,CAAQC,CAAAA,CACR,KAAA,CAAO0I,CAAAA,CAAc,MAAA,CAAO9U,GAAKA,CAAAA,CAAE,QAAA,GAAaoM,CAAAA,CAAO,EAAE,CAAA,CACzD,WAAA,CAAawN,CAAAA,CACb,SAAA,CAAW,IAAM1B,CAAAA,GAAY9L,CAAAA,CAAO,EAAA,CAAI,UAAU,CAAA,CAClD,QAAA,CAAWrL,CAAAA,EAAWoX,CAAAA,GAAiB/L,EAAO,EAAA,CAAIrL,CAAM,CAAA,CACxD,WAAA,CAAaqW,EAAAA,CACb,UAAA,CAAY,CAACzsB,CAAAA,CAAG2sB,KAAWva,EAAAA,CAAepS,CAAAA,CAAGyhB,CAAAA,CAAO,EAAA,CAAIkL,EAAM,CAAA,CAC9D,MAAA,CAAQ,CAAC3sB,EAAG2sB,EAAAA,GAAWla,EAAAA,CAAWzS,CAAAA,CAAGyhB,CAAAA,CAAO,EAAA,CAAIkL,EAAM,CAAA,CAAA,CARjDlL,CAAAA,CAAO,EASd,CACD,CAAA,CACH,CAEN,CACF,CAAA,CAEA,OACE9iB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,4BAAA,CAA8BO,CAAS,CAAA,CACxD,QAAA,CAAA,CAAAM,GAAAA,CAAC6f,EAAAA,CAAA,CACC,KAAA,CAAM,eAAA,CACN,IAAA,CAAMC,CAAAA,CACN,YAAA,CAAepE,CAAAA,EAAM4T,CAAAA,CAAQ5T,CAAQ,EACrC,OAAA,CAASyE,CAAAA,CACT,OAAA,CAASC,CAAAA,CACT,MAAA,CAAQgM,CAAAA,CACR,MAAA,CAAQC,CAAAA,CACV,EAEArsB,GAAAA,CAAC+kB,EAAAA,CAAA,CACC,cAAA,CAAgBuG,CAAAA,CAChB,cAAA,CAAgBzF,CAAAA,CAClB,CAAA,CAEA7lB,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CACZ,QAAA,CAAAowB,EAAAA,EAAW,CACd,CAAA,CAECD,EAAAA,EACCnwB,IAACwpB,EAAAA,CAAA,CACC,MAAA,CAAQ,CAAC,CAAC0F,CAAAA,CACV,OAAA,CAAS,IAAMC,EAAkB,IAAI,CAAA,CACrC,IAAA,CAAMgB,EAAAA,CACN,MAAA,CAASK,CAAAA,EAAgB,CACvB,IAAMC,EAAe3N,CAAAA,CAAM,GAAA,CAAIrM,CAAAA,EAAKA,CAAAA,CAAE,EAAA,GAAO0Z,EAAAA,CAAa,EAAA,CAAK,CAAE,GAAG1Z,CAAAA,CAAG,GAAG+Z,CAAY,CAAA,CAAI/Z,CAAC,CAAA,CAC3F0V,CAAAA,CAAU,CAAE,KAAA,CAAOsE,CAAAA,CAAc,OAAA,CAAA7T,CAAQ,CAAC,CAAA,CAC1CuS,CAAAA,CAAkB,IAAI,EACxB,CAAA,CACF,CAAA,CAAA,CAEJ,CAEJ,CCzNO,SAASuB,EAAAA,CAAe,CAAE,QAAA,CAAA9G,CAAAA,CAAU,KAAA,CAAA+G,CAAAA,CAAO,WAAA,CAAAxpB,EAAc,aAAA,CAAe,SAAA,CAAAzH,CAAU,CAAA,CAAwB,CAC/G,GAAM,CAACkxB,CAAAA,CAAUC,CAAW,CAAA,CAAIzsB,QAAAA,CAAS,KAAK,CAAA,CACxC,CAACa,CAAAA,CAAOklB,CAAQ,CAAA,CAAI/lB,SAAS,EAAE,CAAA,CAE/BsjB,CAAAA,CAAgBtmB,CAAAA,EAAwB,CAC5CA,CAAAA,EAAG,cAAA,EAAe,CACb6D,CAAAA,CAAM,IAAA,EAAK,GAChB0rB,CAAAA,CAAM/G,CAAAA,CAAU3kB,CAAK,CAAA,CACrBklB,CAAAA,CAAS,EAAE,CAAA,CACX0G,CAAAA,CAAY,KAAK,CAAA,EACnB,CAAA,CAEA,OAAKD,CAAAA,CAgBH7wB,IAAAA,CAAC,QACC,QAAA,CAAU2nB,CAAAA,CACV,SAAA,CAAWvoB,CAAAA,CAAG,kEAAA,CAAoEO,CAAS,CAAA,CAE3F,QAAA,CAAA,CAAAM,IAAC,OAAA,CAAA,CACC,SAAA,CAAS,IAAA,CACT,KAAA,CAAOiF,CAAAA,CACP,QAAA,CAAW7D,CAAAA,EAAM+oB,CAAAA,CAAS/oB,EAAE,MAAA,CAAO,KAAK,CAAA,CACxC,WAAA,CAAY,wBAAA,CACZ,SAAA,CAAU,6FAAA,CACV,SAAA,CAAYA,GAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUyvB,CAAAA,CAAY,KAAK,EAC3C,CAAA,CACF,EACA9wB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACQ,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,OAAA,CAAS,IAAMqwB,CAAAA,CAAY,KAAK,CAAA,CAChC,SAAA,CAAU,oCAAA,CACX,QAAA,CAAA,QAAA,CAED,CAAA,CACA7wB,GAAAA,CAACQ,CAAAA,CAAA,CACC,IAAA,CAAK,KACL,OAAA,CAAS,IAAMknB,CAAAA,EAAa,CAC5B,QAAA,CAAU,CAACziB,CAAAA,CAAM,IAAA,GACjB,SAAA,CAAU,KAAA,CACX,QAAA,CAAA,UAAA,CAED,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CA9CElF,IAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAM8wB,CAAAA,CAAY,IAAI,CAAA,CAC/B,SAAA,CAAW1xB,CAAAA,CACT,iKAAA,CACAO,CACF,EAEA,QAAA,CAAA,CAAAM,GAAAA,CAACyV,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CACzBtO,CAAAA,CAAAA,CACH,CAuCN,CCjEO,SAAS2pB,GAAc,CAAE,MAAA,CAAAC,CAAAA,CAAQ,QAAA,CAAA/H,CAAAA,CAAW,GAAA,CAAO,OAAA,CAAAzkB,CAAAA,CAAU,KAAM,CAAA,CAAuB,CAC/F,GAAM,CAACysB,CAAAA,CAAYC,CAAa,CAAA,CAAI7sB,QAAAA,CAAsB,IAAI,CAAA,CACxD,CAAC8sB,CAAAA,CAAWC,CAAY,CAAA,CAAI/sB,QAAAA,CAAS,KAAK,EAC1C,CAACmC,CAAAA,CAAO+M,CAAQ,CAAA,CAAIlP,QAAAA,CAAuB,IAAI,CAAA,CAkBrD,OAAO,CACL,IAAA,CAjBW+E,WAAAA,CAAY,MAAOyN,CAAAA,EAA8D,CAC5F,GAAKma,CAAAA,CAEL,CAAAI,EAAa,IAAI,CAAA,CACjB7d,CAAAA,CAAS,IAAI,CAAA,CAEb,GAAI,CACF,MAAMyd,EAAOna,CAAI,CAAA,CACjBqa,CAAAA,CAAc,IAAI,IAAM,EAC1B,CAAA,MAASna,CAAAA,CAAK,CACZxD,CAAAA,CAASwD,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,aAAa,CAAC,EAChE,CAAA,OAAE,CACAqa,CAAAA,CAAa,KAAK,EACpB,CAAA,CACF,CAAA,CAAG,CAACJ,CAAM,CAAC,CAAA,CAIT,SAAA,CAAAG,CAAAA,CACA,UAAA,CAAAF,CAAAA,CACA,KAAA,CAAAzqB,CACF,CACF,CCvBO,SAAS6qB,EAAAA,EAAmB,CACjC,GAAM,CAACC,CAAAA,CAASC,CAAU,CAAA,CAAIltB,QAAAA,CAA+B,EAAE,CAAA,CAEzDmtB,CAAAA,CAAWpoB,WAAAA,CAAaxE,CAAAA,EAAwD,CACpF,IAAM6sB,CAAAA,CAA+B,CACnC,GAAG7sB,CAAAA,CACH,EAAA,CAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,EAAE,MAAA,CAAO,CAAA,CAAG,CAAC,CAAA,CAC1C,SAAA,CAAW,IAAI,IACjB,CAAA,CACA2sB,EAAWjpB,CAAAA,EAAQ,CAACmpB,CAAAA,CAAU,GAAGnpB,CAAI,CAAC,EACxC,CAAA,CAAG,EAAE,CAAA,CAECopB,CAAAA,CAAetoB,WAAAA,CAAY,IAAM,CACrCmoB,CAAAA,CAAW,EAAE,EACf,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,OAAA,CAAAD,CAAAA,CACA,QAAA,CAAAE,CAAAA,CACA,YAAA,CAAAE,CACF,CACF,CCvBO,SAASC,EAAAA,CAAY,CAAE,QAAA,CAAAC,CAAAA,CAAU,QAAA,CAAA1K,CAAAA,CAAU,UAAAvnB,CAAU,CAAA,CAAqB,CAC/E,OAAI,CAACiyB,CAAAA,EAAYA,CAAAA,CAAS,MAAA,GAAW,EAAU,IAAA,CAG7C3xB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACtC,SAAAiyB,CAAAA,CAAS,GAAA,CAAKC,CAAAA,EACb7xB,IAAAA,CAAC,KAAA,CAAA,CAEC,SAAA,CAAU,8CAAA,CACV,OAAA,CAAS,IAAMknB,CAAAA,GAAW2K,CAAAA,CAAQ,EAAE,CAAA,CAEnC,QAAA,CAAA,CAAAA,CAAAA,CAAQ,SAAA,CACP5xB,GAAAA,CAAC6xB,aAAA,CAAa,SAAA,CAAU,4BAAA,CAA6B,CAAA,CAErD7xB,GAAAA,CAAC8xB,MAAAA,CAAA,CAAO,SAAA,CAAU,qDAAA,CAAsD,CAAA,CAE1E9xB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CACf,2BAAA,CACAyyB,CAAAA,CAAQ,UAAY,4BAAA,CAA+B,eACrD,CAAA,CACG,QAAA,CAAAA,CAAAA,CAAQ,KAAA,CACX,CAAA,CAAA,CAAA,CAdKA,CAAAA,CAAQ,EAef,CACD,CAAA,CACH,CAEJ,CCnBO,SAASG,EAAAA,CAAa,CAAE,UAAA,CAAAC,CAAAA,CAAY,SAAA,CAAAtyB,CAAU,CAAA,CAAsB,CACzE,OACEK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,WAAA,CAAaO,CAAS,CAAA,CACvC,UAAAM,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8DAAA,CAA+D,QAAA,CAAA,UAAA,CAAQ,CAAA,CACrFA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACZ,QAAA,CAAAgyB,CAAAA,CAAW,GAAA,CAAKC,CAAAA,EACflyB,IAAAA,CAAC,KAAA,CAAA,CAAsB,SAAA,CAAU,aAC/B,QAAA,CAAA,CAAAC,GAAAA,CAACgb,CAAAA,CAAA,CAAO,GAAA,CAAKiX,CAAAA,CAAS,IAAA,CAAK,MAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAA,CACtElyB,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,uBAAA,CACX,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sBAAA,CAAwB,QAAA,CAAAiyB,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAK,CAAA,CAC1D,IAAKA,CAAAA,CAAS,MAAA,CAAQ,GAAA,CACtBA,CAAAA,CAAS,MAAA,EAAUjyB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,4BAA6B,QAAA,CAAAiyB,CAAAA,CAAS,MAAA,CAAO,CAAA,CAAA,CACnF,CAAA,CACAjyB,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,mCACV,QAAA,CAAAiyB,CAAAA,CAAS,SAAA,CAAU,cAAA,EAAe,CACrC,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CAXQA,CAAAA,CAAS,EAYnB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CCjCO,IAAMC,EAAAA,CAAW1yB,WAAAA,CAAM,UAAA,CAC5B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAuF,CAAAA,CAAQ,UAAA,CAAY,SAAAxF,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEpDC,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKD,EACL,SAAA,CAAWX,CAAAA,CACT,+FAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sFAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CAAsC,CAAA,CACrDA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uCAAuC,CAAA,CACtDA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAAA,CAC1D,CAAA,CACAA,GAAAA,CAAC,OAAI,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAAiF,CAAAA,CAAM,CAAA,CAC1DjF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,OAAO,CAAA,CAAE,GAAA,CAAA,CAC1B,CAAA,CACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACZ,QAAA,CAAAP,CAAAA,CACH,CAAA,CAAA,CACF,CAGN,EACAyyB,EAAAA,CAAS,WAAA,CAAc,UAAA,CAEhB,IAAMC,GAAe,CAAC,CAAE,QAAA,CAAA1yB,CAAAA,CAAU,MAAA,CAAA2yB,CAAAA,CAAS,GAAA,CAAK,SAAA,CAAA1yB,CAAU,CAAA,GAC/DK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,YAAA,CAAcO,CAAS,CAAA,CACxC,UAAAM,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8BAAA,CAAgC,QAAA,CAAAoyB,CAAAA,CAAO,CAAA,CACvDpyB,GAAAA,CAAC,QAAM,QAAA,CAAAP,CAAAA,CAAS,CAAA,CAAA,CAClB,EC/BK,IAAM4yB,EAAAA,CAAU,CAAC,CACtB,SAAA,CAAA3yB,CAAAA,CACA,YAAA,CAAA4yB,EAAe,KAAA,CACf,SAAA,CAAA5uB,CAAAA,CAAY,MAAA,CACZ,KAAA,CAAAsV,CAAAA,CAAQ,QAAA,CACR,QAAA,CAAAvZ,EACA,GAAGI,CACL,CAAA,GAAoB,CAElB,IAAM0yB,CAAAA,CAAS,CACb,IAAA,CAAM,MACN,MAAA,CAAQ,KAAA,CACR,IAAA,CAAM,KACR,CAAA,CAEA,OACExyB,IAAAA,CAAC,KAAA,CAAA,CACC,UAAWZ,CAAAA,CAAG,8DAAA,CAAgEO,CAAS,CAAA,CACtF,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CACT,0DAAA,CACAuE,CAAAA,GAAc,MAAA,CAAS,iBAAA,CAAoB,yBAAA,CAC3C4uB,CAAAA,EAAgB,2CAClB,CAAA,CACA,KAAA,CAAO,CAAE,iBAAA,CAAmBC,CAAAA,CAAOvZ,CAAK,CAAE,CAAA,CAEzC,SAAAvZ,CAAAA,CACH,CAAA,CACAO,GAAAA,CAAC,KAAA,CAAA,CACC,aAAA,CAAY,MAAA,CACZ,SAAA,CAAWb,CAAAA,CACT,2DACAuE,CAAAA,GAAc,MAAA,CAAS,iBAAA,CAAoB,yBAAA,CAC3C4uB,CAAAA,EAAgB,2CAClB,CAAA,CACA,KAAA,CAAO,CAAE,iBAAA,CAAmBC,CAAAA,CAAOvZ,CAAK,CAAE,CAAA,CAEzC,QAAA,CAAAvZ,CAAAA,CACH,CAAA,CACAO,IAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAeN,CAAA,CAAA,CACJ,CAEJ,ECjEA,IAAMwyB,EAAAA,CAAoBjyB,GAAAA,CACxB,2BAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,gBAAA,CACT,OAAA,CAAS,cAAA,CACT,KAAA,CAAO,aAAA,CACP,IAAA,CAAM,cACN,OAAA,CAAS,aACX,CAAA,CACA,IAAA,CAAM,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,aAAA,CACJ,EAAA,CAAI,SACN,CAAA,CACA,OAAA,CAAS,CACP,IAAA,CAAM,eAAA,CACN,MAAO,EACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,IAAA,CACN,OAAA,CAAS,KACX,CACF,CACF,CAAA,CAIakyB,EAAAA,CAAYjzB,WAAAA,CAAM,WAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,OAAA,CAAAe,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,OAAA,CAAAiD,CAAAA,CAAS,GAAG9D,CAAM,CAAA,CAAGC,CAAAA,GAE9CE,GAAAA,CAAC,MAAA,CAAA,CACC,IAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAGqzB,EAAAA,CAAkB,CAAE,OAAA,CAAA/xB,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,OAAA,CAAAiD,CAAAA,CAAS,SAAA,CAAAjE,CAAU,CAAC,CAAC,CAAA,CACrE,GAAGG,CAAAA,CACN,CAGN,EACA4yB,EAAAA,CAAU,WAAA,CAAc,WAAA,KC1ClBC,EAAAA,CAAoBnyB,GAAAA,CACxB,2CAAA,CACA,CACE,QAAA,CAAU,CACR,WAAA,CAAa,CACX,WAAY,gBAAA,CACZ,QAAA,CAAU,gBACZ,CACF,CAAA,CACA,eAAA,CAAiB,CACf,WAAA,CAAa,YACf,CACF,CACF,CAAA,CASaoyB,EAAAA,CAAYnzB,WAAAA,CAAM,UAAA,CAC7B,CACE,CAAE,SAAA,CAAAE,CAAAA,CAAW,WAAA,CAAAmQ,CAAAA,CAAc,YAAA,CAAc,UAAA,CAAA+iB,CAAAA,CAAa,IAAA,CAAM,GAAG/yB,CAAM,CAAA,CACrEC,CAAAA,GAEAE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,IAAA,CAAM8yB,CAAAA,CAAa,MAAA,CAAS,WAAA,CAC5B,kBAAA,CAAkBA,CAAAA,CAAa,MAAA,CAAY/iB,CAAAA,CAC3C,SAAA,CAAW1Q,EAAGuzB,EAAAA,CAAkB,CAAE,WAAA,CAAA7iB,CAAAA,CAAa,SAAA,CAAAnQ,CAAU,CAAC,CAAC,CAAA,CAC1D,GAAGG,CAAAA,CACN,CAEJ,EACA8yB,EAAAA,CAAU,WAAA,CAAc,WAAA,CCzBjB,SAASE,EAAAA,CAAS,CACvB,KAAA,CAAA5tB,EACA,IAAA,CAAM6tB,CAAAA,CACN,WAAA,CAAAC,CAAAA,CAAc,KAAA,CACd,YAAA,CAAA9oB,CAAAA,CACA,QAAA,CAAAlJ,CAAAA,CAAW,KAAA,CACX,QAAA,CAAAtB,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAszB,CAAAA,CACA,iBAAAC,CAAAA,CACA,GAAGpzB,CACL,CAAA,CAAkB,CAChB,GAAM,CAACqzB,CAAAA,CAAkBC,CAAmB,CAAA,CAAI/uB,QAAAA,CAAS2uB,CAAW,CAAA,CAC9DprB,CAAAA,CAAemrB,CAAAA,GAAmB,MAAA,CAClC1rB,EAASO,CAAAA,CAAemrB,CAAAA,CAAiBI,CAAAA,CAEzC1T,CAAAA,CAAe,IAAM,CACzB,GAAIze,CAAAA,CAAU,OACd,IAAM2qB,CAAAA,CAAW,CAACtkB,CAAAA,CACbO,CAAAA,EACHwrB,CAAAA,CAAoBzH,CAAQ,EAE9BzhB,CAAAA,GAAeyhB,CAAQ,EACzB,CAAA,CAEA,OACE3rB,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,EACT,8GAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAoF,CAAAA,EACClF,IAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAASyf,CAAAA,CACT,QAAA,CAAUze,CAAAA,CACV,SAAA,CAAW5B,CAAAA,CACT,sIAAA,CACA4B,CAAAA,EAAY,+BAAA,CACZiyB,CACF,CAAA,CAEC,QAAA,CAAA,CAAA/tB,CAAAA,CACDjF,GAAAA,CAAC8b,YAAA,CACC,SAAA,CAAW3c,CAAAA,CACT,qFAAA,CACAiI,CAAAA,EAAU,YACZ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGFpH,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,8CAAA,CACAiI,CAAAA,CAAS,iBAAA,CAAoB,iBAC/B,CAAA,CAEA,QAAA,CAAApH,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,gBAAA,CAAkB8F,CAAAA,EAAS,MAAA,CAAQguB,CAAgB,CAAA,CACnE,SAAAxzB,CAAAA,CACH,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC/DA,IAAM2zB,EAAAA,CAAetpB,aAAAA,CAAkD,MAAS,CAAA,CAEzE,SAASupB,EAAAA,EAAoB,CAClC,IAAM/oB,CAAAA,CAAUC,UAAAA,CAAW6oB,EAAY,EACvC,GAAI,CAAC9oB,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,uDAAuD,CAAA,CACrF,OAAOA,CACT,CAGO,SAASgpB,EAAAA,CAAUrxB,CAAAA,CAAe2K,CAAAA,CAAa2M,CAAAA,CAAgB,CACpE,OAAI3M,CAAAA,GAAQ,CAAA,CAAU,CAAA,CACd3K,CAAAA,CAAQ2K,CAAAA,CAAO2M,CACzB,CAWO,SAASga,EAAAA,CAAwB,CACtC,IAAA,CAAA3c,CAAAA,CACA,MAAA,CAAA2C,CAAAA,CAAS,GAAA,CACT,QAAA/P,CAAAA,CAAU,CAAE,GAAA,CAAK,EAAA,CAAI,KAAA,CAAO,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAI,KAAM,EAAG,CAAA,CACrD,SAAA,CAAA9J,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,EAA2B,CACzB,GAAM,CAAC2zB,CAAAA,CAAcC,CAAe,CAAA,CAAIrvB,QAAAA,CAAwB,IAAI,CAAA,CAC9D,CAACsvB,CAAAA,CAAgBC,CAAiB,CAAA,CAAIvvB,QAAAA,CAAS,CAAC,CAAA,CAChDsD,EAAelI,WAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA,CAGtDA,WAAAA,CAAM,SAAA,CAAU,IAAM,CACpB,GAAI,CAACkI,CAAAA,CAAa,OAAA,CAAS,OAC3B,IAAMhD,CAAAA,CAAW,IAAI,eAAgBkvB,CAAAA,EAAY,CAC3CA,CAAAA,CAAQ,CAAC,CAAA,EACXD,CAAAA,CAAkBC,CAAAA,CAAQ,CAAC,CAAA,CAAE,WAAA,CAAY,KAAK,EAElD,CAAC,CAAA,CACD,OAAAlvB,CAAAA,CAAS,QAAQgD,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAMhD,CAAAA,CAAS,UAAA,EACxB,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMmvB,CAAAA,CAAWloB,OAAAA,CAAQ,IAChB,IAAA,CAAK,GAAA,CAAI,GAAGiL,CAAAA,CAAK,GAAA,CAAKlH,CAAAA,EAAMA,CAAAA,CAAE,KAAK,CAAC,CAAA,CAAI,GAAA,CAC9C,CAACkH,CAAI,CAAC,CAAA,CAET,OACE5W,GAAAA,CAACozB,EAAAA,CAAa,QAAA,CAAb,CACC,KAAA,CAAO,CACL,KAAA,CAAOM,CAAAA,CACP,MAAA,CAAAna,CAAAA,CACA,IAAA,CAAA3C,CAAAA,CACA,QAAA,CAAAid,CAAAA,CACA,OAAA,CAAArqB,CAAAA,CACA,YAAA,CAAAgqB,CAAAA,CACA,eAAA,CAAAC,CACF,EAEA,QAAA,CAAAzzB,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK0H,CAAAA,CACL,SAAA,CAAWvI,CAAAA,CAAG,6BAAA,CAA+BO,CAAS,CAAA,CACtD,KAAA,CAAO,CAAE,MAAA,CAAA6Z,CAAO,CAAA,CACf,GAAG1Z,EAEH,QAAA,CAAA6zB,CAAAA,CAAiB,CAAA,EAChB1zB,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,MAAA,CACN,MAAA,CAAO,OACP,OAAA,CAAS,CAAA,IAAA,EAAO0zB,CAAc,CAAA,CAAA,EAAIna,CAAM,CAAA,CAAA,CACxC,SAAA,CAAU,kBAAA,CAET,SAAA9Z,CAAAA,CACH,CAAA,CAEJ,CAAA,CACF,CAEJ,CAEO,SAASq0B,EAAAA,CAAU,CAAE,KAAA,CAAAC,CAAAA,CAAQ,CAAE,CAAA,CAAuB,CAC3D,GAAM,CAAE,KAAA,CAAA9mB,EAAO,MAAA,CAAAsM,CAAAA,CAAQ,OAAA,CAAA/P,CAAQ,CAAA,CAAI6pB,EAAAA,EAAS,CACtCW,CAAAA,CAAcza,CAAAA,CAAS/P,CAAAA,CAAQ,GAAA,CAAMA,CAAAA,CAAQ,MAAA,CAEnD,OACExJ,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,iCAAA,CACV,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ+zB,CAAAA,CAAQ,CAAE,CAAC,CAAA,CAAE,GAAA,CAAI,CAACnoB,CAAAA,CAAGjG,CAAAA,GAAM,CAC/C,IAAMnE,CAAAA,CAAIgI,EAAQ,GAAA,CAAOwqB,CAAAA,CAAcD,CAAAA,CAASpuB,CAAAA,CAChD,OACE3F,GAAAA,CAAC,MAAA,CAAA,CAEC,EAAA,CAAIwJ,EAAQ,IAAA,CACZ,EAAA,CAAIhI,CAAAA,CACJ,EAAA,CAAIyL,CAAAA,CAAQzD,CAAAA,CAAQ,KAAA,CACpB,EAAA,CAAIhI,EACJ,MAAA,CAAO,cAAA,CACP,WAAA,CAAa,CAAA,CACb,eAAA,CAAgB,KAAA,CAAA,CAPXmE,CAQP,CAEJ,CAAC,CAAA,CACH,CAEJ,CAEO,SAASsuB,EAAAA,EAAa,CAC3B,GAAM,CAAE,KAAA,CAAAhnB,CAAAA,CAAO,MAAA,CAAAsM,CAAAA,CAAQ,OAAA,CAAA/P,CAAAA,CAAS,IAAA,CAAAoN,CAAK,CAAA,CAAIyc,EAAAA,EAAS,CAE5Ca,CAAAA,CAAAA,CADajnB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,OACnBoN,CAAAA,CAAK,MAAA,CAEpC,OACE5W,GAAAA,CAAC,GAAA,CAAA,CACE,QAAA,CAAA4W,CAAAA,CAAK,GAAA,CAAI,CAACud,CAAAA,CAAOxuB,CAAAA,GAAM,CACtB,IAAMpE,CAAAA,CAAIiI,CAAAA,CAAQ,IAAA,CAAO0qB,EAAYvuB,CAAAA,CAAIuuB,CAAAA,CAAY,CAAA,CAC/C1yB,CAAAA,CAAI+X,CAAAA,CAAS/P,CAAAA,CAAQ,MAAA,CAAS,EAAA,CACpC,OACExJ,GAAAA,CAAC,MAAA,CAAA,CAEC,CAAA,CAAGuB,CAAAA,CACH,CAAA,CAAGC,CAAAA,CACH,UAAA,CAAW,QAAA,CACX,UAAU,sDAAA,CAET,QAAA,CAAA2yB,CAAAA,CAAM,KAAA,CAAA,CANFxuB,CAOP,CAEJ,CAAC,CAAA,CACH,CAEJ,CAEO,SAASyuB,EAAAA,CAAa,CAC3B,aAAA,CAAAC,CACF,CAAA,CAEG,CACD,GAAM,CAAE,YAAA,CAAAb,CAAAA,CAAc,IAAA,CAAA5c,CAAAA,CAAM,KAAA,CAAA3J,CAAAA,CAAO,OAAA,CAAAzD,CAAQ,CAAA,CAAI6pB,EAAAA,EAAS,CAExD,GAAIG,CAAAA,GAAiB,IAAA,CAAM,OAAO,IAAA,CAGlC,IAAMU,CAAAA,CAAAA,CADajnB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,KAAA,EACnBoN,CAAAA,CAAK,MAAA,CAC9BrV,CAAAA,CAAIiI,CAAAA,CAAQ,IAAA,CAAO0qB,CAAAA,CAAYV,CAAAA,CAAeU,CAAAA,CAAY,EAC1DC,CAAAA,CAAQvd,CAAAA,CAAK4c,CAAY,CAAA,CAE/B,GAAI,CAACW,CAAAA,CAAO,OAAO,KAGnB,IAAM7uB,CAAAA,CAAU+uB,CAAAA,CAAgBA,CAAAA,CAAcF,CAAK,CAAA,CACjDp0B,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kIAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CAA+C,QAAA,CAAAm0B,CAAAA,CAAM,KAAA,CAAM,CAAA,CAC1Ep0B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAmC,QAAA,CAAA,CAAA,SAAA,CAAQo0B,CAAAA,CAAM,OAAM,CAAA,CAAA,CACxE,CAAA,CAGF,OACEn0B,GAAAA,CAAC,eAAA,CAAA,CACC,CAAA,CAAGuB,CAAAA,CAAI,EAAA,CACP,CAAA,CAAG,CAAA,CACH,KAAA,CAAO,GAAA,CACP,MAAA,CAAO,MAAA,CACP,SAAA,CAAU,sCAAA,CAEV,SAAAvB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAA,CACZ,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CACX,QAAA,CAAAsF,CAAAA,CACJ,CAAA,CACH,CAAA,CACF,CAEJ,CAEO,SAASgvB,IAAgB,CAC9B,OACEt0B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8JAAA,CACZ,QAAA,CAAA,CAAC,GAAG,MAAM,EAAE,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC4L,CAAAA,CAAGjG,CAAAA,GACtB3F,GAAAA,CAAC,OAEC,SAAA,CAAU,sDAAA,CACV,KAAA,CAAO,CAAE,MAAA,CAAQ,CAAA,EAAG,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CAAK,EAAE,CAAA,CAAA,CAAI,CAAA,CAAA,CAF1C2F,CAGP,CACD,CAAA,CACH,CAEJ,CCpMO,SAAS4uB,EAAAA,CAAkB,CAChC,KAAA,CAAAzyB,CAAAA,CAAQ,MAAA,CACR,UAAA,CAAA0yB,CAAAA,CAAa,KAAA,CACb,eAAAC,CAAAA,CAAiB,CAAA,CACjB,YAAA,CAAAC,CACF,CAAA,CAAqB,CACnB,GAAM,CAAE,KAAA,CAAAznB,CAAAA,CAAO,MAAA,CAAAsM,CAAAA,CAAQ,OAAA,CAAA/P,CAAAA,CAAS,IAAA,CAAAoN,CAAAA,CAAM,SAAAid,CAAAA,CAAU,eAAA,CAAAJ,CAAAA,CAAiB,YAAA,CAAAD,CAAa,CAAA,CAAIH,EAAAA,EAAY,CACxFsB,EAAa1nB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,KAAA,CAC5CwqB,CAAAA,CAAcza,CAAAA,CAAS/P,CAAAA,CAAQ,IAAMA,CAAAA,CAAQ,MAAA,CAC7C0qB,CAAAA,CAAYS,CAAAA,CAAa/d,CAAAA,CAAK,MAAA,CAC9Bge,CAAAA,CAAWV,CAAAA,CAAY,EAAA,CAEvBW,CAAAA,CAAS,CACb,IAAA,CAAM,2BAAA,CACN,MAAA,CAAQ,+BAAA,CACR,OAAA,CAAS,+BACT,KAAA,CAAO,8BAAA,CACP,IAAA,CAAM,2BACR,CAAA,CAEA,OACE90B,IAAAA,CAAC,GAAA,CAAA,CACE,QAAA,CAAA,CAAA6W,CAAAA,CAAK,GAAA,CAAI,CAACud,CAAAA,CAAOxuB,CAAAA,GAAM,CACtB,IAAMmvB,EAAYxB,EAAAA,CAAUa,CAAAA,CAAM,KAAA,CAAON,CAAAA,CAAUG,CAAW,CAAA,CACxDzyB,CAAAA,CAAIiI,CAAAA,CAAQ,IAAA,CAAO0qB,CAAAA,CAAYvuB,CAAAA,CAAAA,CAAKuuB,CAAAA,CAAYU,CAAAA,EAAY,CAAA,CAC5D,CAAA,CAAIrb,CAAAA,CAAS/P,EAAQ,MAAA,CAASsrB,CAAAA,CAC9BC,CAAAA,CAAYvB,CAAAA,GAAiB7tB,CAAAA,CAC7Bd,CAAAA,CAAQc,CAAAA,CAAI,EAAA,CAAM8uB,EAExB,OACE10B,IAAAA,CAAC,GAAA,CAAA,CAEC,YAAA,CAAc,IAAM0zB,CAAAA,CAAgB9tB,CAAC,CAAA,CACrC,aAAc,IAAM8tB,CAAAA,CAAgB,IAAI,CAAA,CACxC,OAAA,CAAS,IAAMiB,CAAAA,GAAeP,CAAK,CAAA,CACnC,SAAA,CAAWh1B,CAAAA,CAAG,gBAAA,CAAkBu1B,CAAAA,EAAgB,gBAAgB,CAAA,CAGhE,QAAA,CAAA,CAAA10B,IAAC,MAAA,CAAA,CACC,CAAA,CAAGwJ,CAAAA,CAAQ,IAAA,CAAO0qB,CAAAA,CAAYvuB,CAAAA,CAC9B,CAAA,CAAG6D,CAAAA,CAAQ,GAAA,CACX,KAAA,CAAO0qB,CAAAA,CACP,MAAA,CAAQF,CAAAA,CACR,IAAA,CAAK,aAAA,CACP,CAAA,CAGAh0B,IAAC,MAAA,CAAA,CACC,CAAA,CAAGuB,CAAAA,CACH,CAAA,CACA,KAAA,CAAOqzB,CAAAA,CACP,MAAA,CAAQE,CAAAA,CACR,EAAA,CAAI,CAAA,CACJ,SAAA,CAAW31B,CAAAA,CACT,sCAAA,CACA41B,CAAAA,CAAY,uBAAA,CAA0B,YACxC,EACA,KAAA,CAAO,CACL,eAAA,CAAiB,CAAA,OAAA,EAAUxb,CAAAA,CAAS/P,CAAAA,CAAQ,MAAM,CAAA,EAAA,CAAA,CAClD,UAAW,CAAA,2CAAA,EAA8C3E,CAAK,CAAA,WAAA,CAChE,CAAA,CAIF,CAAA,CAGA7E,GAAAA,CAAC,MAAA,CAAA,CACE,CAAA,CAAGuB,EACH,CAAA,CACA,KAAA,CAAOqzB,CAAAA,CACP,MAAA,CAAQE,CAAAA,CACR,EAAA,CAAI,CAAA,CACJ,SAAA,CAAW31B,CAAAA,CAAG,kBAAA,CAAoB01B,CAAAA,CAAO/yB,CAAK,CAAC,CAAA,CAC/C,KAAA,CAAO,CACN,cAAe,MAAA,CACf,eAAA,CAAiB,CAAA,OAAA,EAAUyX,CAAAA,CAAS/P,CAAAA,CAAQ,MAAM,CAAA,EAAA,CAAA,CAClD,SAAA,CAAW,CAAA,2CAAA,EAA8C3E,CAAK,CAAA,WAAA,CAC/D,CAAA,CACH,CAAA,CAGC2vB,CAAAA,EACCx0B,GAAAA,CAAC,MAAA,CAAA,CACC,EAAGuB,CAAAA,CAAIqzB,CAAAA,CAAW,CAAA,CAClB,CAAA,CAAG,CAAA,CAAI,CAAA,CACP,UAAA,CAAW,QAAA,CACX,IAAA,CAAK,OAAA,CACL,QAAA,CAAU,EAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,CACL,QAAS,CAAA,CACT,SAAA,CAAW,CAAA,yBAAA,EAA4B/vB,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAA,CAClD,UAAA,CAAY,2BACd,EAEC,QAAA,CAAAsvB,CAAAA,CAAM,KAAA,CACT,CAAA,CAAA,CAAA,CAlEGxuB,CAoEP,CAEJ,CAAC,CAAA,CACD3F,IAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CASN,GACJ,CAEJ,CClHO,SAASg1B,EAAAA,CAAmB,CACjC,KAAA,CAAAlzB,EAAQ,QAAA,CACR,UAAA,CAAA0yB,CAAAA,CAAa,KAAA,CACb,eAAAC,CAAAA,CAAiB,CAAA,CACjB,YAAA,CAAAC,CACF,EAAsB,CACpB,GAAM,CAAE,KAAA,CAAAznB,EAAO,MAAA,CAAAsM,CAAAA,CAAQ,QAAA/P,CAAAA,CAAS,IAAA,CAAAoN,EAAM,QAAA,CAAAid,CAAAA,CAAU,eAAA,CAAAJ,CAAAA,CAAiB,aAAAD,CAAa,CAAA,CAAIH,EAAAA,EAAY,CACxFsB,EAAa1nB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,MAC5CwqB,CAAAA,CAAcza,CAAAA,CAAS/P,EAAQ,GAAA,CAAMA,CAAAA,CAAQ,OAC7C0qB,CAAAA,CAAYS,CAAAA,EAAc/d,CAAAA,CAAK,MAAA,CAAS,GAUxCqe,CAAAA,CARS,CACb,IAAA,CAAM,CAAE,OAAQ,SAAA,CAAW,IAAA,CAAM,wBAAyB,CAAA,CAC1D,OAAQ,CAAE,MAAA,CAAQ,UAAW,IAAA,CAAM,yBAA0B,EAC7D,OAAA,CAAS,CAAE,MAAA,CAAQ,SAAA,CAAW,KAAM,yBAA0B,CAAA,CAC9D,KAAA,CAAO,CAAE,OAAQ,SAAA,CAAW,IAAA,CAAM,yBAA0B,CAAA,CAC5D,KAAM,CAAE,MAAA,CAAQ,UAAW,IAAA,CAAM,wBAAyB,CAC5D,CAAA,CAEqBnzB,CAAK,CAAA,CAGpBozB,CAAAA,CAASte,EAAK,GAAA,CAAI,CAACud,CAAAA,CAAOxuB,CAAAA,GAAM,CACpC,IAAMpE,CAAAA,CAAIiI,CAAAA,CAAQ,IAAA,CAAO0qB,EAAYvuB,CAAAA,CAC/BnE,CAAAA,CAAI+X,EAAS/P,CAAAA,CAAQ,MAAA,CAAS8pB,GAAUa,CAAAA,CAAM,KAAA,CAAON,CAAAA,CAAUG,CAAW,EAChF,OAAO,CAAE,CAAA,CAAAzyB,CAAAA,CAAG,EAAAC,CAAAA,CAAG,IAAA,CAAM2yB,CAAM,CAC7B,CAAC,CAAA,CAGKgB,CAAAA,CAAWD,EAAO,GAAA,CAAI,CAACE,EAAGzvB,CAAAA,GAAOA,CAAAA,GAAM,CAAA,CAAI,CAAA,EAAA,EAAKyvB,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAE,CAAC,GAAK,CAAA,EAAA,EAAKA,CAAAA,CAAE,CAAC,CAAA,CAAA,EAAIA,EAAE,CAAC,CAAA,CAAG,EAAE,IAAA,CAAK,GAAG,EAG3FC,CAAAA,CAAW;AAAA,IAAA,EACbF,CAAQ;AAAA,MAAA,EACNloB,EAAQzD,CAAAA,CAAQ,KAAK,CAAA,CAAA,EAAI+P,CAAAA,CAAS/P,EAAQ,MAAM;AAAA,MAAA,EAChDA,CAAAA,CAAQ,IAAI,CAAA,CAAA,EAAI+P,CAAAA,CAAS/P,EAAQ,MAAM;AAAA;AAAA,EAAA,CAAA,CAI7C,OACEzJ,KAAC,GAAA,CAAA,CAEC,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CACC,CAAA,CAAGq1B,EACH,IAAA,CAAMJ,CAAAA,CAAM,KACZ,KAAA,CAAO,CACH,QAAS,CAAA,CACT,SAAA,CAAW,uBAAuBR,CAAc,CAAA,UAAA,CACpD,CAAA,CACF,CAAA,CAGAz0B,GAAAA,CAAC,MAAA,CAAA,CACC,EAAGm1B,CAAAA,CACH,IAAA,CAAK,OACL,MAAA,CAAQF,CAAAA,CAAM,OACd,WAAA,CAAa,CAAA,CACb,cAAc,OAAA,CACd,cAAA,CAAe,QACf,SAAA,CAAU,mBAAA,CACV,MAAO,CACH,eAAA,CAAiB,IACjB,gBAAA,CAAkB,GAAA,CAClB,SAAA,CAAW,CAAA,sBAAA,EAAyBR,CAAc,CAAA,UAAA,CACtD,EACF,CAAA,CAGCS,CAAAA,CAAO,IAAI,CAACE,CAAAA,CAAGzvB,IACd5F,IAAAA,CAAC,GAAA,CAAA,CAEG,aAAc,IAAM0zB,CAAAA,CAAgB9tB,CAAC,CAAA,CACrC,YAAA,CAAc,IAAM8tB,CAAAA,CAAgB,IAAI,EACxC,OAAA,CAAS,IAAMiB,CAAAA,GAAeU,CAAAA,CAAE,IAAI,CAAA,CACpC,UAAWj2B,CAAAA,CAAG,kBAAA,CAAoBu1B,GAAgB,gBAAgB,CAAA,CAGlE,UAAA10B,GAAAA,CAAC,MAAA,CAAA,CACG,CAAA,CAAGo1B,CAAAA,CAAE,CAAA,CAAIlB,CAAAA,CAAY,EACrB,CAAA,CAAG1qB,CAAAA,CAAQ,IACX,KAAA,CAAO0qB,CAAAA,CACP,OAAQF,CAAAA,CACR,IAAA,CAAK,aAAA,CACT,CAAA,CAAA,CAGER,CAAAA,GAAiB7tB,CAAAA,EAAK6uB,IACpBz0B,IAAAA,CAAAye,QAAAA,CAAA,CACK,QAAA,CAAA,CAAAgV,CAAAA,GAAiB7tB,GAChB3F,GAAAA,CAAC,MAAA,CAAA,CACG,GAAIo1B,CAAAA,CAAE,CAAA,CACN,GAAI5rB,CAAAA,CAAQ,GAAA,CACZ,GAAI4rB,CAAAA,CAAE,CAAA,CACN,GAAI7b,CAAAA,CAAS/P,CAAAA,CAAQ,MAAA,CACrB,MAAA,CAAO,OAAA,CACP,WAAA,CAAa,EACb,eAAA,CAAgB,KAAA,CAChB,UAAU,YAAA,CACd,CAAA,CAEFxJ,IAAC,QAAA,CAAA,CACG,EAAA,CAAIo1B,CAAAA,CAAE,CAAA,CACN,EAAA,CAAIA,CAAAA,CAAE,EACN,CAAA,CAAG5B,CAAAA,GAAiB7tB,EAAI,CAAA,CAAI,CAAA,CAC5B,KAAMsvB,CAAAA,CAAM,MAAA,CACZ,MAAA,CAAO,OAAA,CACP,WAAA,CAAa,CAAA,CACb,MAAO,CACH,UAAA,CAAY,iBAChB,CAAA,CACJ,CAAA,CACCT,GACCx0B,GAAAA,CAAC,MAAA,CAAA,CACG,EAAGo1B,CAAAA,CAAE,CAAA,CACL,EAAGA,CAAAA,CAAE,CAAA,CAAI,GACT,UAAA,CAAW,QAAA,CACX,KAAK,OAAA,CACL,QAAA,CAAU,EAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,CACH,OAAA,CAAS,CAAA,CACT,UAAW,CAAA,yBAAA,EAA4BX,CAAAA,CAAiB,EAAI9uB,CAAAA,CAAI,EAAG,CAAA,UAAA,CAAA,CACnE,UAAA,CAAY,2BAChB,CAAA,CAEC,SAAAiR,CAAAA,CAAKjR,CAAC,GAAG,KAAA,CACd,CAAA,CAAA,CAEN,IA1DCA,CA4DT,CACD,CAAA,CAED3F,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAYN,CAAA,CAAA,CACJ,CAEJ,CCjJO,SAASs1B,GAAmB,CACjC,KAAA,CAAAxzB,CAAAA,CAAQ,MAAA,CACR,UAAA,CAAA0yB,CAAAA,CAAa,MACb,cAAA,CAAAC,CAAAA,CAAiB,CAAA,CACjB,KAAA,CAAAc,CAAAA,CAAQ,QAAA,CACR,YAAAC,CAAAA,CAAc,CAAA,CACd,KAAA,CAAA7sB,CAAAA,CAAQ,MAAA,CACR,YAAA,CAAA+rB,CACF,CAAA,CAAsB,CACpB,GAAM,CAAE,KAAA,CAAAznB,CAAAA,CAAO,OAAAsM,CAAAA,CAAQ,OAAA,CAAA/P,CAAAA,CAAS,IAAA,CAAAoN,CAAAA,CAAM,QAAA,CAAAid,EAAU,eAAA,CAAAJ,CAAAA,CAAiB,YAAA,CAAAD,CAAa,CAAA,CAAIH,EAAAA,GAC5EsB,CAAAA,CAAa1nB,CAAAA,CAAQzD,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,KAAA,CAC5CwqB,EAAcza,CAAAA,CAAS/P,CAAAA,CAAQ,GAAA,CAAMA,CAAAA,CAAQ,MAAA,CAG7C0qB,CAAAA,CAAYvrB,IAAU,QAAA,CACxBgsB,CAAAA,CAAa/d,CAAAA,CAAK,MAAA,CAClB+d,CAAAA,EAAc/d,CAAAA,CAAK,OAAS,CAAA,CAAA,CAU1B6e,CAAAA,CARS,CACb,IAAA,CAAM,SAAA,CACN,MAAA,CAAQ,UACR,OAAA,CAAS,SAAA,CACT,KAAA,CAAO,SAAA,CACP,IAAA,CAAM,SACR,EAE2B3zB,CAAK,CAAA,CAG1BozB,CAAAA,CAASte,CAAAA,CAAK,GAAA,CAAI,CAACud,EAAOxuB,CAAAA,GAAM,CACpC,IAAIpE,CAAAA,CACAoH,CAAAA,GAAU,QAAA,CAEZpH,CAAAA,CAAIiI,CAAAA,CAAQ,IAAA,CAAO0qB,CAAAA,CAAYvuB,CAAAA,CAAIuuB,CAAAA,CAAY,CAAA,CAG/C3yB,CAAAA,CAAIiI,EAAQ,IAAA,CAAO0qB,CAAAA,CAAYvuB,CAAAA,CAGjC,IAAMnE,CAAAA,CAAI+X,CAAAA,CAAS/P,EAAQ,MAAA,CAAS8pB,EAAAA,CAAUa,CAAAA,CAAM,KAAA,CAAON,CAAAA,CAAUG,CAAW,EAChF,OAAO,CAAE,CAAA,CAAAzyB,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,KAAM2yB,CAAM,CAC7B,CAAC,CAAA,CAGGzkB,CAAAA,CAAI,EAAA,CACR,GAAIwlB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAGlB,GAFAxlB,CAAAA,CAAI,CAAA,EAAA,EAAKwlB,EAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAO,CAAC,EAAG,CAAC,CAAA,CAAA,CAEjCK,CAAAA,GAAU,QAAA,CAQZ,IAAA,IAAS5vB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIuvB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAGvvB,CAAAA,EAAAA,CAAK,CAC1C,IAAM+vB,EAAKR,CAAAA,CAAOvvB,CAAC,CAAA,CACbgwB,CAAAA,CAAKT,CAAAA,CAAOvvB,CAAAA,CAAI,CAAC,CAAA,CACjBiwB,CAAAA,CAAOF,CAAAA,CAAG,CAAA,CAAA,CAAKC,CAAAA,CAAG,CAAA,CAAID,EAAG,CAAA,EAAK,CAAA,CAC9BG,CAAAA,CAAOH,CAAAA,CAAG,CAAA,CACVI,CAAAA,CAAOJ,EAAG,CAAA,CAAA,CAAKC,CAAAA,CAAG,CAAA,CAAID,CAAAA,CAAG,CAAA,EAAK,CAAA,CAC9BK,EAAOJ,CAAAA,CAAG,CAAA,CAChBjmB,CAAAA,EAAK,CAAA,GAAA,EAAMkmB,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,EAAA,EAAKC,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,EAAA,EAAKJ,CAAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,CAAC,CAAA,EAC3D,CAAA,KAAA,GACSJ,CAAAA,GAAU,MAAA,CACnB,IAAA,IAAS5vB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIuvB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAGvvB,IAAK,CAC1C,IAAM+vB,CAAAA,CAAKR,CAAAA,CAAOvvB,CAAC,CAAA,CACbgwB,EAAKT,CAAAA,CAAOvvB,CAAAA,CAAI,CAAC,CAAA,CACvB+J,CAAAA,EAAK,CAAA,GAAA,EAAMimB,EAAG,CAAC,CAAA,CAAA,EAAID,CAAAA,CAAG,CAAC,CAAA,GAAA,EAAMC,CAAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,CAAC,CAAA,EAC3C,CAAA,KAGA,IAAA,IAAShwB,EAAI,CAAA,CAAGA,CAAAA,CAAIuvB,CAAAA,CAAO,MAAA,CAAQvvB,CAAAA,EAAAA,CACjC+J,CAAAA,EAAK,MAAMwlB,CAAAA,CAAOvvB,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,EAAIuvB,CAAAA,CAAOvvB,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAK7C,OACE5F,IAAAA,CAAC,GAAA,CAAA,CAEC,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAG0P,CAAAA,CACH,IAAA,CAAK,MAAA,CACL,MAAA,CAAQ+lB,EACR,WAAA,CAAaD,CAAAA,CACb,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,UAAU,mBAAA,CACV,KAAA,CAAO,CACH,eAAA,CAAiB,GAAA,CACjB,gBAAA,CAAkB,IAClB,SAAA,CAAW,CAAA,wBAAA,EAA2Bf,CAAc,CAAA,UAAA,CACxD,CAAA,CACF,CAAA,CAGCS,EAAO,GAAA,CAAI,CAACE,CAAAA,CAAGzvB,CAAAA,GACd5F,IAAAA,CAAC,GAAA,CAAA,CAEG,aAAc,IAAM0zB,CAAAA,CAAgB9tB,CAAC,CAAA,CACrC,YAAA,CAAc,IAAM8tB,EAAgB,IAAI,CAAA,CACxC,OAAA,CAAS,IAAMiB,CAAAA,GAAeU,CAAAA,CAAE,IAAI,CAAA,CACpC,SAAA,CAAWj2B,CAAAA,CAAG,kBAAA,CAAoBu1B,CAAAA,EAAgB,gBAAgB,CAAA,CAGlE,QAAA,CAAA,CAAA10B,GAAAA,CAAC,MAAA,CAAA,CACG,CAAA,CAAGo1B,CAAAA,CAAE,CAAA,CAAIlB,CAAAA,CAAY,EACrB,CAAA,CAAG1qB,CAAAA,CAAQ,GAAA,CACX,KAAA,CAAO0qB,CAAAA,CACP,MAAA,CAAQF,EACR,IAAA,CAAK,aAAA,CACT,CAAA,CAAA,CAGER,CAAAA,GAAiB7tB,CAAAA,EAAK6uB,CAAAA,GACpBz0B,KAAAye,QAAAA,CAAA,CACK,QAAA,CAAA,CAAAgV,CAAAA,GAAiB7tB,CAAAA,EAChB3F,GAAAA,CAAC,QACG,EAAA,CAAIo1B,CAAAA,CAAE,CAAA,CACN,EAAA,CAAI5rB,CAAAA,CAAQ,GAAA,CACZ,GAAI4rB,CAAAA,CAAE,CAAA,CACN,EAAA,CAAI7b,CAAAA,CAAS/P,CAAAA,CAAQ,MAAA,CACrB,OAAO,OAAA,CACP,WAAA,CAAa,CAAA,CACb,eAAA,CAAgB,KAAA,CAChB,SAAA,CAAU,aACd,CAAA,CAEFxJ,GAAAA,CAAC,QAAA,CAAA,CACG,EAAA,CAAIo1B,CAAAA,CAAE,CAAA,CACN,EAAA,CAAIA,CAAAA,CAAE,CAAA,CACN,CAAA,CAAG5B,CAAAA,GAAiB7tB,CAAAA,CAAI,CAAA,CAAI,CAAA,CAC5B,KAAM8vB,CAAAA,CACN,MAAA,CAAO,OAAA,CACP,WAAA,CAAa,CAAA,CACb,KAAA,CAAO,CAAE,UAAA,CAAY,iBAAkB,CAAA,CAC3C,CAAA,CACCjB,CAAAA,EACCx0B,GAAAA,CAAC,QACG,CAAA,CAAGo1B,CAAAA,CAAE,CAAA,CACL,CAAA,CAAGA,CAAAA,CAAE,CAAA,CAAI,GACT,UAAA,CAAW,QAAA,CACX,IAAA,CAAK,OAAA,CACL,QAAA,CAAU,EAAA,CACV,WAAY,GAAA,CACZ,KAAA,CAAO,CACH,OAAA,CAAS,CAAA,CACT,SAAA,CAAW,4BAA4BX,CAAAA,CAAiB,CAAA,CAAI9uB,CAAAA,CAAI,EAAG,CAAA,UAAA,CAAA,CACnE,UAAA,CAAY,2BAChB,CAAA,CAEC,QAAA,CAAAiR,CAAAA,CAAKjR,CAAC,CAAA,EAAG,KAAA,CACd,CAAA,CAAA,CAEN,CAAA,CAAA,CAAA,CAxDCA,CA0DT,CACD,CAAA,CAED3F,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAQN,CAAA,CAAA,CACJ,CAEJ,CC9KO,SAASg2B,GAAkB,CAChC,WAAA,CAAAC,EAAc,CAAA,CACd,QAAA,CAAAC,EAAW,GAAA,CACX,UAAA,CAAAC,EAAa,KAAA,CACb,MAAA,CAAAtB,EAAS,CAAC,SAAA,CAAW,UAAW,SAAA,CAAW,SAAA,CAAW,UAAW,SAAA,CAAW,SAAS,EACrF,YAAA,CAAAH,CACF,EAAqB,CACnB,GAAM,CAAE,KAAA,CAAAznB,CAAAA,CAAO,MAAA,CAAAsM,CAAAA,CAAQ,IAAA,CAAA3C,CAAAA,CAAM,gBAAA6c,CAAAA,CAAiB,YAAA,CAAAD,CAAa,CAAA,CAAIH,EAAAA,GAEzD+C,CAAAA,CAAS,IAAA,CAAK,IAAInpB,CAAAA,CAAOsM,CAAM,EAAI,CAAA,CAAI,EAAA,CACvCC,EAAUvM,CAAAA,CAAQ,CAAA,CAClBwM,EAAUF,CAAAA,CAAS,CAAA,CAEnB8c,CAAAA,CAAQ1qB,OAAAA,CAAQ,IAAMiL,CAAAA,CAAK,OAAO,CAACgZ,CAAAA,CAAK0G,IAAQ1G,CAAAA,CAAM0G,CAAAA,CAAI,MAAO,CAAC,CAAA,CAAG,CAAC1f,CAAI,CAAC,EAE7E2f,CAAAA,CAAe,CAAA,CAEbC,EAAS5f,CAAAA,CAAK,GAAA,CAAI,CAACud,CAAAA,CAAOxuB,CAAAA,GAAM,CACpC,IAAMoH,CAAAA,CAAaonB,CAAAA,CAAM,MAAQkC,CAAAA,CAC3BI,CAAAA,CAAQ1pB,EAAa,CAAA,CAAI,IAAA,CAAK,GAE9B2pB,CAAAA,CAAaH,CAAAA,CACbI,EAAWJ,CAAAA,CAAeE,CAAAA,CAEhC,OAAAF,CAAAA,EAAgBE,CAAAA,CAET,CACL,GAAGtC,CAAAA,CACH,WAAAuC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAO9B,CAAAA,CAAOlvB,CAAAA,CAAIkvB,EAAO,MAAM,CAAA,CAC/B,WAAA9nB,CACF,CACF,CAAC,CAAA,CAGK6pB,CAAAA,CAA2B,CAACC,CAAAA,CAAiBv0B,CAAAA,GAAc,CAC/D,IAAMf,CAAAA,CAAIiY,EAAUlX,CAAAA,CAAI,IAAA,CAAK,IAAIu0B,CAAO,CAAA,CAClC,CAAA,CAAIpd,CAAAA,CAAUnX,CAAAA,CAAI,IAAA,CAAK,IAAIu0B,CAAO,CAAA,CACxC,OAAO,CAACt1B,CAAAA,CAAG,CAAC,CACd,CAAA,CAEA,OACExB,IAAAA,CAAC,GAAA,CAAA,CACE,UAAAy2B,CAAAA,CAAO,GAAA,CAAI,CAACM,CAAAA,CAAOnxB,CAAAA,GAAM,CAGxB,IAAMoxB,CAAAA,CAAsBD,CAAAA,CAAM,UAAA,EAAcN,CAAAA,CAAO,MAAA,CAAS,EAAIN,CAAAA,CAAW,CAAA,CAAI,GAC7Ec,CAAAA,CAAoBF,CAAAA,CAAM,UAAYN,CAAAA,CAAO,MAAA,CAAS,EAAIN,CAAAA,CAAW,CAAA,CAAI,GAI/E,GAAIc,CAAAA,EAAqBD,EAAqB,OAAO,IAAA,CAErD,GAAM,CAACE,CAAAA,CAAQC,CAAM,CAAA,CAAIN,CAAAA,CAAyBG,CAAAA,CAAqBX,CAAM,CAAA,CACvE,CAACe,EAAMC,CAAI,CAAA,CAAIR,EAAyBI,CAAAA,CAAmBZ,CAAM,EAEjEiB,CAAAA,CAAeL,CAAAA,CAAoBD,EAAsB,IAAA,CAAK,EAAA,CAAK,EAAI,CAAA,CAGvEO,CAAAA,CAASlB,EAASH,CAAAA,CAClB,CAACsB,EAAaC,CAAW,CAAA,CAAIZ,EAAyBI,CAAAA,CAAmBM,CAAM,EAC/E,CAACG,CAAAA,CAAWC,CAAS,CAAA,CAAId,CAAAA,CAAyBG,EAAqBO,CAAM,CAAA,CAE7EK,EAAW,CACf,CAAA,EAAA,EAAKV,CAAM,CAAA,CAAA,EAAIC,CAAM,GACrB,CAAA,EAAA,EAAKd,CAAM,CAAA,CAAA,EAAIA,CAAM,CAAA,GAAA,EAAMiB,CAAY,MAAMF,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,CAAA,CACzDnB,CAAAA,CAAc,EAAI,CAAA,EAAA,EAAKsB,CAAW,IAAIC,CAAW,CAAA,CAAA,CAAK,KAAKhe,CAAO,CAAA,CAAA,EAAIC,CAAO,CAAA,CAAA,CAC7Ewc,CAAAA,CAAc,EAAI,CAAA,EAAA,EAAKqB,CAAM,CAAA,CAAA,EAAIA,CAAM,CAAA,GAAA,EAAMD,CAAY,MAAMI,CAAS,CAAA,CAAA,EAAIC,CAAS,CAAA,CAAA,CAAK,EAAA,CAC1F,GACF,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAEJ3C,CAAAA,CAAYvB,IAAiB7tB,CAAAA,CAG7BiyB,EAAAA,CAAAA,CAAYd,EAAM,UAAA,CAAaA,CAAAA,CAAM,UAAY,CAAA,CACjDe,EAAAA,CAAczB,CAAAA,EAAUH,CAAAA,CAAc,CAAA,CAAA,CAAK,CAAA,CAAIA,GAAe,CAAA,CAAI,EAAA,CAAA,CAClE,CAAC6B,EAAAA,CAAQC,EAAM,EAAInB,CAAAA,CAAyBgB,EAAAA,CAAUC,EAAW,CAAA,CAEvE,OACE93B,KAAC,GAAA,CAAA,CAEC,YAAA,CAAc,IAAM0zB,CAAAA,CAAgB9tB,CAAC,EACrC,YAAA,CAAc,IAAM8tB,CAAAA,CAAgB,IAAI,CAAA,CACxC,SAAA,CAAU,iBAEV,QAAA,CAAA,CAAAzzB,GAAAA,CAAC,QACC,CAAA,CAAG23B,CAAAA,CACH,KAAMb,CAAAA,CAAM,KAAA,CACZ,UAAW33B,CAAAA,CACT,sCAAA,CACA41B,EAAY,4BAAA,CAA+B,YAC7C,EACA,KAAA,CAAO,CACL,gBAAiB,CAAA,EAAGvb,CAAO,CAAA,GAAA,EAAMC,CAAO,CAAA,EAAA,CAAA,CACxC,SAAA,CAAWsb,EAAY,aAAA,CAAgB,UAAA,CACvC,UAAW,CAAA,wBAAA,EAA2BpvB,CAAAA,CAAI,GAAI,CAAA,WAAA,CAChD,CAAA,CACF,GAEEwwB,CAAAA,EAAcpB,CAAAA,GACdh1B,KAAC,MAAA,CAAA,CACC,CAAA,CAAG+3B,GACH,CAAA,CAAGC,EAAAA,CACH,WAAW,QAAA,CACX,gBAAA,CAAiB,QAAA,CACjB,IAAA,CAAK,OAAA,CACL,QAAA,CAAU,GACV,UAAA,CAAY,GAAA,CACZ,UAAU,qBAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAY,2BAA4B,EAEhD,QAAA,CAAA,CAAA,IAAA,CAAK,KAAA,CAAMjB,EAAM,UAAA,CAAa,GAAG,EAAE,GAAA,CAAA,CACtC,CAAA,CAAA,CAAA,CAhCGnxB,CAkCP,CAEJ,CAAC,CAAA,CACD3F,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKN,CAAA,CAAA,CACJ,CAEJ,CC5HO,SAASg4B,EAAAA,CAAoB,CAClC,IAAA,CAAAphB,CAAAA,CACA,IAAA,CAAAqhB,CAAAA,CACA,MAAA,CAAApD,CAAAA,CAAS,CAAC,MAAA,CAAQ,QAAA,CAAU,SAAS,EACrC,QAAA,CAAUqD,CAAAA,CACV,MAAA,CAAA3e,CAAAA,CAAS,GAAA,CACT,SAAA,CAAA7Z,CAAAA,CACA,GAAGG,CACL,CAAA,CAAuB,CACrB,GAAM,CAAC6zB,CAAAA,CAAgBC,CAAiB,CAAA,CAAIvvB,SAAS,CAAC,CAAA,CAChDsD,CAAAA,CAAelI,WAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA,CAGtDA,WAAAA,CAAM,SAAA,CAAU,IAAM,CACpB,GAAI,CAACkI,CAAAA,CAAa,OAAA,CAAS,OAC3B,IAAMhD,CAAAA,CAAW,IAAI,cAAA,CAAgBkvB,CAAAA,EAAY,CAC3CA,CAAAA,CAAQ,CAAC,CAAA,EACXD,CAAAA,CAAkBC,CAAAA,CAAQ,CAAC,CAAA,CAAE,WAAA,CAAY,KAAK,EAElD,CAAC,EACD,OAAAlvB,CAAAA,CAAS,OAAA,CAAQgD,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAMhD,CAAAA,CAAS,UAAA,EACxB,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMyzB,CAAAA,CAAS,CAAE,CAAA,CAAGzE,CAAAA,CAAiB,CAAA,CAAG,CAAA,CAAGna,CAAAA,CAAS,CAAE,CAAA,CAChD6c,CAAAA,CAAS,IAAA,CAAK,GAAA,CAAI1C,CAAAA,CAAgBna,CAAM,CAAA,CAAI,CAAA,CAAI,EAAA,CAEhDsa,CAAAA,CAAWloB,QAAQ,IAAM,CAC7B,GAAIusB,CAAAA,CAAc,OAAOA,CAAAA,CACzB,IAAItrB,CAAAA,CAAM,CAAA,CACV,OAAAgK,CAAAA,CAAK,OAAA,CAAQlH,CAAAA,EAAK,CAChBuoB,CAAAA,CAAK,OAAA,CAAQG,GAAK,CAChB,IAAM5nB,CAAAA,CAAM,MAAA,CAAOd,CAAAA,CAAE0oB,CAAC,CAAC,CAAA,EAAK,CAAA,CACxB5nB,CAAAA,CAAM5D,CAAAA,GAAKA,CAAAA,CAAM4D,CAAAA,EACvB,CAAC,EACH,CAAC,EACM5D,CAAAA,CAAM,GAAA,EAAO,GACtB,CAAA,CAAG,CAACgK,CAAAA,CAAMqhB,CAAAA,CAAMC,CAAY,CAAC,CAAA,CAEvBG,CAAAA,CAAc,IAAA,CAAK,EAAA,CAAK,CAAA,CAAKzhB,CAAAA,CAAK,MAAA,CAElC0hB,EAAmC,CACvC,IAAA,CAAM,wBAAA,CACN,MAAA,CAAQ,yBAAA,CACR,OAAA,CAAS,yBAAA,CACT,KAAA,CAAO,yBAAA,CACP,IAAA,CAAM,wBACR,CAAA,CAEMC,CAAAA,CAAoC,CACxC,IAAA,CAAM,SAAA,CACN,OAAQ,SAAA,CACR,OAAA,CAAS,SAAA,CACT,KAAA,CAAO,SAAA,CACP,IAAA,CAAM,SACR,CAAA,CAEA,OAAI7E,CAAAA,GAAmB,CAAA,CAAU1zB,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAK0H,CAAAA,CAAc,KAAA,CAAO,CAAE,MAAA,CAAA6R,CAAO,CAAA,CAAG,CAAA,CAG1EvZ,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK0H,CAAAA,CACL,SAAA,CAAWvI,CAAAA,CAAG,6BAAA,CAA+BO,CAAS,CAAA,CACtD,KAAA,CAAO,CAAE,MAAA,CAAA6Z,CAAO,CAAA,CACf,GAAG1Z,CAAAA,CAEJ,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAA,CAAS,CAAA,IAAA,EAAO2zB,CAAc,CAAA,CAAA,EAAIna,CAAM,CAAA,CAAA,CAAI,UAAU,kBAAA,CAEnF,QAAA,CAAA,CAAA,CAAC,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAK0K,CAAAA,EAAU,CAC9B,IAAMuU,CAAAA,CAAepC,CAAAA,CAAS,CAAA,CAAKnS,CAAAA,CAC7BiR,EAASte,CAAAA,CAAK,GAAA,CAAI,CAAChL,CAAAA,CAAGjG,CAAAA,GAAM,CAChC,IAAM8wB,CAAAA,CAAQ4B,CAAAA,CAAa1yB,CAAAA,CAAI,IAAA,CAAK,EAAA,CAAK,CAAA,CACzC,OAAO,CAAA,EAAGwyB,CAAAA,CAAO,EAAI,IAAA,CAAK,GAAA,CAAI1B,CAAK,CAAA,CAAI+B,CAAW,CAAA,CAAA,EAAIL,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI1B,CAAK,CAAA,CAAI+B,CAAW,CAAA,CAChG,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA,CAEX,OACEx4B,GAAAA,CAAC,SAAA,CAAA,CAEC,MAAA,CAAQk1B,CAAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,uBAAA,CACP,WAAA,CAAY,GAAA,CAAA,CAJPjR,CAKP,CAEJ,CAAC,EAGArN,CAAAA,CAAK,GAAA,CAAI,CAAClH,CAAAA,CAAG/J,CAAAA,GAAM,CAClB,IAAM8wB,CAAAA,CAAQ4B,CAAAA,CAAa1yB,CAAAA,CAAI,IAAA,CAAK,EAAA,CAAK,CAAA,CACnCpE,CAAAA,CAAI42B,CAAAA,CAAO,CAAA,CAAI,KAAK,GAAA,CAAI1B,CAAK,CAAA,CAAIL,CAAAA,CACjC,CAAA,CAAI+B,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI1B,CAAK,CAAA,CAAIL,CAAAA,CAGjC0B,CAAAA,CAASK,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,IAAI1B,CAAK,CAAA,EAAKL,CAAAA,CAAS,EAAA,CAAA,CAChD2B,CAAAA,CAASI,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI1B,CAAK,CAAA,EAAKL,CAAAA,CAAS,EAAA,CAAA,CAEtD,OACEr2B,IAAAA,CAAC,GAAA,CAAA,CACC,UAAAC,GAAAA,CAAC,MAAA,CAAA,CACC,EAAA,CAAIm4B,CAAAA,CAAO,CAAA,CACX,EAAA,CAAIA,CAAAA,CAAO,CAAA,CACX,EAAA,CAAI52B,CAAAA,CACJ,EAAA,CAAI,CAAA,CACJ,MAAA,CAAO,uBAAA,CACP,WAAA,CAAY,GAAA,CACd,EACAvB,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAG83B,CAAAA,CACH,CAAA,CAAGC,CAAAA,CACH,UAAA,CAAW,QAAA,CACX,gBAAA,CAAiB,QAAA,CACjB,IAAA,CAAK,uBAAA,CACL,QAAA,CAAS,IAAA,CAER,QAAA,CAAAroB,CAAAA,CAAE,QACL,CAAA,CAAA,CAAA,CAlBM/J,CAmBR,CAEJ,CAAC,CAAA,CAGAsyB,CAAAA,CAAK,GAAA,CAAI,CAAC5a,CAAAA,CAAKob,CAAAA,GAAW,CACzB,IAAMvD,CAAAA,CAASte,CAAAA,CAAK,GAAA,CAAI,CAAClH,EAAG/J,CAAAA,GAAM,CAEhC,IAAMrD,CAAAA,CAAAA,CADQ,MAAA,CAAOoN,CAAAA,CAAE2N,CAAG,CAAC,CAAA,EAAK,CAAA,EACbwW,CAAAA,CAAYuC,CAAAA,CACzBK,CAAAA,CAAQ4B,CAAAA,CAAa1yB,CAAAA,CAAI,IAAA,CAAK,GAAK,CAAA,CACzC,OAAO,CAAA,EAAGwyB,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI1B,CAAK,CAAA,CAAIn0B,CAAC,CAAA,CAAA,EAAI61B,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI1B,CAAK,EAAIn0B,CAAC,CAAA,CAC5E,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAELo2B,CAAAA,CAAY7D,CAAAA,CAAO4D,CAAAA,CAAS5D,CAAAA,CAAO,MAAM,CAAA,EAAK,MAAA,CAC9C8D,CAAAA,CAAOL,CAAAA,CAASI,CAAS,CAAA,CACzBE,CAAAA,CAASL,CAAAA,CAAUG,CAAS,CAAA,CAElC,OACE14B,GAAAA,CAAC,SAAA,CAAA,CAEC,MAAA,CAAQk1B,CAAAA,CACR,IAAA,CAAMyD,CAAAA,CACN,WAAA,CAAa,EAAA,CACb,MAAA,CAAQC,CAAAA,CACR,YAAa,CAAA,CACb,SAAA,CAAU,4DAAA,CAAA,CANLvb,CAOP,CAEJ,CAAC,CAAA,CAAA,CACH,CAAA,CACF,CAEJ,CCxJO,SAASwb,EAAAA,CAAU,CACxB,IAAA,CAAAjiB,CAAAA,CACA,KAAA,CAAA9U,CAAAA,CAAQ,SAAA,CACR,MAAA,CAAAyX,CAAAA,CAAS,EAAA,CACT,WAAA,CAAAic,CAAAA,CAAc,CAAA,CACd,IAAA,CAAAmD,CAAAA,CAAO,KAAA,CACP,UAAAj5B,CAAAA,CACA,GAAGG,CACL,CAAA,CAAmB,CACjB,IAAM+M,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAI,GAAGgK,CAAI,CAAA,CACtBjK,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAI,GAAGiK,CAAI,CAAA,CACtBkiB,CAAAA,CAAQlsB,CAAAA,CAAMD,CAAAA,EAAO,CAAA,CAWrB8oB,CAAAA,CATS,CACb,IAAA,CAAM,SAAA,CACN,MAAA,CAAQ,SAAA,CACR,OAAA,CAAS,SAAA,CACT,KAAA,CAAO,SAAA,CACP,IAAA,CAAM,UACN,KAAA,CAAO,SACT,CAAA,CAE2B3zB,CAAK,CAAA,CAO1BozB,CAAAA,CAASte,CAAAA,CAAK,GAAA,CAAI,CAACpG,CAAAA,CAAK7K,CAAAA,GAAM,CAClC,IAAMpE,CAAAA,CAAKoE,CAAAA,EAAKiR,CAAAA,CAAK,OAAS,CAAA,CAAA,CAAM,GAAA,CAK9BpV,CAAAA,CAAI,EAAA,CAAA,CADWgP,CAAAA,CAAM7D,CAAAA,EAAOmsB,CAAAA,CACL,EAAA,CAC7B,OAAO,CAAE,CAAA,CAAAv3B,CAAAA,CAAG,CAAA,CAAAC,CAAE,CAChB,CAAC,EAEGkO,CAAAA,CAAI,EAAA,CACR,GAAIwlB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAG,CACrBxlB,CAAAA,CAAI,CAAA,EAAA,EAAKwlB,CAAAA,CAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAO,CAAC,EAAG,CAAC,CAAA,CAAA,CAErC,IAAA,IAASvvB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIuvB,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAGvvB,CAAAA,EAAAA,CAAK,CAC1C,IAAM+vB,CAAAA,CAAKR,CAAAA,CAAOvvB,CAAC,CAAA,CACbgwB,EAAKT,CAAAA,CAAOvvB,CAAAA,CAAI,CAAC,CAAA,CACjBiwB,CAAAA,CAAOF,CAAAA,CAAG,CAAA,CAAA,CAAKC,CAAAA,CAAG,CAAA,CAAID,CAAAA,CAAG,CAAA,EAAK,CAAA,CAC9BG,CAAAA,CAAOH,CAAAA,CAAG,CAAA,CACVI,CAAAA,CAAOJ,EAAG,CAAA,CAAA,CAAKC,CAAAA,CAAG,CAAA,CAAID,CAAAA,CAAG,CAAA,EAAK,CAAA,CAC9BK,CAAAA,CAAOJ,CAAAA,CAAG,CAAA,CAChBjmB,CAAAA,EAAK,CAAA,GAAA,EAAMkmB,CAAI,CAAA,CAAA,EAAIC,CAAI,CAAA,EAAA,EAAKC,CAAI,IAAIC,CAAI,CAAA,EAAA,EAAKJ,CAAAA,CAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,CAAC,CAAA,EAC3D,CACF,CAEA,IAAMoD,CAAAA,CAAWJ,CAAAA,CACb,CAAA,EAAGjpB,CAAC,CAAA,oBAAA,CAAA,CACJ,OAEJ,OACE1P,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CAAG,wBAAA,CAA0BO,CAAS,CAAA,CACjD,KAAA,CAAO,CAAE,MAAA,CAAA6Z,CAAO,CAAA,CACf,GAAG1Z,CAAAA,CAEJ,QAAA,CAAAE,KAAC,KAAA,CAAA,CACC,KAAA,CAAM,MAAA,CACN,MAAA,CAAO,MAAA,CACP,OAAA,CAAQ,aAAA,CACR,mBAAA,CAAoB,MAAA,CACpB,SAAA,CAAU,kBAAA,CAET,QAAA,CAAA,CAAA44B,CAAAA,EACC34B,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAG+4B,EACH,IAAA,CAAMtD,CAAAA,CACN,WAAA,CAAa,EAAA,CACb,MAAA,CAAO,MAAA,CACT,CAAA,CAEFz1B,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAG0P,CAAAA,CACH,IAAA,CAAK,MAAA,CACL,MAAA,CAAQ+lB,CAAAA,CACR,WAAA,CAAaD,EACb,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,YAAA,CAAa,oBAAA,CACf,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CC9FO,SAASwD,EAAAA,CAAW,CAAE,MAAAC,CAAAA,CAAQ,CAAA,CAAG,MAAA,CAAAC,CAAAA,CAAUxd,CAAAA,EAAMA,CAAAA,CAAE,QAAA,EAAW,CAAA,CAAe,CAClF,GAAM,CAAE,MAAA,CAAAnC,CAAAA,CAAQ,OAAA,CAAA/P,CAAAA,CAAS,SAAAqqB,CAAS,CAAA,CAAIR,EAAAA,EAAS,CACzCW,CAAAA,CAAcza,CAAAA,CAAS/P,CAAAA,CAAQ,GAAA,CAAMA,CAAAA,CAAQ,MAAA,CAEnD,OACExJ,GAAAA,CAAC,GAAA,CAAA,CACE,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,OAAQi5B,CAAAA,CAAQ,CAAE,CAAC,CAAA,CAAE,GAAA,CAAI,CAACrtB,CAAAA,CAAGjG,CAAAA,GAAM,CAC/C,IAAM1D,CAAAA,CAAS4xB,CAAAA,CAAWoF,CAAAA,CAAStzB,CAAAA,CAC7BnE,CAAAA,CAAI+X,CAAAA,CAAS/P,EAAQ,MAAA,CAAUwqB,CAAAA,CAAciF,CAAAA,CAAStzB,CAAAA,CAE5D,OACE3F,GAAAA,CAAC,MAAA,CAAA,CAEC,CAAA,CAAGwJ,CAAAA,CAAQ,IAAA,CAAO,EAAA,CAClB,CAAA,CAAGhI,CAAAA,CACH,UAAA,CAAW,KAAA,CACX,gBAAA,CAAiB,SACjB,SAAA,CAAU,sDAAA,CAET,QAAA,CAAA03B,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMj3B,CAAK,CAAC,CAAA,CAAA,CAPpB0D,CAQP,CAEJ,CAAC,CAAA,CACH,CAEJ,CCzBA,IAAMwzB,EAAAA,CAAcrvB,aAAAA,CAA4C,MAAS,CAAA,CASlE,SAASsvB,EAAAA,CAAK,CACnB,YAAA,CAAAlyB,CAAAA,CACA,KAAA,CAAAjF,CAAAA,CACA,aAAA,CAAA8I,CAAAA,CACA,SAAA,CAAArL,CAAAA,CACA,QAAA,CAAAD,CAAAA,CACA,GAAGI,CACL,CAAA,CAAc,CACZ,GAAM,CAACyH,EAAeC,CAAgB,CAAA,CAAInD,QAAAA,CAAS8C,CAAY,CAAA,CAEzDqE,CAAAA,CAAqBzE,CAAAA,EAAqB,CAC1C7E,CAAAA,GAAU,MAAA,EACZsF,CAAAA,CAAiBT,CAAQ,CAAA,CAE3BiE,CAAAA,GAAgBjE,CAAQ,EAC1B,EAEMc,CAAAA,CAAe3F,CAAAA,GAAU,MAAA,CAAYA,CAAAA,CAAQqF,CAAAA,CAEnD,OACEtH,GAAAA,CAACm5B,EAAAA,CAAY,QAAA,CAAZ,CAAqB,KAAA,CAAO,CAAE,KAAA,CAAOvxB,CAAAA,CAAc,aAAA,CAAe2D,CAAkB,EACnF,QAAA,CAAAvL,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,QAAA,CAAUO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC1C,QAAA,CAAAJ,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAAS45B,GAAS,CAAE,SAAA,CAAA35B,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAkB,CACzE,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,SAAA,CACL,SAAA,CAAWb,CAAAA,CACT,iIACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAOO,SAAS65B,EAAAA,CAAY,CAAE,SAAA,CAAA55B,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAxC,EAAU,GAAGI,CAAM,CAAA,CAAqB,CACtF,IAAMyK,CAAAA,CAAUC,UAAAA,CAAW4uB,EAAW,CAAA,CACtC,GAAI,CAAC7uB,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,sCAAsC,EAEpE,IAAMmC,CAAAA,CAAWnC,CAAAA,CAAQ,KAAA,GAAUrI,CAAAA,CAEnC,OACEjC,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,KAAA,CACL,eAAA,CAAeyM,CAAAA,CACf,eAAA,CAAe,CAAA,aAAA,EAAgBxK,CAAK,CAAA,CAAA,CACpC,EAAA,CAAI,CAAA,aAAA,EAAgBA,CAAK,CAAA,CAAA,CACzB,OAAA,CAAS,IAAMqI,CAAAA,CAAQ,aAAA,CAAcrI,CAAK,CAAA,CAC1C,SAAA,CAAW9C,CAAAA,CACT,4VAAA,CACAsN,CAAAA,CACI,6FAAA,CACA,yFACJ/M,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAOO,SAAS85B,EAAAA,CAAY,CAAE,SAAA,CAAA75B,CAAAA,CAAW,KAAA,CAAAuC,CAAAA,CAAO,QAAA,CAAAxC,EAAU,GAAGI,CAAM,CAAA,CAAqB,CACtF,IAAMyK,CAAAA,CAAUC,UAAAA,CAAW4uB,EAAW,CAAA,CACtC,GAAI,CAAC7uB,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,sCAAsC,EAEpE,OAAIA,CAAAA,CAAQ,KAAA,GAAUrI,CAAAA,CAAc,IAAA,CAGlCjC,GAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,EAAA,CAAI,CAAA,aAAA,EAAgBiC,CAAK,CAAA,CAAA,CACzB,iBAAA,CAAiB,CAAA,aAAA,EAAgBA,CAAK,GACtC,QAAA,CAAU,CAAA,CACV,SAAA,CAAW9C,CAAAA,CACT,gIAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CCpHO,IAAM+5B,EAAAA,CAAUh6B,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,EAAGC,CAAAA,GAEhCE,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,oFAAA,CACA,6BAAA,CACA,uCAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAIag6B,EAAAA,CAAgBj6B,WAAAA,CAAM,UAAA,CACjC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,0EAAA,CAA4EO,CAAS,CAAA,CAClG,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAIai6B,EAAAA,CAAiBl6B,WAAAA,CAAM,UAAA,CAClC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,4CAAA,CAA8CO,CAAS,CAAA,CACpE,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAIak6B,EAAAA,CAAgBn6B,WAAAA,CAAM,UAAA,CACjC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,kDAAA,CAAoDO,CAAS,CAAA,CAC1E,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAGN,CAAA,CAQam6B,EAAAA,CAAcp6B,WAAAA,CAAM,UAAA,CAC/B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,MAAA,CAAAo6B,CAAAA,CAAQ,IAAA,CAAA73B,CAAAA,CAAM,KAAA,CAAA83B,CAAAA,CAAO,GAAGj6B,CAAM,CAAA,CAAGC,CAAAA,GAErDC,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,4FAAA,CACA,wFAAA,CACA06B,CAAAA,CACI,gEAAA,CACA,kCAAA,CACJn6B,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAA,CAAAmC,CAAAA,EAAQhC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CAAG,0CAAA,CAA4C06B,CAAAA,CAAS,+BAAA,CAAkC,kCAAkC,CAAA,CAAI,QAAA,CAAA73B,CAAAA,CAAK,CAAA,CAC/JhC,GAAAA,CAAC,QAAK,SAAA,CAAU,kBAAA,CAAoB,QAAA,CAAAP,CAAAA,CAAS,CAAA,CAC5Cq6B,CAAAA,EACC95B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uJAAA,CACb,QAAA,CAAA85B,CAAAA,CACH,CAAA,CAAA,CAEJ,CAGN,CAAA,CAMaC,EAAAA,CAAev6B,YAAM,UAAA,CAChC,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,KAAA,CAAAwG,CAAAA,CAAO,GAAGpG,CAAM,CAAA,CAAGC,CAAAA,GAEvCC,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKD,EAAK,SAAA,CAAWX,CAAAA,CAAG,MAAA,CAAQO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAClD,QAAA,CAAA,CAAAoG,CAAAA,EACCjG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2FAAA,CACZ,QAAA,CAAAiG,CAAAA,CACH,CAAA,CAEFjG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CAAa,QAAA,CAAAP,CAAAA,CAAS,CAAA,CAAA,CACvC,CAGN,EC9GA,IAAMu6B,EAAAA,CAAkB,CACtB,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,kBACJ,EAAA,CAAI,iBAAA,CACJ,KAAA,CAAO,kBAAA,CACP,IAAA,CAAM,YACR,CAAA,CAEO,SAASC,EAAAA,CAAO,CACrB,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,EAAC,CACT,QAAAC,CAAAA,CACA,SAAA,CAAA16B,CAAAA,CACA,QAAA,CAAA26B,CAAAA,CAAW,IACb,CAAA,CAAgB,CACd,GAAM,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAIn2B,QAAAA,CAAS,KAAK,CAAA,CAC5C,CAACo2B,CAAAA,CAAkBC,CAAmB,CAAA,CAAIr2B,QAAAA,CAAS,KAAK,CAAA,CAE9D,OAAAI,SAAAA,CAAU,IAAM,CACd,IAAMyU,CAAAA,CAAe,IAAM,CACzBshB,CAAAA,CAAc,MAAA,CAAO,QAAU,EAAE,EACnC,CAAA,CACA,OAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUthB,CAAY,CAAA,CACvC,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,CAChE,CAAA,CAAG,EAAE,CAAA,CAGHjZ,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,uEAAA,CACAm7B,CAAAA,CAAa,MAAA,CAAS,MAAA,CACtB56B,CACF,CAAA,CAEA,QAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,CAAAA,CAAG,sCAAuC66B,EAAAA,CAAgBK,CAAQ,CAAC,CAAA,CACjF,QAAA,CAAA,CAAAt6B,IAAAA,CAAC2C,CAAAA,CAAA,CACC,SAAA,CAAWvD,CAAAA,CACT,yEAAA,CACAm7B,CAAAA,CACI,wFAAA,CACA,kGACN,CAAA,CAGA,QAAA,CAAA,CAAAt6B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAAk6B,CAAAA,EAAQl6B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oCAAA,CAAqC,QAAA,CAAA,OAAA,CAAK,CAAA,CACrE,CAAA,CAGAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACZ,SAAAm6B,CAAAA,CAAM,GAAA,CAAKO,CAAAA,EACV16B,GAAAA,CAAC,GAAA,CAAA,CAEC,IAAA,CAAM06B,CAAAA,CAAK,IAAA,CACX,SAAA,CAAU,kHAAA,CAET,QAAA,CAAAA,CAAAA,CAAK,KAAA,CAAA,CAJDA,CAAAA,CAAK,KAKZ,CACD,EACH,CAAA,CAGA36B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACZ,QAAA,CAAAo6B,CAAAA,CACH,CAAA,CAEAp6B,GAAAA,CAAC,QAAA,CAAA,CACC,SAAA,CAAU,4HACV,OAAA,CAAS,IAAMy6B,CAAAA,CAAoB,CAACD,CAAgB,CAAA,CAEnD,QAAA,CAAAA,CAAAA,CAAmBx6B,GAAAA,CAAC+R,CAAAA,CAAA,CAAE,IAAA,CAAM,EAAA,CAAI,CAAA,CAAK/R,GAAAA,CAAC26B,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACxD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGA36B,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAq7B,CAAAA,CACI,qCAAA,CACA,uDACN,CAAA,CAEA,QAAA,CAAAz6B,KAAC2C,CAAAA,CAAA,CAAQ,SAAA,CAAU,sGAAA,CAChB,QAAA,CAAA,CAAAy3B,CAAAA,CAAM,GAAA,CAAKO,CAAAA,EACV16B,GAAAA,CAAC,GAAA,CAAA,CAEC,IAAA,CAAM06B,CAAAA,CAAK,IAAA,CACX,SAAA,CAAU,oLAAA,CACV,OAAA,CAAS,IAAMD,CAAAA,CAAoB,KAAK,CAAA,CAEvC,QAAA,CAAAC,CAAAA,CAAK,KAAA,CAAA,CALDA,CAAAA,CAAK,KAMZ,CACD,CAAA,CACD16B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wEAAA,CACZ,QAAA,CAAAo6B,CAAAA,CACH,GACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CC9GA,IAAMQ,GAAsB9wB,aAAAA,CAAoD,MAAS,CAAA,CAMlF,SAAS+wB,EAAAA,CAAa,CAAE,QAAA,CAAAp7B,CAAS,CAAA,CAAsB,CAC5D,GAAM,CAAC2H,CAAAA,CAAQC,CAAS,CAAA,CAAIjD,QAAAA,CAAS,KAAK,CAAA,CACpCoE,CAAAA,CAAatH,MAAAA,CAAoB,IAAI,CAAA,CAE3C,OACElB,GAAAA,CAAC46B,EAAAA,CAAoB,QAAA,CAApB,CAA6B,KAAA,CAAO,CAAE,MAAA,CAAAxzB,CAAAA,CAAQ,SAAA,CAAAC,CAAAA,CAAW,WAAAmB,CAAW,CAAA,CACnE,QAAA,CAAAxI,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAAA,CACZ,QAAA,CAAAP,CAAAA,CACH,CAAA,CACF,CAEJ,CAMO,SAASq7B,EAAAA,CAAoB,CAAE,SAAA,CAAAp7B,EAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA6B,CAC/F,IAAMyK,CAAAA,CAAUC,UAAAA,CAAWqwB,EAAmB,CAAA,CAC9C,GAAI,CAACtwB,CAAAA,CAAS,MAAM,IAAI,MAAM,sDAAsD,CAAA,CAEpF,IAAMzD,CAAAA,CAAezF,CAAAA,EAAwB,CAC3CkJ,CAAAA,CAAQ,SAAA,CAAU,CAACA,CAAAA,CAAQ,MAAM,CAAA,CACjCzK,CAAAA,CAAM,OAAA,GAAUuB,CAAQ,EAC1B,EAEA,OACEpB,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKsK,CAAAA,CAAQ,UAAA,CACb,IAAA,CAAK,QAAA,CACL,eAAA,CAAc,MAAA,CACd,eAAA,CAAeA,CAAAA,CAAQ,MAAA,CAAS,MAAA,CAAS,OAAA,CACzC,OAAA,CAASzD,EACT,SAAA,CAAW1H,CAAAA,CAAG,yCAAA,CAA2CO,CAAS,CAAA,CACjE,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAQO,SAASs7B,EAAAA,CAAoB,CAAE,SAAA,CAAAr7B,CAAAA,CAAW,SAAAD,CAAAA,CAAU,KAAA,CAAAkJ,CAAAA,CAAQ,OAAA,CAAS,IAAA,CAAAD,CAAAA,CAAO,QAAA,CAAU,GAAG7I,CAAM,CAAA,CAA6B,CACjI,IAAMyK,CAAAA,CAAUC,UAAAA,CAAWqwB,EAAmB,CAAA,CAC9C,GAAI,CAACtwB,CAAAA,CAAS,MAAM,IAAI,KAAA,CAAM,sDAAsD,CAAA,CAEpF,IAAM7B,CAAAA,CAAavH,MAAAA,CAAuB,IAAI,CAAA,CACxC,CAAE,QAAA,CAAA4H,CAAAA,CAAU,YAAA,CAAAE,CAAa,CAAA,CAAIT,EAAAA,CAAY+B,CAAAA,CAAQ,UAAA,CAAY7B,CAAAA,CAAY,CAC7E,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ2B,CAAAA,CAAQ,MAClB,CAAC,CAAA,CAgDD,GA9CA9F,UAAU,IAAM,CACd,GAAI8F,CAAAA,CAAQ,MAAA,CAAQ,CAClB,IAAMG,CAAAA,CAAsBrJ,CAAAA,EAAkB,CAE1CqH,CAAAA,CAAW,OAAA,EACX,CAACA,CAAAA,CAAW,OAAA,CAAQ,QAAA,CAASrH,EAAE,MAAc,CAAA,EAC7CkJ,CAAAA,CAAQ,UAAA,CAAW,OAAA,EACnB,CAACA,CAAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,QAAA,CAASlJ,CAAAA,CAAE,MAAc,CAAA,EAErDkJ,CAAAA,CAAQ,SAAA,CAAU,KAAK,EAE3B,CAAA,CAEMlC,CAAAA,CAAiBhH,CAAAA,EAAqB,CAM1C,GALIA,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACZkJ,CAAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,CACvBA,CAAAA,CAAQ,UAAA,CAAW,OAAA,EAAS,KAAA,IAG1BlJ,CAAAA,CAAE,GAAA,GAAQ,WAAA,EAAeA,CAAAA,CAAE,GAAA,GAAQ,SAAA,CAAW,CAChDA,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAMiK,CAAAA,CAAQ5C,CAAAA,CAAW,OAAA,EAAS,gBAAA,CAAiB,mBAAmB,EACtE,GAAI,CAAC4C,CAAAA,CAAM,MAAA,CAAQ,OAEnB,IAAM2vB,CAAAA,CAAe,KAAA,CAAM,IAAA,CAAK3vB,CAAK,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAS,aAA4B,CAAA,CAChF4vB,CAAAA,CAAY,EAEZ75B,CAAAA,CAAE,GAAA,GAAQ,WAAA,CACZ65B,CAAAA,CAAAA,CAAaD,CAAAA,CAAe,CAAA,EAAK3vB,CAAAA,CAAM,MAAA,CAEvC4vB,CAAAA,CAAAA,CAAaD,CAAAA,CAAe,CAAA,CAAI3vB,CAAAA,CAAM,MAAA,EAAUA,CAAAA,CAAM,MAAA,CAGxDA,CAAAA,CAAM4vB,CAAS,CAAA,EAAG,KAAA,GACpB,CACF,CAAA,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaxwB,CAAkB,CAAA,CACzD,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWrC,CAAa,CAAA,CAC3C,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaqC,CAAkB,CAAA,CAC5D,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWrC,CAAa,EACvD,CACF,CACF,CAAA,CAAG,CAACkC,CAAAA,CAAQ,MAAA,CAAQA,EAAQ,SAAA,CAAWA,CAAAA,CAAQ,UAAU,CAAC,CAAA,CAEtD,CAACA,CAAAA,CAAQ,MAAA,CAAQ,OAAO,IAAA,CAE5B,IAAMI,CAAAA,CAAqB,IACrBhC,CAAAA,GAAS,QAAA,CACPC,CAAAA,GAAU,QAAgB,UAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,WAAA,CACrB,YAAA,CAELD,CAAAA,GAAS,KAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,aAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,cAAA,CACrB,eAAA,CAELD,CAAAA,GAAS,MAAA,CACPC,IAAU,OAAA,CAAgB,WAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,cAAA,CACrB,cAAA,CAELD,CAAAA,GAAS,OAAA,CACPC,CAAAA,GAAU,OAAA,CAAgB,UAAA,CAC1BA,CAAAA,GAAU,KAAA,CAAc,aAAA,CACrB,aAAA,CAEF,eAAA,CAGT,OAAOgC,YAAAA,CACL3K,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKyI,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,kBAAA,CAAiB,UAAA,CACjB,KAAA,CAAO,CACL,GAAA,CAAKK,CAAAA,CAAS,GAAA,CACd,IAAA,CAAMA,CAAAA,CAAS,KACf,eAAA,CAAiB4B,CAAAA,EACnB,CAAA,CACA,SAAA,CAAWvL,CAAAA,CACT,iLAAA,CACA6J,CAAAA,CAAe,2CAAA,CAA8C,WAAA,CAC7DtJ,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,EACA,QAAA,CAAS,IACX,CACF,CAMO,SAASy7B,EAAAA,CAAiB,CAAE,SAAA,CAAAx7B,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA0B,CACzF,IAAMyK,EAAUC,UAAAA,CAAWqwB,EAAmB,CAAA,CAO9C,OACE56B,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,UAAA,CACL,OAAA,CATiBoB,CAAAA,EAAwB,CAC3CkJ,CAAAA,EAAS,SAAA,CAAU,KAAK,EACxBzK,CAAAA,CAAM,OAAA,GAAUuB,CAAQ,EAC1B,CAAA,CAOI,SAAA,CAAWjC,CAAAA,CACT,2HAAA,CACA,kCAAA,CACA,wFAAA,CACA,wFAAA,CACA,gEAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,SAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS07B,EAAAA,CAAkB,CAAE,SAAA,CAAAz7B,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACzG,OACEG,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,iEAAA,CAAmEO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACnG,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS27B,EAAAA,CAAsB,CAAE,SAAA,CAAA17B,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAyC,CACnG,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,kDAAA,CAAoDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CAElG,CC7LO,SAASw7B,EAAAA,CAAS,CACvB,IAAA,CAAAp0B,CAAAA,CACA,WAAA,CAAAgM,CAAAA,CACA,SAAA,CAAAqoB,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,SAAA,CAAA77B,CAAAA,CACA,KAAAgJ,CAAAA,CAAO,KAAA,CACP,KAAA,CAAAC,CAAAA,CAAQ,OACV,CAAA,CAAkB,CAChB,OACE5I,IAAAA,CAAC86B,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA76B,GAAAA,CAAC86B,EAAAA,CAAA,CAAoB,SAAA,CAAW37B,EAAG,qBAAA,CAAuBO,CAAS,CAAA,CACjE,QAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6LAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAACgb,CAAAA,CAAA,CAAO,GAAA,CAAKsgB,CAAAA,CAAW,QAAA,CAAUC,CAAAA,EAAkBt0B,EAAK,MAAA,CAAO,CAAC,CAAA,CAAG,IAAA,CAAK,IAAA,CAAK,CAAA,CAC9ElH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mDAAA,CAAqD,QAAA,CAAAiH,EAAK,CAAA,CACzEgM,CAAAA,EAAejT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CAAgD,QAAA,CAAAiT,CAAAA,CAAY,CAAA,CAAA,CAC9F,CAAA,CACAjT,GAAAA,CAACw7B,QAAAA,CAAA,CAAS,SAAA,CAAU,kHAAA,CAAmH,CAAA,CAAA,CACzI,EACF,CAAA,CACAz7B,IAAAA,CAACg7B,EAAAA,CAAA,CAAoB,SAAA,CAAU,MAAA,CAAO,KAAA,CAAOpyB,CAAAA,CAAO,IAAA,CAAMD,CAAAA,CACxD,QAAA,CAAA,CAAA1I,GAAAA,CAACm7B,EAAAA,CAAA,CAAkB,QAAA,CAAA,YAAA,CAAU,CAAA,CAC7Bn7B,IAACo7B,EAAAA,CAAA,EAAsB,CAAA,CACvBr7B,IAAAA,CAACm7B,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAl7B,GAAAA,CAACy7B,IAAAA,CAAA,CAAK,SAAA,CAAU,cAAA,CAAe,CAAA,CAC/Bz7B,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,SAAA,CAAO,GACf,CAAA,CACAD,IAAAA,CAACm7B,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAl7B,GAAAA,CAACw7B,QAAAA,CAAA,CAAS,SAAA,CAAU,cAAA,CAAe,CAAA,CACnCx7B,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,CAAA,CACAA,GAAAA,CAACo7B,EAAAA,CAAA,EAAsB,CAAA,CACvBr7B,IAAAA,CAACm7B,EAAAA,CAAA,CAAiB,SAAA,CAAU,mCAAA,CAC1B,QAAA,CAAA,CAAAl7B,GAAAA,CAAC07B,MAAAA,CAAA,CAAO,SAAA,CAAU,cAAA,CAAe,CAAA,CACjC17B,IAAC,MAAA,CAAA,CAAK,QAAA,CAAA,SAAA,CAAO,CAAA,CAAA,CACf,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC5DA,IAAM27B,GAAan8B,WAAAA,CAAM,UAAA,CAKvB,CAAC,CAAE,GAAGK,CAAM,CAAA,CAAGC,CAAAA,GAAQE,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKF,CAAAA,CAAK,YAAA,CAAW,YAAA,CAAc,GAAGD,CAAAA,CAAO,CAAE,EAC7E87B,EAAAA,CAAW,WAAA,CAAc,YAAA,CAEzB,IAAMC,EAAAA,CAAiBp8B,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,IAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,qGAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,CACD,EACD+7B,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,GAAiBr8B,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,mCAAoCO,CAAS,CAAA,CAC1D,GAAGG,CAAAA,CACN,CACD,EACDg8B,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAiBt8B,WAAAA,CAAM,UAAA,CAK3B,CAAC,CAAE,SAAA,CAAAE,EAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAExBE,GAAAA,CAAC,GAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,6DAAA,CAA+DO,CAAS,CAAA,CACrF,GAAGG,CAAAA,CACN,CAEH,EACDi8B,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAiBv8B,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,QACC,GAAA,CAAKF,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,eAAA,CAAc,MAAA,CACd,cAAA,CAAa,MAAA,CACb,SAAA,CAAWX,CAAAA,CAAG,2CAAA,CAA6CO,CAAS,CAAA,CACnE,GAAGG,CAAAA,CACN,CACD,EACDk8B,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAsB,CAAC,CAC3B,QAAA,CAAAv8B,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,GAAGG,CACL,CAAA,GACEG,GAAAA,CAAC,IAAA,CAAA,CACC,KAAK,cAAA,CACL,aAAA,CAAY,MAAA,CACZ,SAAA,CAAWb,CAAAA,CAAG,kBAAA,CAAoBO,CAAS,CAAA,CAC1C,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,EACCO,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,MAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,UAEV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,eAAA,CAAgB,CAAA,CAC1B,CAAA,CAEJ,EAEFg8B,EAAAA,CAAoB,WAAA,CAAc,qBAAA,CAElC,IAAMC,EAAAA,CAAqB,CAAC,CAC1B,SAAA,CAAAv8B,EACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAAC,MAAA,CAAA,CACC,IAAA,CAAK,cAAA,CACL,aAAA,CAAY,MAAA,CACZ,SAAA,CAAWZ,CAAAA,CAAG,0CAAA,CAA4CO,CAAS,CAAA,CAClE,GAAGG,CAAAA,CAEJ,UAAAE,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,cAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,SAAA,CAEV,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,UAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,CAC/B,EACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,QAAA,CAAA,MAAA,CAAI,CAAA,CAAA,CAChC,EAEFi8B,EAAAA,CAAmB,WAAA,CAAc,oBAAA,CCpH1B,SAASC,EAAAA,CAAc,CAC5B,UAAAC,CAAAA,CAAY,cAAA,CACZ,SAAA,CAAAz8B,CAAAA,CACA,QAAA,CAAAD,CAAAA,CAAW,iBACb,CAAA,CAAuB,CACrB,OACEO,GAAAA,CAAC,GAAA,CAAA,CACC,IAAA,CAAM,CAAA,CAAA,EAAIm8B,CAAS,CAAA,CAAA,CACnB,UAAWh9B,CAAAA,CACT,8OAAA,CACAO,CACF,CAAA,CAEC,QAAA,CAAAD,CAAAA,CACH,CAEJ,KCzBM28B,EAAAA,CAAa,CAAC,CAAE,SAAA,CAAA18B,CAAAA,CAAW,GAAGG,CAAM,CAAA,GACxCG,GAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,YAAA,CACL,YAAA,CAAW,YAAA,CACX,SAAA,CAAWb,CAAAA,CAAG,qCAAsCO,CAAS,CAAA,CAC5D,GAAGG,CAAAA,CACN,EAEFu8B,EAAAA,CAAW,WAAA,CAAc,YAAA,CAEzB,IAAMC,EAAAA,CAAoB78B,WAAAA,CAAM,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,kCAAA,CAAoCO,CAAS,CAAA,CAC1D,GAAGG,CAAAA,CACN,CACD,EACDw8B,GAAkB,WAAA,CAAc,mBAAA,CAEhC,IAAMC,EAAAA,CAAiB98B,WAAAA,CAAM,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAC1BE,GAAAA,CAAC,IAAA,CAAA,CAAG,IAAKF,CAAAA,CAAK,SAAA,CAAWX,CAAAA,CAAG,EAAA,CAAIO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAAO,CACxD,EACDy8B,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAM7B,IAAMC,EAAAA,CAAiB,CAAC,CACtB,SAAA,CAAA78B,CAAAA,CACA,QAAA,CAAA+M,CAAAA,CACA,GAAG5M,CACL,CAAA,GACEG,GAAAA,CAAC,GAAA,CAAA,CACC,cAAA,CAAcyM,CAAAA,CAAW,MAAA,CAAS,MAAA,CAClC,SAAA,CAAWtN,CAAAA,CACT,mGAAA,CACA,yFACAsN,CAAAA,CAAW,gEAAA,CAAmE,kCAAA,CAC9E/M,CACF,CAAA,CACC,GAAGG,CAAAA,CACN,EAEF08B,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAqB,CAAC,CAC1B,SAAA,CAAA98B,EACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAACw8B,EAAAA,CAAA,CACC,YAAA,CAAW,qBAAA,CACX,SAAA,CAAWp9B,CAAAA,CAAG,qBAAA,CAAuBO,CAAS,CAAA,CAC7C,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,IAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,QACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,SAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,gBAAA,CAAiB,CAAA,CAC3B,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,EAEFw8B,GAAmB,WAAA,CAAc,oBAAA,CAEjC,IAAMC,EAAAA,CAAiB,CAAC,CACtB,SAAA,CAAA/8B,CAAAA,CACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAACw8B,EAAAA,CAAA,CACC,YAAA,CAAW,iBAAA,CACX,UAAWp9B,CAAAA,CAAG,qBAAA,CAAuBO,CAAS,CAAA,CAC7C,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,MAAA,CAAI,CAAA,CACVA,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,4BAAA,CACN,KAAA,CAAM,KACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAU,SAAA,CAEV,SAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,eAAA,CAAgB,CAAA,CAC1B,CAAA,CAAA,CACF,EAEFy8B,EAAAA,CAAe,WAAA,CAAc,gBAAA,CAE7B,IAAMC,EAAAA,CAAqB,CAAC,CAC1B,SAAA,CAAAh9B,CAAAA,CACA,GAAGG,CACL,CAAA,GACEE,IAAAA,CAAC,MAAA,CAAA,CACC,aAAA,CAAW,IAAA,CACX,SAAA,CAAWZ,CAAAA,CAAG,0CAAA,CAA4CO,CAAS,CAAA,CAClE,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CACC,MAAM,4BAAA,CACN,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,QACf,SAAA,CAAU,SAAA,CAEV,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,GAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,GAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,CAC/B,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,SAAA,CAAU,QAAA,CAAA,YAAA,CAAU,CAAA,CAAA,CACtC,EAEF08B,EAAAA,CAAmB,WAAA,CAAc,oBAAA,CCjI1B,IAAMC,EAAAA,CAAU,CAAC,CAAE,KAAA,CAAAzvB,CAAAA,CAAO,WAAA,CAAA0vB,CAAAA,CAAa,SAAA,CAAAl9B,CAAAA,CAAW,WAAA,CAAAm9B,CAAY,CAAA,GAEjE78B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,wCAAA,CAA0CO,CAAS,CAAA,CACnE,QAAA,CAAAwN,CAAAA,CAAM,GAAA,CAAI,CAACL,CAAAA,CAAM9E,CAAAA,GAAU,CAC1B,IAAM+0B,CAAAA,CAAcF,CAAAA,CAAc70B,CAAAA,CAC5Bg1B,CAAAA,CAAYH,CAAAA,GAAgB70B,EAC5Bi1B,CAAAA,CAAc,CAAC,CAACH,CAAAA,CAEtB,OACE98B,IAAAA,CAAC,KAAA,CAAA,CAEC,SAAA,CAAWZ,CAAAA,CACT,iEAAA,CACA69B,CAAAA,EAAe,gBACjB,CAAA,CACA,OAAA,CAAS,IAAMA,CAAAA,EAAeH,EAAY90B,CAAK,CAAA,CAE/C,QAAA,CAAA,CAAAhI,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mBAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,EACT,wGAAA,CACA29B,CAAAA,CACI,8EAAA,CACAC,CAAAA,CACA,uEAAA,CACA,uEACN,CAAA,CAEC,QAAA,CAAAD,CAAAA,CAAc98B,GAAAA,CAACsmB,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,CAAA,CAAKve,CAAAA,CAAQ,EACzD,CAAA,CAECA,CAAAA,CAAQmF,CAAAA,CAAM,MAAA,CAAS,CAAA,EACtBlN,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,6DAAA,CACA29B,CAAAA,EAAe,8BACjB,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAEA/8B,IAAAA,CAAC,OAAI,SAAA,CAAU,eAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWb,CAAAA,CACf,qBAAA,CACA49B,CAAAA,EAAaD,CAAAA,CAAc,+BAAA,CAAkC,kCAC/D,CAAA,CACG,QAAA,CAAAjwB,CAAAA,CAAK,KAAA,CACR,EACCA,CAAAA,CAAK,WAAA,EACJ7M,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0DAAA,CACb,QAAA,CAAA6M,CAAAA,CAAK,WAAA,CACR,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAGC9E,CAAAA,CAAQmF,CAAAA,CAAM,MAAA,CAAS,CAAA,EACtBlN,IAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,8DAAA,CACA29B,CAAAA,EAAe,8BACjB,CAAA,CACF,CAAA,CAAA,CAAA,CAtDG/0B,CAwDP,CAEJ,CAAC,CAAA,CACH,ECzDG,SAASk1B,EAAAA,CAAc,CAC5B,MAAA,CAAA71B,CAAAA,CACA,OAAA,CAAAof,CAAAA,CACA,SAAA,CAAA0W,CAAAA,CACA,KAAA,CAAAj4B,EACA,WAAA,CAAAgO,CAAAA,CACA,WAAA,CAAAkqB,CAAAA,CAAc,SAAA,CACd,UAAA,CAAAC,CAAAA,CAAa,QAAA,CACb,OAAA,CAAA38B,CAAAA,CAAU,SAAA,CACV,SAAA,CAAAK,CAAAA,CAAY,KACd,CAAA,CAAuB,CACrB,OACEf,IAAAA,CAACwmB,EAAAA,CAAA,CAAM,MAAA,CAAQnf,CAAAA,CAAQ,OAAA,CAASof,CAAAA,CAC9B,QAAA,CAAA,CAAAxmB,GAAAA,CAAC4mB,EAAAA,CAAA,CACC,QAAA,CAAA7mB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,UAAAU,CAAAA,GAAY,QAAA,EACXT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sFAAA,CACb,QAAA,CAAAA,GAAAA,CAACq9B,aAAAA,CAAA,CAAc,SAAA,CAAU,SAAA,CAAU,CAAA,CACrC,CAAA,CAEFr9B,GAAAA,CAACqD,EAAAA,CAAA,CAAQ,EAAA,CAAG,IAAA,CAAM,QAAA,CAAA4B,CAAAA,CAAM,CAAA,CAAA,CAC1B,CAAA,CACF,CAAA,CAEAjF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,MAAA,CACb,QAAA,CAAAA,GAAAA,CAACiD,EAAAA,CAAA,CAAK,SAAA,CAAU,mCACb,QAAA,CAAAgQ,CAAAA,CACH,CAAA,CACF,CAAA,CAEAlT,IAAAA,CAAC8mB,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA7mB,GAAAA,CAACQ,CAAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAASgmB,CAAAA,CAAS,QAAA,CAAU1lB,EACjD,QAAA,CAAAs8B,CAAAA,CACH,CAAA,CACAp9B,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAASC,CAAAA,GAAY,QAAA,CAAW,QAAA,CAAW,SAAA,CAC3C,OAAA,CAASy8B,CAAAA,CACT,SAAA,CAAWp8B,CAAAA,CAEV,QAAA,CAAAq8B,EACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCvDO,SAASG,EAAAA,CAAO,CAAE,MAAA,CAAAl2B,CAAAA,CAAQ,OAAA,CAAAof,CAAAA,CAAS,QAAA,CAAA/mB,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAgB,CAC5E,IAAM+mB,CAAAA,CAAYvlB,MAAAA,CAA0B,IAAI,CAAA,CAEhD,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAMkiB,CAAAA,CAASD,CAAAA,CAAU,OAAA,CACpBC,CAAAA,GAEDtf,CAAAA,CACGsf,CAAAA,CAAO,IAAA,EACVA,EAAO,SAAA,EAAU,CAGfA,CAAAA,CAAO,IAAA,EACTA,CAAAA,CAAO,KAAA,EAAM,EAGnB,CAAA,CAAG,CAACtf,CAAM,CAAC,CAAA,CAEX5C,SAAAA,CAAU,IAAM,CACd,IAAMkiB,EAASD,CAAAA,CAAU,OAAA,CACzB,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAgBvlB,CAAAA,EAAa,CACjCA,CAAAA,CAAE,cAAA,EAAe,CACjBolB,CAAAA,GACF,CAAA,CAEA,OAAAE,CAAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUC,CAAY,CAAA,CACvC,IAAMD,CAAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUC,CAAY,CAChE,CAAA,CAAG,CAACH,CAAO,CAAC,CAAA,CAQL7b,aACL3K,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKymB,CAAAA,CACL,OAAA,CATyBrlB,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWqlB,CAAAA,CAAU,OAAA,EACzBD,CAAAA,GAEJ,CAAA,CAMI,SAAA,CAAWrnB,CAAAA,CACT,0FACA,gDAAA,CACAO,CACF,CAAA,CAEA,QAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,kLAAA,CACA,mEACF,CAAA,CAEC,QAAA,CAAA,CAAAM,CAAAA,CACDM,IAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASymB,EACT,SAAA,CAAU,oNAAA,CAEV,QAAA,CAAA,CAAAzmB,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,4BAAA,CAA6B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,eAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,+BAAA,CAC1L,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAI,EAAA,CAAG,IAAA,CAAK,CAAA,CACpCA,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAA,CACtC,CAAA,CACAA,GAAAA,CAAC,QAAK,SAAA,CAAU,SAAA,CAAU,QAAA,CAAA,OAAA,CAAK,CAAA,CAAA,CACjC,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CACF,CAEO,SAASu9B,EAAAA,CAAa,CAAE,SAAA,CAAA79B,CAAAA,CAAW,SAAAD,CAAS,CAAA,CAAyC,CAC1F,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,yDAAA,CAA2DO,CAAS,CAAA,CACpF,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAAS+9B,GAAa,CAAE,SAAA,CAAA99B,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAAyC,CAC1F,OACEO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,oEAAA,CAAsEO,CAAS,CAAA,CAC/F,QAAA,CAAAD,EACH,CAEJ,CAEO,SAASg+B,EAAAA,CAAY,CAAE,SAAA,CAAA/9B,CAAAA,CAAW,QAAA,CAAAD,CAAS,CAAA,CAA6C,CAC7F,OACEO,GAAAA,CAACqD,EAAAA,CAAA,CAAQ,EAAA,CAAG,KAAK,SAAA,CAAWlE,CAAAA,CAAG,mDAAA,CAAqDO,CAAS,CAAA,CAC1F,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEO,SAASi+B,EAAAA,CAAkB,CAAE,SAAA,CAAAh+B,CAAAA,CAAW,QAAA,CAAAD,CAAS,EAA+C,CACrG,OACEO,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAWb,CAAAA,CAAG,0CAAA,CAA4CO,CAAS,CAAA,CACnE,QAAA,CAAAD,CAAAA,CACH,CAEJ,CClGO,SAASk+B,EAAAA,CAAO,CACrB,MAAA,CAAAv2B,CAAAA,CACA,QAAAof,CAAAA,CACA,QAAA,CAAA1d,CAAAA,CAAW,OAAA,CACX,QAAA,CAAArJ,CAAAA,CACA,SAAA,CAAAC,CACF,CAAA,CAAgB,CACd,GAAM,CAAC4M,CAAAA,CAAWuO,CAAY,CAAA,CAAIzW,QAAAA,CAAS,KAAK,CAAA,CAC1C,CAACw5B,CAAAA,CAAcC,CAAe,CAAA,CAAIz5B,QAAAA,CAAS,KAAK,CAAA,CAChDigB,CAAAA,CAAanjB,MAAAA,CAAuB,IAAI,CAAA,CAE9CsD,SAAAA,CAAU,IAAM,CACd,GAAI4C,EACFy2B,CAAAA,CAAgB,IAAI,CAAA,CAEpB,qBAAA,CAAsB,IAAM,CAC1B,qBAAA,CAAsB,IAAM,CAC1BhjB,CAAAA,CAAa,IAAI,EACnB,CAAC,EACH,CAAC,CAAA,CACD,SAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,KAC1B,CACLA,CAAAA,CAAa,KAAK,CAAA,CAClB,IAAM5E,CAAAA,CAAQ,UAAA,CAAW,IAAM,CAC7B4nB,CAAAA,CAAgB,KAAK,CAAA,CACrB,SAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QACjC,CAAA,CAAG,GAAG,CAAA,CACN,OAAO,IAAM,YAAA,CAAa5nB,CAAK,CACjC,CACF,CAAA,CAAG,CAAC7O,CAAM,CAAC,CAAA,CAEX5C,SAAAA,CAAU,IAAM,CACd,IAAM8f,CAAAA,CAAgBljB,CAAAA,EAAqB,CACrCA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUolB,CAAAA,GAC1B,CAAA,CAEA,OAAIpf,CAAAA,EACF,SAAS,gBAAA,CAAiB,SAAA,CAAWkd,CAAY,CAAA,CAG5C,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAY,EACtD,CACF,CAAA,CAAG,CAACld,CAAAA,CAAQof,CAAO,CAAC,CAAA,CAEpB,IAAMjC,CAAAA,CAAuBnjB,CAAAA,EAAwB,CAC/CA,CAAAA,CAAE,MAAA,GAAWijB,CAAAA,CAAW,OAAA,EAC1BmC,CAAAA,GAEJ,CAAA,CAEA,GAAI,CAACoX,CAAAA,CAAc,OAAO,KAE1B,IAAME,CAAAA,CAAkB,CACtB,IAAA,CAAM,uCAAA,CACN,KAAA,CAAO,wCAAA,CACP,MAAA,CAAQ,4DACV,CAAA,CAEMC,CAAAA,CAAmB,CACvB,IAAA,CAAMzxB,CAAAA,CAAY,eAAA,CAAkB,mBAAA,CACpC,MAAOA,CAAAA,CAAY,eAAA,CAAkB,kBAAA,CACrC,MAAA,CAAQA,CAAAA,CAAY,eAAA,CAAkB,kBACxC,CAAA,CAEA,OAAO3B,YAAAA,CACL3K,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKqkB,CAAAA,CACL,OAAA,CAASE,CAAAA,CACT,UAAWplB,CAAAA,CACT,yFAAA,CACAmN,CAAAA,CAAY,aAAA,CAAgB,WAC9B,CAAA,CACA,IAAA,CAAK,QAAA,CACL,YAAA,CAAW,MAAA,CAEX,QAAA,CAAAtM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,uIAAA,CACA2+B,EAAgBh1B,CAAQ,CAAA,CACxBi1B,CAAAA,CAAiBj1B,CAAQ,CAAA,CACzBpJ,CACF,CAAA,CAEC,QAAA,CAAAD,CAAAA,CACH,CAAA,CACF,CAAA,CACA,QAAA,CAAS,IACX,CACF,CAEO,SAASu+B,GAAa,CAAE,SAAA,CAAAt+B,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACpG,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,yDAAA,CAA2DO,CAAS,EAAI,GAAGG,CAAAA,CAC3F,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAASw+B,EAAAA,CAAa,CAAE,SAAA,CAAAv+B,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAAyC,CACpG,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,CAAAA,CAAG,4EAAA,CAA8EO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC9G,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAASy+B,EAAAA,CAAY,CAAE,SAAA,CAAAx+B,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA6C,CACvG,OACEG,GAAAA,CAACqD,EAAAA,CAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,SAAA,CAAWlE,CAAAA,CAAG,oDAAqDO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACjG,QAAA,CAAAJ,CAAAA,CACH,CAEJ,CAEO,SAAS0+B,EAAAA,CAAkB,CAAE,SAAA,CAAAz+B,CAAAA,CAAW,QAAA,CAAAD,CAAAA,CAAU,GAAGI,CAAM,CAAA,CAA+C,CAC/G,OACEG,GAAAA,CAACiD,EAAAA,CAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAW9D,CAAAA,CAAG,SAAA,CAAWO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC5D,QAAA,CAAAJ,EACH,CAEJ,CCxHO,SAAS2+B,EAAAA,CAAQ,CACtB,OAAA,CAAA94B,CAAAA,CACA,QAAA,CAAA7F,CAAAA,CACA,QAAA,CAAAqJ,CAAAA,CAAW,KAAA,CACX,KAAA,CAAAjE,CAAAA,CAAQ,GAAA,CACR,UAAAnF,CACF,CAAA,CAAiB,CACf,GAAM,CAAC4M,CAAAA,CAAWuO,CAAY,CAAA,CAAIzW,QAAAA,CAAS,KAAK,CAAA,CAC1Ci6B,CAAAA,CAAan9B,MAAAA,CAA6C,IAAI,CAAA,CAC9DsH,CAAAA,CAAatH,OAAuB,IAAI,CAAA,CACxCuH,CAAAA,CAAavH,MAAAA,CAAuB,IAAI,CAAA,CAExC,CAAE,QAAA,CAAUo9B,CAAAA,CAAkB,YAAA,CAAAt1B,CAAa,CAAA,CAAIT,EAAAA,CAAYC,CAAAA,CAAYC,CAAAA,CAAY,CACvF,KAAMK,CAAAA,CACN,KAAA,CAAO,QAAA,CACP,UAAA,CAAY,CAAA,CACZ,MAAA,CAAQwD,CACV,CAAC,CAAA,CAEKiyB,CAAAA,CAAc,IAAM,CACpBF,CAAAA,CAAW,OAAA,EAAS,YAAA,CAAaA,CAAAA,CAAW,OAAO,CAAA,CACvDA,CAAAA,CAAW,OAAA,CAAU,UAAA,CAAW,IAAMxjB,CAAAA,CAAa,IAAI,CAAA,CAAGhW,CAAK,EACjE,CAAA,CAEM25B,CAAAA,CAAc,IAAM,CACpBH,CAAAA,CAAW,OAAA,EAAS,aAAaA,CAAAA,CAAW,OAAO,CAAA,CACvDxjB,CAAAA,CAAa,KAAK,EACpB,CAAA,CAEArW,SAAAA,CAAU,IACD,IAAM,CACP65B,CAAAA,CAAW,OAAA,EAAS,YAAA,CAAaA,CAAAA,CAAW,OAAO,EACzD,CAAA,CACC,EAAE,CAAA,CAEL,IAAMI,CAAAA,CAAmB,CACvB,GAAA,CAAK,wBAAA,CACL,MAAA,CAAQ,qBAAA,CACR,IAAA,CAAM,uBAAA,CACN,KAAA,CAAO,sBACT,CAAA,CAEA,OACE1+B,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKyI,CAAAA,CACL,SAAA,CAAU,sBAAA,CACV,YAAA,CAAc+1B,CAAAA,CACd,YAAA,CAAcC,CAAAA,CACd,OAAA,CAASD,CAAAA,CACT,MAAA,CAAQC,CAAAA,CAEP,QAAA,CAAA,CAAA/+B,CAAAA,CACA6M,GAAa3B,YAAAA,CACZ3K,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKyI,CAAAA,CACL,IAAA,CAAK,SAAA,CACL,KAAA,CAAO,CACL,GAAA,CAAK61B,CAAAA,CAAiB,GAAA,CACtB,IAAA,CAAMA,CAAAA,CAAiB,IACzB,CAAA,CACA,UAAWn/B,CAAAA,CACT,qMAAA,CACA,cAAA,CACA6J,CAAAA,CAAe,gCAAA,CAAmC,WAAA,CAClDy1B,CAAAA,CAAiB31B,CAAQ,CAAA,CACzBpJ,CACF,CAAA,CAEC,QAAA,CAAA4F,CAAAA,CACH,CAAA,CACA,QAAA,CAAS,IACX,GACF,CAEJ,CClFO,IAAMo5B,EAAAA,CAAYl/B,WAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,KAAAgB,CAAAA,CAAO,IAAA,CAAM,GAAGb,CAAM,CAAA,CAAGC,CAAAA,GAUnCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CAAG,qBAAA,CAXJ,CACZ,EAAA,CAAI,iBAAA,CACJ,GAAI,iBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,IAAA,CAAM,YACR,CAAA,CAK+CuB,CAAI,CAAA,CAAGhB,CAAS,CAAA,CAC1D,GAAGG,CAAAA,CACN,CAGN,EACA6+B,GAAU,WAAA,CAAc,WAAA,CCfjB,IAAMC,EAAAA,CAAQn/B,WAAAA,CAAM,UAAA,CACzB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,UAAAgE,CAAAA,CAAY,KAAA,CAAO,GAAA,CAAAk7B,CAAAA,CAAM,CAAA,CAAG,KAAA,CAAAj2B,CAAAA,CAAO,OAAA,CAAAk2B,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAtmB,CAAAA,CAAO,GAAG3Y,CAAM,CAAA,CAAGC,IAE/EE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,CAAAA,CACT,MAAA,CACA,CACE,UAAA,CAAYuE,CAAAA,GAAc,KAAA,CAC1B,UAAA,CAAYA,CAAAA,GAAc,KAAA,CAC1B,kBAAA,CAAoBA,CAAAA,GAAc,cAClC,kBAAA,CAAoBA,CAAAA,GAAc,aAAA,CAClC,WAAA,CAAao7B,CAAAA,CACb,aAAA,CAAen2B,CAAAA,GAAU,OAAA,CACzB,WAAA,CAAaA,CAAAA,GAAU,KAAA,CACvB,cAAA,CAAgBA,CAAAA,GAAU,QAAA,CAC1B,gBAAA,CAAkBA,CAAAA,GAAU,WAC5B,eAAA,CAAiBA,CAAAA,GAAU,SAAA,CAC3B,eAAA,CAAiBk2B,CAAAA,GAAY,OAAA,CAC7B,aAAA,CAAeA,CAAAA,GAAY,KAAA,CAC3B,gBAAA,CAAkBA,CAAAA,GAAY,QAAA,CAC9B,iBAAA,CAAmBA,CAAAA,GAAY,SAAA,CAC/B,gBAAA,CAAkBA,IAAY,QAAA,CAC9B,gBAAA,CAAkBA,CAAAA,GAAY,QAChC,CAAA,CACAn/B,CACF,CAAA,CACA,KAAA,CAAO,CACH,GAAA,CAAK,OAAOk/B,CAAAA,EAAQ,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAM,GAAI,MAAQA,CAAAA,CACpD,GAAGpmB,CACP,CAAA,CACC,GAAG3Y,CAAAA,CACN,CAGN,EACA8+B,EAAAA,CAAM,WAAA,CAAc,OAAA,CCnCb,IAAMI,EAAAA,CAAOv/B,WAAAA,CAAM,UAAA,CACxB,CAAC,CAAE,SAAA,CAAAE,CAAAA,CAAW,IAAA,CAAAs/B,CAAAA,CAAO,CAAA,CAAG,EAAA,CAAAC,CAAAA,CAAI,EAAA,CAAAC,CAAAA,CAAI,EAAA,CAAAC,EAAI,EAAA,CAAAC,CAAAA,CAAI,GAAA,CAAAR,CAAAA,CAAM,CAAA,CAAG,KAAA,CAAApmB,CAAAA,CAAO,GAAG3Y,CAAM,CAAA,CAAGC,CAAAA,GAEhEE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAWX,EACT,MAAA,CACA8/B,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,CAAA,CAAA,CACxBC,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,CAAA,CAAA,CACxBC,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,CAAA,CAAA,CACxBC,CAAAA,EAAM,CAAA,aAAA,EAAgBA,CAAE,GACxB1/B,CACF,CAAA,CACA,KAAA,CAAO,CACH,mBAAA,CAAqBs/B,CAAAA,CAAO,CAAA,OAAA,EAAUA,CAAI,CAAA,iBAAA,CAAA,CAAsB,MAAA,CAChE,GAAA,CAAK,OAAOJ,CAAAA,EAAQ,QAAA,CAAW,CAAA,EAAGA,CAAAA,CAAM,GAAI,CAAA,GAAA,CAAA,CAAQA,CAAAA,CACpD,GAAGpmB,CACP,CAAA,CACC,GAAG3Y,CAAAA,CACN,CAGN,EACAk/B,EAAAA,CAAK,WAAA,CAAc,MAAA,CCWZ,IAAMM,EAAAA,CAAa7/B,WAAAA,CAAM,UAAA,CAC9B,CAAC,CACC,OAAA,CAAAiB,CAAAA,CAAU,MAAA,CACV,KAAA,CAAA6+B,CAAAA,CAAQ,KAAA,CACR,YAAA,CAAAC,EACA,IAAA,CAAA7+B,CAAAA,CAAO,EAAA,CACP,IAAA,CAAA8+B,CAAAA,CAAO,MAAA,CACP,OAAA,CAAA77B,CAAAA,CAAU,KAAA,CACV,WAAA,CAAA87B,CAAAA,CAAc,KAAA,CACd,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAhgC,CAAAA,CACA,SAAAD,CAAAA,CACA,KAAA,CAAA+Y,CAAAA,CACA,GAAG3Y,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,IAAM4H,CAAAA,CAAelI,WAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA,CAEtDA,WAAAA,CAAM,SAAA,CAAU,IAAM,CACpB,GAAI,CAACigC,CAAAA,CAAa,OAElB,IAAMryB,CAAAA,CAAmBhM,CAAAA,EAAkB,CACzC,IAAMC,CAAAA,CAAKqG,CAAAA,CAAa,OAAA,CACxB,GAAI,CAACrG,CAAAA,CAAI,OACT,IAAMC,CAAAA,CAAOD,CAAAA,CAAG,qBAAA,EAAsB,CAChCE,CAAAA,CAAIH,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,IAAA,CACrBE,CAAAA,CAAIJ,CAAAA,CAAE,OAAA,CAAUE,CAAAA,CAAK,GAAA,CAC3BD,CAAAA,CAAG,MAAM,WAAA,CAAY,WAAA,CAAa,CAAA,EAAGE,CAAC,CAAA,EAAA,CAAI,CAAA,CAC1CF,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,WAAA,CAAa,CAAA,EAAGG,CAAC,CAAA,EAAA,CAAI,EAC5C,CAAA,CAEA,OAAA,MAAA,CAAO,iBAAiB,WAAA,CAAa4L,CAAe,CAAA,CAC7C,IAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,CAAaA,CAAe,CACtE,CAAA,CAAG,CAACqyB,CAAW,CAAC,CAAA,CAEhB,IAAME,CAAAA,CAAqB,IAA2B,CACpD,IAAMC,CAAAA,CAAiC,EAAC,CAGlCC,CAAAA,CAAiBN,CAAAA,EAAgB,8CAAA,CAEvC,OAAI9+B,CAAAA,GAAY,MAAA,CACP,CACL,GAAGm/B,CAAAA,CACH,eAAA,CAAiB,CAAA,gBAAA,EAAmBC,CAAc,CAAA,sBAAA,CAAA,CAClD,cAAA,CAAgB,CAAA,EAAGn/B,CAAI,CAAA,GAAA,EAAMA,CAAI,CAAA,EAAA,CAAA,CACjC,SAAA,CAAW++B,CAAAA,CAAc,8FAAA,CAAiG,MAC5H,CAAA,CAEEh/B,CAAAA,GAAY,MAAA,CACP,CACL,GAAGm/B,EACH,eAAA,CAAiB;AAAA,sCAAA,EACaC,CAAc,CAAA;AAAA,uCAAA,EACbA,CAAc,CAAA;AAAA,UAAA,CAAA,CAE7C,eAAgB,CAAA,EAAGn/B,CAAI,MAAMA,CAAI,CAAA,EAAA,CAAA,CACjC,UAAW++B,CAAAA,CAAc,8FAAA,CAAiG,MAC5H,CAAA,CAEEh/B,CAAAA,GAAY,WACP,CACL,GAAGm/B,EACH,UAAA,CAAYH,CAAAA,CACR,4EAA4EI,CAAc,CAAA,cAAA,CAAA,CAC1F,qCAAqCA,CAAc,CAAA,cAAA,CACzD,EAEEp/B,CAAAA,GAAY,OAAA,CACP,CACL,GAAGm/B,CAAAA,CACH,WAAY,CAAA,mCAAA,EAAsCC,CAAc,wBAClE,CAAA,CAEKD,CACT,EAEME,CAAAA,CAAiCN,CAAAA,GAAS,OAAS,CACvD,SAAA,CAAW,6DACX,eAAA,CAAiB,4DACnB,CAAA,CAAI,GAEJ,OACEz/B,IAAAA,CAAC,OACC,GAAA,CAAMM,CAAAA,EAAS,CACTA,CAAAA,GACDqH,CAAAA,CAAwD,QAAUrH,CAAAA,CAAAA,CAEjE,OAAOP,GAAQ,UAAA,CAAYA,CAAAA,CAAIO,CAAI,CAAA,CAC9BP,CAAAA,GAAMA,EAAsD,OAAA,CAAUO,CAAAA,EACjF,EACA,SAAA,CAAWlB,CAAAA,CACT,kGACA,KAAA,CACA,kFAAA,CACAugC,GAAS,UAAA,CAAW,KAAK,EAAIA,CAAAA,CAAU,EAAA,CACvChgC,CACF,CAAA,CACA,KAAA,CAAO,CACL,GAAGigC,CAAAA,GACH,GAAGG,CAAAA,CACH,GAAGtnB,CAAAA,CACH,eAAA,CAAiBknB,CAAAA,EAAW,CAACA,EAAQ,UAAA,CAAW,KAAK,EAAIA,CAAAA,CAAU,MACrE,EACC,GAAG7/B,CAAAA,CAEH,UAAAy/B,CAAAA,EACCt/B,GAAAA,CAAC,OACC,SAAA,CAAU,iFAAA,CACV,MAAO,CAAE,eAAA,CAAiB,yTAA0T,CAAA,CACtV,CAAA,CAGDS,IAAY,OAAA,EACXV,IAAAA,CAAC,OAAI,SAAA,CAAU,kCAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mGAAA,CAAoG,CAAA,CACnHA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qGAAqG,CAAA,CAAA,CACtH,CAAA,CAGDS,IAAY,MAAA,EACXV,IAAAA,CAAC,OAAI,SAAA,CAAWZ,CAAAA,CACd,0CAAA,CACAwE,CAAAA,EAAW,eACb,CAAA,CACE,QAAA,CAAA,CAAA3D,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8EAA8E,CAAA,CAC7FA,GAAAA,CAAC,OAAI,SAAA,CAAU,mFAAA,CAAoF,EACnGA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,8EAAA,CAA+E,CAAA,CAAA,CAChG,EAEDP,CAAAA,CAAAA,CACH,CAEJ,CACF,EAEA4/B,EAAAA,CAAW,YAAc,YAAA,KC5KZU,EAAAA,CAAY,CAAC,CACxB,QAAA,CAAAtgC,CAAAA,CACA,UAAAC,CAAAA,CACA,IAAA,CAAAgB,CAAAA,CAAO,GAAA,CACP,MAAAoB,CAAAA,CAAQ,0BAAA,CACR,GAAGjC,CACL,CAAA,GAAsB,CACpB,IAAMmgC,CAAAA,CAAS9+B,OAAuB,IAAI,CAAA,CAqB1C,OACEnB,IAAAA,CAAC,KAAA,CAAA,CACC,IAAKigC,CAAAA,CACL,WAAA,CAtBqB5+B,GAAwC,CAC/D,IAAMC,EAAK2+B,CAAAA,CAAO,OAAA,CAClB,GAAI,CAAC3+B,CAAAA,CAAI,OAET,IAAMC,CAAAA,CAAOD,EAAG,qBAAA,EAAsB,CAChCE,EAAIH,CAAAA,CAAE,OAAA,CAAUE,EAAK,IAAA,CACrBE,CAAAA,CAAIJ,EAAE,OAAA,CAAUE,CAAAA,CAAK,IAC3BD,CAAAA,CAAG,KAAA,CAAM,WAAA,CAAY,WAAA,CAAa,GAAGE,CAAC,CAAA,EAAA,CAAI,EAC1CF,CAAAA,CAAG,KAAA,CAAM,YAAY,WAAA,CAAa,CAAA,EAAGG,CAAC,CAAA,EAAA,CAAI,EAC5C,EAcI,YAAA,CAZqB,IAAM,CAC7Bw+B,CAAAA,CAAO,OAAA,EAAS,MAAM,WAAA,CAAY,WAAA,CAAa,GAAG,EACpD,CAAA,CAWI,aATqB,IAAM,CAC7BA,EAAO,OAAA,EAAS,KAAA,CAAM,YAAY,WAAA,CAAa,GAAG,EACpD,CAAA,CAQI,SAAA,CAAW7gC,EACT,yGAAA,CACAO,CACF,EACC,GAAGG,CAAAA,CAEJ,UAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,wEAAA,CACV,MAAO,CACL,OAAA,CAAS,oBACT,UAAA,CAAY,CAAA,gBAAA,EAAmBU,CAAI,CAAA,4DAAA,EAA+DoB,CAAK,oBACzG,CAAA,CACF,CAAA,CACA9B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBAAmB,QAAA,CAAAP,CAAAA,CAAS,GAC7C,CAEJ,ECrDA,IAAMwgC,GAAwB1/B,GAAAA,CAC5B,kGAAA,CACA,CACE,QAAA,CAAU,CACR,QAAS,CACP,OAAA,CAAS,kKACT,KAAA,CAAO,qGACT,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CA0Ca2/B,GAAgB1gC,WAAAA,CAAM,UAAA,CACjC,CAAC,CACC,SAAA,CAAAE,EACA,OAAA,CAAAe,CAAAA,CACA,SAAA0/B,CAAAA,CACA,YAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CACA,WAAA,CAAA5Y,EACA,kBAAA,CAAA6Y,CAAAA,CACA,OAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,WAAA,CAAA15B,CAAAA,CAAc,qBACd,KAAA,CAAO2D,CAAAA,CACP,SAAApE,CAAAA,CACA,GAAG7G,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,GAAM,CAACwH,EAAeC,CAAgB,CAAA,CAAInD,SAAS,EAAE,CAAA,CAC/CuD,EAAemD,CAAAA,GAAoB,MAAA,CACnC7I,EAAQ0F,CAAAA,CAAgBmD,CAAAA,CAA6BxD,EAErDw5B,CAAAA,CAAc5/B,MAAAA,CAAmC,IAAI,CAAA,CACrD6/B,EAAe7/B,MAAAA,CAAgC,IAAI,EAEnD8/B,CAAAA,CAAe,IAAM,CACrBF,CAAAA,CAAY,OAAA,GACdA,EAAY,OAAA,CAAQ,KAAA,CAAM,OAAS,MAAA,CACnCA,CAAAA,CAAY,QAAQ,KAAA,CAAM,MAAA,CAAS,GAAGA,CAAAA,CAAY,OAAA,CAAQ,YAAY,CAAA,EAAA,CAAA,EAE1E,CAAA,CAEAt8B,UAAU,IAAM,CACdw8B,IACF,CAAA,CAAG,CAAC/+B,CAAK,CAAC,EAEV,IAAMg/B,CAAAA,CAAe7/B,GAA8C,CACjE,IAAM0F,EAAW1F,CAAAA,CAAE,MAAA,CAAO,MACtBq/B,CAAAA,EAAa35B,CAAAA,CAAS,MAAA,CAAS25B,CAAAA,GAE9B94B,GACHJ,CAAAA,CAAiBT,CAAQ,EAE3BJ,CAAAA,GAAWtF,CAAC,GACd,CAAA,CAEMgH,CAAAA,CAAiBhH,GAAgD,CACjEA,CAAAA,CAAE,MAAQ,OAAA,EAAW,CAACA,EAAE,QAAA,GAC1BA,CAAAA,CAAE,gBAAe,CACba,CAAAA,CAAM,MAAK,EAAK,CAACm+B,IACnBD,CAAAA,GAAWl+B,CAAK,EACX0F,CAAAA,EAAcJ,CAAAA,CAAiB,EAAE,CAAA,CAAA,CAAA,CAG1C1H,CAAAA,CAAM,YAAYuB,CAAC,EACrB,EAEMsmB,CAAAA,CAAe,IAAM,CACrB0Y,CAAAA,EAAgBG,CAAAA,CAClBA,GAAO,CACEt+B,CAAAA,CAAM,IAAA,EAAK,GACpBk+B,IAAWl+B,CAAK,CAAA,CACX0F,GAAcJ,CAAAA,CAAiB,EAAE,GAE1C,CAAA,CAEM25B,CAAAA,CAAoB,IAAM,CAC1BZ,CAAAA,EAAmBS,EAAa,OAAA,CAClCA,CAAAA,CAAa,QAAQ,KAAA,EAAM,CAE3BV,MAEJ,CAAA,CAEMc,EAAoB//B,CAAAA,EAA2C,CAC/DA,EAAE,MAAA,CAAO,KAAA,EAASA,EAAE,MAAA,CAAO,KAAA,CAAM,OAAS,CAAA,EAC5Ck/B,CAAAA,GAAkBl/B,EAAE,MAAA,CAAO,KAAK,EAG9B2/B,CAAAA,CAAa,OAAA,GACfA,EAAa,OAAA,CAAQ,KAAA,CAAQ,IAEjC,CAAA,CAEA,OACEhhC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG8gC,EAAAA,CAAsB,CAAE,OAAA,CAAAx/B,CAAAA,CAAS,UAAAf,CAAU,CAAC,CAAC,CAAA,CAE9D,QAAA,CAAA,CAAAM,IAAC,OAAA,CAAA,CACC,IAAA,CAAK,OACL,GAAA,CAAK+gC,CAAAA,CACL,UAAU,QAAA,CACV,QAAA,CAAUI,EACV,MAAA,CAAQP,CAAAA,CACR,SAAUC,CAAAA,CACZ,CAAA,CAGC/Y,GAAeA,CAAAA,CAAY,MAAA,CAAS,GACnC9nB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gCAAA,CACZ,QAAA,CAAA8nB,EAAY,GAAA,CAAKsZ,CAAAA,EAChBrhC,KAAC,KAAA,CAAA,CAEC,SAAA,CAAU,mNAEV,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oFACb,QAAA,CAAAA,GAAAA,CAAC2f,KAAA,CAAK,SAAA,CAAU,0BAA0B,CAAA,CAC5C,CAAA,CACA3f,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0DACb,QAAA,CAAAohC,CAAAA,CAAI,KACP,CAAA,CACAphC,GAAAA,CAAC,UACC,OAAA,CAAS,IAAM2gC,IAAqBS,CAAAA,CAAI,EAAE,EAC1C,SAAA,CAAU,+KAAA,CACV,KAAK,QAAA,CAEL,QAAA,CAAAphC,IAAC+R,CAAAA,CAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CACzB,IAfKqvB,CAAAA,CAAI,EAgBX,CACD,CAAA,CACH,CAAA,CAGFphC,IAAC,UAAA,CAAA,CACC,GAAA,CAAMK,CAAAA,EAAS,CACbygC,EAAY,OAAA,CAAUzgC,CAAAA,CAClB,OAAOP,CAAAA,EAAQ,UAAA,CAAYA,EAAIO,CAAI,CAAA,CAC9BP,IAAMA,CAAAA,CAA2D,OAAA,CAAUO,GACtF,CAAA,CACA,KAAA,CAAO4B,EACP,QAAA,CAAUg/B,CAAAA,CACV,UAAW74B,CAAAA,CACX,WAAA,CAAajB,EACb,IAAA,CAAM,CAAA,CACN,UAAWhI,CAAAA,CACT,kFAAA,CACA,0CACA,gDACF,CAAA,CACA,SAAUihC,CAAAA,EAAgB,CAACG,EAC1B,GAAG1gC,CAAAA,CACN,EAEAE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,6CAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAAC,IAACQ,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,OACL,SAAA,CAAU,4EAAA,CACV,QAAS0gC,CAAAA,CACT,IAAA,CAAK,SACL,KAAA,CAAM,aAAA,CAEN,SAAAlhC,GAAAA,CAAC2iB,SAAAA,CAAA,CAAU,SAAA,CAAU,SAAA,CAAU,EACjC,CAAA,CAEC6d,CAAAA,EACCxgC,IAACQ,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,OACL,SAAA,CAAU,4EAAA,CACV,QAASggC,CAAAA,CACT,IAAA,CAAK,SACL,KAAA,CAAM,gBAAA,CAEN,SAAAxgC,GAAAA,CAACqhC,GAAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,CAAA,CAC3B,CAAA,CAAA,CAEJ,EAEAthC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACZ,QAAA,CAAA,CAAA0gC,GACC1gC,IAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,0CAAA,CACb,QAAA,CAAA,CAAAkC,EAAM,MAAA,CAAO,GAAA,CAAEw+B,GAClB,CAAA,CAGFzgC,GAAAA,CAACQ,EAAA,CACC,IAAA,CAAK,OACL,QAAA,CAAW,CAACyB,EAAM,IAAA,EAAK,EAAK,CAACm+B,CAAAA,EAAkBA,CAAAA,EAAgB,CAACG,CAAAA,CAChE,OAAA,CAAS7Y,EACT,SAAA,CAAWvoB,CAAAA,CACT,mDACC8C,CAAAA,CAAM,IAAA,IAAUm+B,CAAAA,CACb,6EAAA,CACA,mEACN,CAAA,CAEC,QAAA,CAAAA,CAAAA,CACCG,CAAAA,CACEvgC,IAAConB,MAAAA,CAAA,CAAO,UAAU,sBAAA,CAAuB,CAAA,CAEzCpnB,IAACshC,QAAAA,CAAA,CAAS,UAAU,uBAAA,CAAwB,CAAA,CAG9CthC,IAAC6d,OAAAA,CAAA,CAAQ,UAAU,SAAA,CAAU,CAAA,CAEjC,GACF,CAAA,CAAA,CACF,CAAA,CAEC6iB,GACC1gC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iGAAA,CACZ,QAAA,CAAA0gC,EACH,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAR,EAAAA,CAAc,YAAc,eAAA,CC5Q5B,IAAMqB,EAAAA,CAAqBhhC,IACzB,+EAAA,CACA,CACE,SAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,sEAAA,CACT,MAAO,mCAAA,CACP,OAAA,CAAS,qDACX,CACF,CAAA,CACA,gBAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,EAoCaihC,EAAAA,CAAahiC,WAAAA,CAAM,UAAA,CAC9B,CAAC,CACC,SAAA,CAAAE,CAAAA,CACA,QAAAe,CAAAA,CACA,QAAA,CAAAhB,EACA,MAAA,CAAAgiC,CAAAA,CACA,aAAAC,CAAAA,CACA,UAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,OAAArgB,CAAAA,CACA,SAAA,CAAApH,EACA,OAAA,CAAA0nB,CAAAA,CACA,MAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,GAAGliC,CACL,EAAGC,CAAAA,GAECC,IAAAA,CAAC,OACC,GAAA,CAAKD,CAAAA,CACL,UAAWX,CAAAA,CAAGoiC,EAAAA,CAAmB,CAAE,OAAA,CAAA9gC,CAAAA,CAAS,UAAAf,CAAU,CAAC,CAAC,CAAA,CACvD,GAAGG,CAAAA,CAGJ,QAAA,CAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gDACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAI,SAAA,CAAU,oIAAA,CACb,SAAAA,GAAAA,CAACshC,QAAAA,CAAA,CAAS,SAAA,CAAU,wBAAA,CAAyB,EAC/C,CAAA,CACCnnB,CAAAA,EACCna,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uDACb,QAAA,CAAAma,CAAAA,CACH,GAEJ,CAAA,CAGApa,IAAAA,CAAC,OAAI,SAAA,CAAU,iBAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,8EAAA,CACZ,QAAA,CAAAP,EACH,CAAA,CAGCoiC,CAAAA,EAAWA,EAAQ,MAAA,CAAS,CAAA,EAC3B7hC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CACZ,QAAA,CAAA6hC,EAAQ,GAAA,CAAI,CAACG,EAAQj6B,CAAAA,GACpBhI,IAAAA,CAAC,KAEC,IAAA,CAAMiiC,CAAAA,CAAO,IACb,MAAA,CAAO,QAAA,CACP,IAAI,qBAAA,CACJ,SAAA,CAAW7iC,EACT,mFAAA,CACA,yDAAA,CACA,yFACF,CAAA,CAEA,QAAA,CAAA,CAAAa,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yBAA0B,QAAA,CAAAgiC,CAAAA,CAAO,MAAM,CAAA,CACvDhiC,GAAAA,CAACiiC,aAAA,CAAa,SAAA,CAAU,qBAAqB,CAAA,CAAA,CAAA,CAXxCl6B,CAYP,CACD,CAAA,CACH,CAAA,CAAA,CAEJ,EAGAhI,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2IAAA,CAGb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uFAAA,CACZ,QAAA,CAAA,CAAA+hC,GAAS9hC,GAAAA,CAAC,MAAA,CAAA,CAAM,SAAA8hC,CAAAA,CAAM,CAAA,CACtBC,GAAS/hC,GAAAA,CAAC,MAAA,CAAA,CAAM,SAAA+hC,CAAAA,CAAM,CAAA,CAAA,CACzB,EAGAhiC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAA,KAACS,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,KACL,SAAA,CAAU,6FAAA,CACV,QAASihC,CAAAA,CAET,QAAA,CAAA,CAAAzhC,IAACirB,IAAAA,CAAA,CAAK,UAAU,oBAAA,CAAqB,CAAA,CAAE,QAEzC,CAAA,CAEC2W,CAAAA,EACC5hC,IAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,KAAK,MAAA,CACL,SAAA,CAAU,qFACV,OAAA,CAASohC,CAAAA,CACT,MAAM,OAAA,CAEN,QAAA,CAAA5hC,IAACkiC,KAAAA,CAAA,CAAM,UAAU,aAAA,CAAc,CAAA,CACjC,EAGD3gB,CAAAA,EACCvhB,GAAAA,CAACQ,EAAA,CACC,OAAA,CAAQ,QACR,IAAA,CAAK,MAAA,CACL,UAAU,oFAAA,CACV,OAAA,CAAS+gB,EACT,KAAA,CAAM,MAAA,CAEN,SAAAvhB,GAAAA,CAACmiC,IAAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAc,EAChC,CAAA,CAGFniC,GAAAA,CAAC,OAAI,SAAA,CAAU,4CAAA,CAA6C,EAE5DA,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAAQ,QACR,IAAA,CAAK,MAAA,CACL,UAAU,oFAAA,CACV,OAAA,CAASkhC,EACT,KAAA,CAAM,YAAA,CAEN,SAAA1hC,GAAAA,CAACoiC,SAAAA,CAAA,CAAU,SAAA,CAAU,aAAA,CAAc,EACrC,CAAA,CAEApiC,GAAAA,CAACQ,EAAA,CACC,OAAA,CAAQ,QACR,IAAA,CAAK,MAAA,CACL,UAAU,oFAAA,CACV,OAAA,CAAS,IAAMmhC,CAAAA,GAAa,IAAI,EAChC,KAAA,CAAM,SAAA,CAEN,SAAA3hC,GAAAA,CAACqiC,QAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EACpC,CAAA,CAEAriC,GAAAA,CAACQ,EAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,OACL,SAAA,CAAU,oFAAA,CACV,QAAS,IAAMmhC,CAAAA,GAAa,MAAM,CAAA,CAClC,KAAA,CAAM,cAEN,QAAA,CAAA3hC,GAAAA,CAACsiC,WAAA,CAAW,SAAA,CAAU,cAAc,CAAA,CACtC,CAAA,CAAA,CACF,GACF,CAAA,CAAA,CACF,CAGN,EAEAd,EAAAA,CAAW,WAAA,CAAc,aCnMlB,SAASe,EAAAA,CAAW,CAAE,QAAA,CAAA9iC,CAAAA,CAAU,UAAAC,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAoB,CAC7E,OACEG,GAAAA,CAAC,KAAA,CAAA,CACC,UAAWb,CAAAA,CACT,qJAAA,CACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,EACH,CAEJ,CCXO,SAAS+iC,GAAgB,CAAE,KAAA,CAAAla,EAAQ,EAAC,CAAG,QAAA7nB,CAAAA,CAAU,SAAA,CAAW,UAAAf,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAyB,CAC9G,IAAM2F,CAAAA,CAAO8iB,EAAM,MAAA,GAAW,CAAA,CAC1B,oBACAA,CAAAA,CAAM,MAAA,GAAW,EACf,CAAA,EAAGA,CAAAA,CAAM,CAAC,CAAC,CAAA,UAAA,CAAA,CACXA,EAAM,MAAA,GAAW,CAAA,CACf,GAAGA,CAAAA,CAAM,CAAC,CAAC,CAAA,KAAA,EAAQA,CAAAA,CAAM,CAAC,CAAC,CAAA,WAAA,CAAA,CAC3B,GAAGA,CAAAA,CAAM,CAAC,CAAC,CAAA,KAAA,EAAQA,CAAAA,CAAM,OAAS,CAAC,CAAA,kBAAA,CAAA,CAE3C,OAAI7nB,CAAAA,GAAY,QAAA,CAEZT,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,sFAAA,CAAwFO,CAAS,CAAA,CAAI,GAAGG,EACzH,QAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,YAAA,CACb,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,6EAAA,CAA8E,CAAA,CAC9FA,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+EAA+E,CAAA,CAC/FA,GAAAA,CAAC,QAAK,SAAA,CAAU,qDAAA,CAAsD,GACxE,CAAA,CACF,CAAA,CAKFD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,EAAG,yEAAA,CAA2EO,CAAS,EAAI,GAAGG,CAAAA,CAC5G,UAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,cAAA,CACb,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yEAAyE,CAAA,CACzFA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0EAA0E,CAAA,CAC1FA,GAAAA,CAAC,QAAK,SAAA,CAAU,gDAAA,CAAiD,GACnE,CAAA,CACCwF,CAAAA,CAAAA,CACH,CAEJ,CCjBO,SAASi9B,EAAAA,CAAY,CAC1B,aAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,QAAA,CAAArjB,EACA,SAAA,CAAAsjB,CAAAA,CACA,SAAArW,CAAAA,CACA,SAAA,CAAA5C,EACA,KAAA,CAAAkZ,CAAAA,CACA,OAAAC,CAAAA,CACA,QAAA,CAAAthB,EACA,MAAA,CAAAxW,CAAAA,CAAS,MACT,MAAA,CAAA+3B,CAAAA,CAAS,SACT,SAAA,CAAArjC,CAAAA,CACA,GAAGG,CACL,EAAqB,CACnB,GAAM,CAACwrB,CAAAA,CAAaC,CAAc,EAAIlnB,QAAAA,CAAS,EAAE,EAE3C4+B,CAAAA,CAAgB5hC,CAAAA,EAA2C,CAC/D,IAAMoqB,CAAAA,CAAQpqB,EAAE,MAAA,CAAO,KAAA,CACvBkqB,EAAeE,CAAK,CAAA,CACpBe,IAAWf,CAAK,EAClB,EAEA,OACEzrB,IAAAA,CAAC,OAAI,SAAA,CAAWZ,CAAAA,CAAG,sGAAuGO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CACxI,QAAA,CAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAG,SAAA,CAAU,iDAAA,CAAkD,oBAAQ,CAAA,CACxED,IAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,UAAAC,GAAAA,CAAC,QAAA,CAAA,CACC,UAAU,kHAAA,CACV,KAAA,CAAM,SAEN,QAAA,CAAAA,GAAAA,CAAC4gB,OAAA,CAAO,SAAA,CAAU,UAAU,CAAA,CAC9B,CAAA,CACA5gB,IAAC,QAAA,CAAA,CACC,OAAA,CAAS4iC,EACT,SAAA,CAAU,kHAAA,CACV,MAAM,UAAA,CAEN,QAAA,CAAA5iC,IAACyV,IAAAA,CAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAC5B,GACF,CAAA,CAAA,CACF,CAAA,CAEA1V,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,UAAA,CACb,QAAA,CAAA,CAAAC,IAAC2d,MAAAA,CAAA,CAAO,UAAU,gEAAA,CAAiE,CAAA,CACnF3d,IAAC,OAAA,CAAA,CACC,IAAA,CAAK,OACL,KAAA,CAAOqrB,CAAAA,CACP,SAAU2X,CAAAA,CACV,WAAA,CAAY,qBACZ,SAAA,CAAU,qOAAA,CACZ,GACF,CAAA,CAAA,CACF,CAAA,CAEAhjC,IAAC4P,EAAAA,CAAA,CAAW,UAAU,QAAA,CACpB,QAAA,CAAA5P,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACZ,QAAA,CAAA0iC,CAAAA,CAAc,IAAKO,CAAAA,EAAS,CAC3B,IAAMC,CAAAA,CAAcD,CAAAA,CAAK,MAAM,IAAA,EAAQA,CAAAA,CAAK,OAAO,IAAA,EAAQ,SAAA,CACrDE,CAAAA,CAAgBF,CAAAA,CAAK,MAAM,MAAA,EAAUA,CAAAA,CAAK,OAAO,MAAA,CACjDG,CAAAA,CAAWH,EAAK,IAAA,EAAM,MAAA,GAAW,SAEvC,OACEljC,IAAAA,CAAC,OAAkB,SAAA,CAAU,gBAAA,CAC3B,UAAAA,IAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAMuf,CAAAA,GAAW2jB,EAAK,EAAE,CAAA,CACjC,UAAW9jC,CAAAA,CACT,yEAAA,CACAwjC,IAAaM,CAAAA,CAAK,EAAA,CACd,2HACA,8CACN,CAAA,CAEA,UAAAljC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,UAAA,CACb,QAAA,CAAA,CAAAC,IAACgb,CAAAA,CAAA,CAAO,IAAKmoB,CAAAA,CAAe,GAAA,CAAKD,CAAAA,CAAa,QAAA,CAAUA,EAAY,CAAC,CAAA,CAAG,EACvEE,CAAAA,EACCpjC,GAAAA,CAAC,QAAK,SAAA,CAAU,qGAAA,CAAsG,GAE1H,CAAA,CAEAD,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,0CAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oCACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAK,SAAA,CAAWb,CAAAA,CACf,uBACAwjC,CAAAA,GAAaM,CAAAA,CAAK,GAAK,+BAAA,CAAkC,kCAC3D,EACG,QAAA,CAAAC,CAAAA,CACH,EACCD,CAAAA,CAAK,QAAA,EAAYjjC,IAACqjC,GAAAA,CAAA,CAAI,SAAA,CAAU,iCAAA,CAAkC,EAClEJ,CAAAA,CAAK,OAAA,EAAWjjC,IAACsjC,OAAAA,CAAA,CAAQ,UAAU,uBAAA,CAAwB,CAAA,CAAA,CAC9D,EACCL,CAAAA,CAAK,WAAA,EACJjjC,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+CACb,QAAA,CAAAijC,CAAAA,CAAK,YAAY,SAAA,CAAU,kBAAA,CAAmB,EAAC,CAAG,CAAE,KAAM,SAAA,CAAW,MAAA,CAAQ,SAAU,CAAC,CAAA,CAC3F,GAEJ,CAAA,CACAljC,IAAAA,CAAC,OAAI,SAAA,CAAU,mCAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CACd,8BAAA,CACAwjC,IAAaM,CAAAA,CAAK,EAAA,CAAK,qCAAA,CAAwC,kCACjE,EACG,QAAA,CAAAA,CAAAA,CAAK,SACJjjC,GAAAA,CAACwiC,EAAAA,CAAA,CAAgB,SAAA,CAAU,aAAA,CAAc,EAEzCxiC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,UAAA,CAAY,QAAA,CAAAijC,EAAK,WAAA,EAAa,OAAA,CAAQ,EAEvD,CAAA,CACCA,CAAAA,CAAK,YACJjjC,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,uHAAA,CACb,QAAA,CAAAijC,EAAK,WAAA,CACR,CAAA,CACE,MACN,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAGAljC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mNAAA,CACb,QAAA,CAAA,CAAAC,IAAC,QAAA,CAAA,CACC,OAAA,CAAUoB,GAAM,CAAEA,CAAAA,CAAE,eAAA,EAAgB,CAAGyhC,IAAQI,CAAAA,CAAK,EAAE,EAAG,CAAA,CACzD,SAAA,CAAU,uEAEV,QAAA,CAAAjjC,GAAAA,CAACqjC,IAAA,CAAI,SAAA,CAAU,cAAc,CAAA,CAC/B,CAAA,CACArjC,IAAC,QAAA,CAAA,CACC,OAAA,CAAUoB,GAAM,CAAEA,CAAAA,CAAE,iBAAgB,CAAGuoB,CAAAA,GAAYsZ,EAAK,EAAE,EAAG,EAC7D,SAAA,CAAU,sEAAA,CAEV,SAAAjjC,GAAAA,CAACkrB,OAAAA,CAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,EACnC,CAAA,CACAlrB,GAAAA,CAAC,UACC,OAAA,CAAUoB,CAAAA,EAAM,CAAEA,CAAAA,CAAE,eAAA,EAAgB,CAAGogB,CAAAA,GAAWyhB,EAAK,EAAE,EAAG,EAC5D,SAAA,CAAU,sEAAA,CAEV,SAAAjjC,GAAAA,CAACsiB,MAAAA,CAAA,CAAO,SAAA,CAAU,aAAA,CAAc,EAClC,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CA3EQ2gB,EAAK,EA4Ef,CAEJ,CAAC,CAAA,CACH,CAAA,CACF,GACF,CAEJ,CCvJO,SAASM,EAAAA,CAAW,CACzB,IAAA,CAAA5kB,EACA,MAAA,CAAA6kB,CAAAA,CACA,OAAAC,CAAAA,CACA,MAAA,CAAAC,EACA,WAAA,CAAAC,CAAAA,CACA,SAAApX,CAAAA,CACA,MAAA,CAAAuW,EACA,QAAA,CAAAc,CAAAA,CACA,QAAAC,CAAAA,CACA,OAAA,CAAAzJ,EACA,SAAA,CAAA16B,CAAAA,CACA,GAAGG,CACL,CAAA,CAAoB,CAClB,OACEE,IAAAA,CAAC,OACC,SAAA,CAAWZ,CAAAA,CACT,yJACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACZ,QAAA,CAAA,CAAAyjC,CAAAA,EACCxjC,IAAC,QAAA,CAAA,CAAO,OAAA,CAASwjC,CAAAA,CAAQ,SAAA,CAAU,gFACjC,QAAA,CAAAxjC,GAAAA,CAAC8jC,UAAA,CAAU,SAAA,CAAU,2CAA2C,CAAA,CAClE,CAAA,CAGF/jC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAA0B,OAAA,CAAS0jC,CAAAA,CAChD,UAAAzjC,GAAAA,CAACgb,CAAAA,CAAA,CAAO,GAAA,CAAK2D,CAAAA,CAAK,OAAQ,GAAA,CAAKA,CAAAA,CAAK,KAAM,QAAA,CAAUA,CAAAA,CAAK,KAAK,CAAC,CAAA,CAAG,EACjEA,CAAAA,CAAK,MAAA,GAAW,UACf3e,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,qGAAA,CAAsG,CAAA,CAAA,CAE1H,EAEAD,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gBAAA,CAAiB,OAAA,CAAS0jC,CAAAA,CACvC,QAAA,CAAA,CAAA1jC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAG,SAAA,CAAU,0DAAA,CAA4D,SAAA2e,CAAAA,CAAK,IAAA,CAAK,EACnFklB,CAAAA,EAAW7jC,GAAAA,CAACsjC,QAAA,CAAQ,SAAA,CAAU,wBAAwB,CAAA,CAAA,CACzD,CAAA,CACAtjC,IAAC,GAAA,CAAA,CAAE,SAAA,CAAWb,EACZ,gCAAA,CACAykC,CAAAA,CAAW,0CAA4C,kCACzD,CAAA,CACG,SAAAA,CAAAA,CAAW,WAAA,CAAcjlB,EAAK,MAAA,GAAW,QAAA,CAAW,SAAW,CAAA,UAAA,EAAaA,CAAAA,CAAK,UAAU,kBAAA,CAAmB,GAAI,CAAE,IAAA,CAAM,SAAA,CAAW,MAAA,CAAQ,SAAU,CAAC,CAAC,GAC5J,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAEA5e,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACZ,QAAA,CAAA,CAAAwsB,GACCvsB,GAAAA,CAAC,QAAA,CAAA,CACC,QAASusB,CAAAA,CACT,SAAA,CAAU,mHAEV,QAAA,CAAAvsB,GAAAA,CAAC2d,OAAA,CAAO,SAAA,CAAU,UAAU,CAAA,CAC9B,CAAA,CAEF3d,IAAC,QAAA,CAAA,CACC,OAAA,CAAS0jC,EACT,SAAA,CAAU,kHAAA,CAEV,SAAA1jC,GAAAA,CAAC+jC,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,EAC7B,CAAA,CACA/jC,GAAAA,CAAC,UACC,OAAA,CAAS2jC,CAAAA,CACT,SAAA,CAAU,kHAAA,CAEV,SAAA3jC,GAAAA,CAACgkC,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,EAC7B,CAAA,CAEC5J,CAAAA,CAEDp6B,IAAC,QAAA,CAAA,CACC,OAAA,CAASyjC,EACT,SAAA,CAAU,kHAAA,CAEV,SAAAzjC,GAAAA,CAACmjB,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,EACpC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC5FO,SAAS8gB,EAAAA,CAAY,CAAE,GAAA,CAAAhpB,CAAAA,CAAK,SAAAnX,CAAAA,CAAU,IAAA,CAAAogC,EAAM,SAAA,CAAAxkC,CAAAA,CAAW,GAAGG,CAAM,EAAqB,CAC1F,GAAM,CAACskC,CAAAA,CAAWC,CAAY,EAAIhgC,QAAAA,CAAS,KAAK,EAC1C,CAACigC,CAAAA,CAAaC,CAAc,CAAA,CAAIlgC,QAAAA,CAAS,CAAC,CAAA,CAC1C,CAACy/B,EAASU,CAAU,CAAA,CAAIngC,SAAS,KAAK,CAAA,CACtCogC,EAAWtjC,MAAAA,CAAyB,IAAI,EAExCujC,CAAAA,CAAa,IAAM,CACnBD,CAAAA,CAAS,OAAA,GACPL,EACFK,CAAAA,CAAS,OAAA,CAAQ,OAAM,CAEvBA,CAAAA,CAAS,QAAQ,IAAA,EAAK,CAExBJ,EAAa,CAACD,CAAS,CAAA,EAE3B,CAAA,CAEMO,EAAmB,IAAM,CACzBF,EAAS,OAAA,EACXF,CAAAA,CAAeE,EAAS,OAAA,CAAQ,WAAW,EAE/C,CAAA,CAEMG,CAAAA,CAAc,IAAM,CACxBP,CAAAA,CAAa,KAAK,CAAA,CAClBE,CAAAA,CAAe,CAAC,EAClB,CAAA,CAEMpb,EAAc0b,CAAAA,EAAiB,CACnC,IAAM10B,CAAAA,CAAU,IAAA,CAAK,MAAM00B,CAAAA,CAAO,EAAE,EAC9B/b,CAAAA,CAAU,IAAA,CAAK,MAAM+b,CAAAA,CAAO,EAAE,EACpC,OAAO,CAAA,EAAG10B,CAAO,CAAA,CAAA,EAAI2Y,CAAAA,CAAQ,UAAS,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAC1D,CAAA,CAEMzO,EAAWtW,CAAAA,CAAYugC,CAAAA,CAAcvgC,EAAY,GAAA,CAAM,CAAA,CAE7D,OACE/D,IAAAA,CAAC,KAAA,CAAA,CACC,UAAWZ,CAAAA,CACT,uDAAA,CACA+kC,EAAO,aAAA,CAAgB,kCAAA,CACvBxkC,CACF,CAAA,CACC,GAAGG,EAEJ,QAAA,CAAA,CAAAG,GAAAA,CAAC,SACC,GAAA,CAAKwkC,CAAAA,CACL,IAAKvpB,CAAAA,CACL,YAAA,CAAcypB,EACd,OAAA,CAASC,CAAAA,CACX,EAEA3kC,GAAAA,CAAC,QAAA,CAAA,CACC,QAASykC,CAAAA,CACT,SAAA,CAAWtlC,EACT,wEAAA,CACA+kC,CAAAA,CAAO,yBAA2B,wBACpC,CAAA,CAEC,QAAA,CAAAC,CAAAA,CAAYnkC,IAACwiB,KAAAA,CAAA,CAAM,UAAU,sBAAA,CAAuB,CAAA,CAAKxiB,IAACyiB,IAAAA,CAAA,CAAK,UAAU,6BAAA,CAA8B,CAAA,CAC1G,EAEA1iB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kBAAA,CACb,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yEACb,QAAA,CAAAA,GAAAA,CAAC,OACC,SAAA,CAAWb,CAAAA,CAAG,qCAAsC+kC,CAAAA,CAAO,UAAA,CAAa,aAAa,CAAA,CACrF,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAG9pB,CAAQ,CAAA,CAAA,CAAI,CAAA,CACjC,EACF,CAAA,CACAra,IAAAA,CAAC,OAAI,SAAA,CAAU,yDAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAM,QAAA,CAAAkpB,CAAAA,CAAWmb,CAAW,CAAA,CAAE,CAAA,CAC/BrkC,IAAC,MAAA,CAAA,CAAM,QAAA,CAAA8D,EAAWolB,CAAAA,CAAWplB,CAAQ,EAAI,OAAA,CAAQ,CAAA,CAAA,CACnD,GACF,CAAA,CAEA9D,GAAAA,CAAC,UACC,OAAA,CAAS,IAAMukC,EAAW,CAACV,CAAO,EAClC,SAAA,CAAU,sEAAA,CAET,SAAAA,CAAAA,CAAU7jC,GAAAA,CAAC6kC,QAAA,CAAQ,SAAA,CAAU,UAAU,CAAA,CAAK7kC,GAAAA,CAAC8kC,QAAA,CAAQ,SAAA,CAAU,UAAU,CAAA,CAC5E,CAAA,CAAA,CACF,CAEJ,CCpFO,SAASC,GAAY,CAAE,MAAA,CAAA9lB,EAAQ,SAAA,CAAAvf,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAqB,CAC7E,OAAIof,CAAAA,GAAW,UAEXjf,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,yFAAA,CAA2FO,CAAS,CAAA,CAAI,GAAGG,EAAO,CAAA,CAIrIof,CAAAA,GAAW,SAEXjf,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CAAG,oCAAA,CAAsCO,CAAS,CAAA,CAAI,GAAGG,EAAO,QAAA,CAAA,GAAA,CAAC,CAAA,CAKpFE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG,mBAAA,CAAqBO,CAAS,CAAA,CAAI,GAAGG,EACrD,QAAA,CAAA,CAAAof,CAAAA,GAAW,QAAUjf,GAAAA,CAACsmB,KAAAA,CAAA,CAAM,SAAA,CAAU,oBAAA,CAAqB,EAC3DrH,CAAAA,GAAW,WAAA,EAAejf,IAACglC,UAAAA,CAAA,CAAW,UAAU,oBAAA,CAAqB,CAAA,CACrE/lB,IAAW,MAAA,EAAUjf,GAAAA,CAACglC,WAAA,CAAW,SAAA,CAAU,wBAAwB,CAAA,CAAA,CACtE,CAEJ,CCjBO,SAASC,EAAAA,CAAY,CAAE,GAAA,CAAAC,EAAK,KAAA,CAAAjgC,CAAAA,CAAO,YAAAgO,CAAAA,CAAa,KAAA,CAAAkyB,EAAO,QAAA,CAAAC,CAAAA,CAAU,UAAA1lC,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAqB,CAC/G,OACEE,IAAAA,CAAC,GAAA,CAAA,CACC,KAAMmlC,CAAAA,CACN,MAAA,CAAO,SACP,GAAA,CAAI,qBAAA,CACJ,UAAW/lC,CAAAA,CACT,6KAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEH,QAAA,CAAA,CAAAslC,CAAAA,EACCnlC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oFACb,QAAA,CAAAA,GAAAA,CAAC,OAAI,GAAA,CAAKmlC,CAAAA,CAAO,IAAKlgC,CAAAA,CAAO,SAAA,CAAU,oFAAA,CAAqF,CAAA,CAC9H,EAEFlF,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CACZ,QAAA,CAAA,CAAAqlC,GAAYplC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,8DAAA,CAAgE,QAAA,CAAAolC,EAAS,CAAA,CACnGplC,GAAAA,CAAC,MAAG,SAAA,CAAU,kEAAA,CAAoE,SAAAiF,CAAAA,EAASigC,CAAAA,CAAI,EAC9FjyB,CAAAA,EAAejT,GAAAA,CAAC,KAAE,SAAA,CAAU,uDAAA,CAAyD,SAAAiT,CAAAA,CAAY,CAAA,CAClGlT,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yDACb,QAAA,CAAA,CAAAC,GAAAA,CAACiiC,aAAA,CAAa,SAAA,CAAU,UAAU,CAAA,CAClCjiC,GAAAA,CAAC,QAAK,SAAA,CAAU,UAAA,CAAY,QAAA,CAAA,IAAI,GAAA,CAAIklC,CAAG,CAAA,CAAE,QAAA,CAAS,GACpD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCPO,SAASG,EAAAA,CAAc,CAC5B,OAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,UAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CAAa,KACb,SAAA,CAAA/lC,CAAAA,CACA,QAAAgmC,CAAAA,CACA,OAAA,CAAAC,EACA,QAAA,CAAAnkB,CAAAA,CACA,OAAAD,CAAAA,CACA,SAAA,CAAAqkB,EACA,MAAA,CAAAnE,CAAAA,CACA,MAAAoB,CAAAA,CACA,QAAA,CAAAvjB,EACA,UAAA,CAAA/S,CACF,CAAA,CAAuB,CACrB,IAAMs5B,CAAAA,CAAgB,IAAM,CAC1B,OAAQP,CAAAA,CAAQ,MACd,KAAK,QACH,OACEtlC,GAAAA,CAACikC,GAAA,CACC,GAAA,CAAKqB,EAAQ,WAAA,GAAc,CAAC,GAAG,GAAA,EAAO,EAAA,CACtC,SAAUA,CAAAA,CAAQ,WAAA,GAAc,CAAC,CAAA,EAAG,QAAA,CACpC,KAAMC,CAAAA,CACR,CAAA,CAEJ,KAAK,UAAA,CACH,OACExlC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,UAAAC,GAAAA,CAAC8lC,MAAAA,CAAA,CAAO,SAAA,CAAU,UAAU,CAAA,CAC5B9lC,GAAAA,CAAC,QAAK,SAAA,CAAU,qBAAA,CAAuB,SAAAslC,CAAAA,CAAQ,QAAA,EAAU,SAAW,iBAAA,CAAkB,CAAA,CAAA,CACxF,EACAtlC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uFAAA,CACb,QAAA,CAAAA,IAAC8lC,MAAAA,CAAA,CAAO,UAAU,oBAAA,CAAqB,CAAA,CACzC,GACF,CAAA,CAEJ,KAAK,UACH,OACE/lC,IAAAA,CAAC,OAAI,SAAA,CAAU,oEAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gFAAA,CACb,QAAA,CAAAA,IAAC+lC,IAAAA,CAAA,CAAS,UAAU,SAAA,CAAU,CAAA,CAChC,CAAA,CACAhmC,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,UAAAC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,4BAAA,CAA8B,QAAA,CAAAslC,EAAQ,OAAA,EAAS,IAAA,CAAK,EACjEtlC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,6BAAA,CAA+B,QAAA,CAAAslC,EAAQ,OAAA,EAAS,KAAA,CAAM,GACrE,CAAA,CAAA,CACF,CAAA,CAEJ,KAAK,MAAA,CACH,OACEvlC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2FACb,QAAA,CAAA,CAAAC,GAAAA,CAACgmC,SAAA,CAAS,SAAA,CAAU,wBAAwB,CAAA,CAC5CjmC,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,UAAAC,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,8BAAA,CAAgC,SAAAslC,CAAAA,CAAQ,WAAA,GAAc,CAAC,CAAA,EAAG,IAAA,EAAQ,OAAO,CAAA,CACtFtlC,GAAAA,CAAC,KAAE,SAAA,CAAU,kCAAA,CAAoC,SAAAslC,CAAAA,CAAQ,WAAA,GAAc,CAAC,CAAA,EAAG,IAAA,EAAQ,eAAe,CAAA,CAAA,CACpG,CAAA,CAAA,CACF,EAEJ,QACE,IAAMW,EAAW,sBAAA,CACXC,CAAAA,CAAOZ,EAAQ,OAAA,CAAQ,KAAA,CAAMW,CAAQ,CAAA,CAE3C,OACElmC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAE,SAAA,CAAU,yDAAA,CAA2D,SAAAslC,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CACvFY,CAAAA,EAAQA,EAAK,GAAA,CAAI,CAAChB,EAAKv/B,CAAAA,GACtB3F,GAAAA,CAACilC,GAAA,CAEC,GAAA,CAAKC,EACL,SAAA,CAAW/lC,CAAAA,CACT,OACAomC,CAAAA,CAAQ,6BAAA,CAAgC,6BAC1C,CAAA,CAAA,CALK5/B,CAMP,CACD,CAAA,CAAA,CACH,CAEN,CACF,CAAA,CAEA,OACE5F,KAACoY,EAAAA,CAAA,CACC,OAAO,QAAA,CACP,SAAA,CAAWhZ,EACT,uCAAA,CACAomC,CAAAA,CAAQ,cAAgB,eAAA,CACxBh5B,CAAAA,EAAc,gBACd7M,CACF,CAAA,CACA,QAAS,IAAM4f,CAAAA,KAGf,QAAA,CAAA,CAAAtf,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EACd,0EAAA,CACAomC,CAAAA,CAAQ,gCAAkC,+BAC5C,CAAA,CACE,SAAAxlC,IAAAA,CAAC86B,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA76B,GAAAA,CAAC86B,GAAA,CAAoB,SAAA,CAAU,8EAC7B,QAAA,CAAA96B,GAAAA,CAAC8gB,eAAA,CAAe,SAAA,CAAU,UAAU,CAAA,CACtC,CAAA,CACA/gB,KAACg7B,EAAAA,CAAA,CAAoB,MAAOwK,CAAAA,CAAQ,KAAA,CAAQ,QAC1C,QAAA,CAAA,CAAAxlC,IAAAA,CAACm7B,GAAA,CAAiB,OAAA,CAAS,IAAMwK,CAAAA,IAAU,CACzC,UAAA1lC,GAAAA,CAACmmC,KAAAA,CAAA,CAAM,SAAA,CAAU,cAAA,CAAe,CAAA,CAAE,QAAA,CAAA,CACpC,EACApmC,IAAAA,CAACm7B,EAAAA,CAAA,CAAiB,OAAA,CAAS,IAAM3Z,KAAS,CACxC,QAAA,CAAA,CAAAvhB,IAAComC,KAAAA,CAAA,CAAM,UAAU,cAAA,CAAe,CAAA,CAAE,SACpC,CAAA,CACArmC,IAAAA,CAACm7B,GAAA,CAAiB,OAAA,CAAS,IAAMuG,CAAAA,IAAS,CACxC,UAAAzhC,GAAAA,CAACirB,IAAAA,CAAA,CAAK,SAAA,CAAU,cAAA,CAAe,EAAE,OAAA,CAAA,CACnC,CAAA,CACAlrB,KAACm7B,EAAAA,CAAA,CAAiB,QAAS,IAAM0K,CAAAA,KAC/B,QAAA,CAAA,CAAA5lC,GAAAA,CAACqmC,QAAA,CAAQ,SAAA,CAAU,cAAA,CAAe,CAAA,CAAE,YACtC,CAAA,CACAtmC,IAAAA,CAACm7B,GAAA,CAAiB,OAAA,CAAS,IAAM2H,CAAAA,IAAQ,CACvC,UAAA7iC,GAAAA,CAACqjC,GAAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CAAe,EAAE,MAAA,CAAA,CAClC,CAAA,CACAtjC,KAACm7B,EAAAA,CAAA,CAAiB,QAAS,IAAMyK,CAAAA,GAAU,WAAI,CAAA,CAC7C,QAAA,CAAA,CAAA3lC,IAACsmC,KAAAA,CAAA,CAAM,UAAU,cAAA,CAAe,CAAA,CAAE,UACpC,CAAA,CACCf,CAAAA,EACCxlC,KAACm7B,EAAAA,CAAA,CAAiB,QAAS,IAAM1Z,CAAAA,KAAc,SAAA,CAAU,cAAA,CACvD,QAAA,CAAA,CAAAxhB,GAAAA,CAACsiB,OAAA,CAAO,SAAA,CAAU,eAAe,CAAA,CAAE,SAAA,CAAA,CACrC,GAEJ,CAAA,CAAA,CACF,CAAA,CACF,EAEAviB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CACd,qEAAA,CACAomC,EACI,sCAAA,CACA,0HAAA,CACJD,EAAQ,QAAA,EAAY,yBACtB,EAEG,QAAA,CAAA,CAAAA,CAAAA,CAAQ,SACPvlC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CACd,sDAAA,CACAomC,EAAQ,iCAAA,CAAoC,8CAC9C,EACE,QAAA,CAAA,CAAAvlC,GAAAA,CAAC,KAAE,SAAA,CAAU,sBAAA,CAAuB,uBAAW,CAAA,CAC/CA,GAAAA,CAAC,KAAE,SAAA,CAAU,UAAA,CAAY,QAAA,CAAAslC,CAAAA,CAAQ,QAAQ,OAAA,CAAQ,CAAA,CAAA,CACnD,EAIDA,CAAAA,CAAQ,WAAA,EAAeA,EAAQ,WAAA,CAAY,MAAA,CAAS,GAAKA,CAAAA,CAAQ,IAAA,GAAS,SACzEtlC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gBAAA,CACZ,QAAA,CAAAslC,EAAQ,WAAA,CAAY,GAAA,CAAIlE,GACvBphC,GAAAA,CAACie,EAAAA,CAAA,CAEC,GAAA,CAAKmjB,CAAAA,CAAI,IACT,GAAA,CAAI,YAAA,CACJ,UAAU,0CAAA,CAAA,CAHLA,CAAAA,CAAI,EAIX,CACD,CAAA,CACH,EAGDyE,CAAAA,EAAc,CAEf9lC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,EACd,sDAAA,CACAomC,CAAAA,CAAQ,eAAA,CAAkB,eAC5B,EACG,QAAA,CAAA,CAAAD,CAAAA,CAAQ,UAAYtlC,GAAAA,CAAC,MAAA,CAAA,CAAK,kBAAM,CAAA,CACjCA,GAAAA,CAAC,QAAM,QAAA,CAAAslC,CAAAA,CAAQ,UAAU,kBAAA,CAAmB,GAAI,CAAE,IAAA,CAAM,UAAW,MAAA,CAAQ,SAAU,CAAC,CAAA,CAAE,CAAA,CACvFC,GAASD,CAAAA,CAAQ,MAAA,EAAUtlC,IAAC+kC,EAAAA,CAAA,CAAY,OAAQO,CAAAA,CAAQ,MAAA,CAAQ,GACnE,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCtLO,SAASiB,EAAAA,CAAY,CAC1B,SAAAC,CAAAA,CACA,aAAA,CAAAC,EACA,SAAA,CAAA/mC,CAAAA,CACA,QAAAgmC,CAAAA,CACA,OAAA,CAAAC,EACA,QAAA,CAAAnkB,CAAAA,CACA,OAAAD,CAAAA,CACA,SAAA,CAAAqkB,EACA,MAAA,CAAAnE,CAAAA,CACA,MAAAoB,CAAAA,CACA,QAAA,CAAAvjB,EACA,UAAA,CAAAonB,CAAAA,CACA,QAAAC,CAAAA,CACA,aAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CAAmB,EAAC,CACpB,UAAA,CAAAC,EAAa,cAAA,CACb,WAAA,CAAAC,EAAc,IAAA,CACd,GAAGlnC,CACL,CAAA,CAAqB,CACnB,IAAMmnC,CAAAA,CAAY9lC,OAAuB,IAAI,CAAA,CACvC,CAAC+lC,CAAAA,CAAkBC,CAAmB,EAAI9iC,QAAAA,CAAS,IAAI,EAE7DI,SAAAA,CAAU,IAAM,CACVyiC,CAAAA,EACFD,CAAAA,CAAU,SAAS,cAAA,CAAe,CAAE,SAAU,QAAS,CAAC,EAE5D,CAAA,CAAG,CAACR,EAAUS,CAAgB,CAAC,EAE/B,IAAMhuB,CAAAA,CAAgB7X,GAAqC,CACzD,IAAMitB,EAASjtB,CAAAA,CAAE,aAAA,CACX+lC,EAAa,IAAA,CAAK,GAAA,CAAI9Y,EAAO,YAAA,CAAeA,CAAAA,CAAO,YAAA,CAAeA,CAAAA,CAAO,SAAS,CAAA,CAAI,EAAA,CAC5F6Y,EAAoBC,CAAU,CAAA,CAE1B9Y,EAAO,SAAA,GAAc,CAAA,EAAKsY,GAAW,CAACC,CAAAA,EAAiBF,GACzDA,CAAAA,GAEJ,EAGMU,CAAAA,CAAkBz7B,OAAAA,CAAQ,IACzBo7B,CAAAA,CAEEP,CAAAA,CAAS,OAAO,CAAChX,CAAAA,CAAQ8V,IAAY,CAC1C,IAAM/1B,EAAO+1B,CAAAA,CAAQ,SAAA,CAAU,mBAAmB,MAAA,CAAW,CAC3D,KAAM,SAAA,CACN,KAAA,CAAO,OACP,GAAA,CAAK,SACP,CAAC,CAAA,CACD,OAAK9V,EAAOjgB,CAAI,CAAA,GACdigB,CAAAA,CAAOjgB,CAAI,EAAI,EAAC,CAAA,CAElBigB,EAAOjgB,CAAI,CAAA,CAAE,KAAK+1B,CAAO,CAAA,CAClB9V,CACT,CAAA,CAAG,EAA+B,CAAA,CAbT,CAAE,IAAOgX,CAAS,CAAA,CAc1C,CAACA,CAAAA,CAAUO,CAAW,CAAC,CAAA,CAE1B,OAAIP,EAAS,MAAA,GAAW,CAAA,EAAK,CAACI,CAAAA,CAE1B5mC,GAAAA,CAAC,OAAI,SAAA,CAAWb,CAAAA,CAAG,2FAA4FO,CAAS,CAAA,CAAI,GAAGG,CAAAA,CAC7H,QAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yHACb,QAAA,CAAAA,GAAAA,CAAC0iB,cAAA,CAAc,SAAA,CAAU,0BAA0B,CAAA,CACrD,CAAA,CACA1iB,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,oDAAoD,QAAA,CAAA,iBAAA,CAAe,CAAA,CACjFA,IAAC,GAAA,CAAA,CAAE,QAAA,CAAA,oDAAA,CAAkD,GACvD,CAAA,CACF,CAAA,CAKFA,IAAC4P,EAAAA,CAAA,CACC,UAAWzQ,CAAAA,CAAG,YAAA,CAAcO,CAAS,CAAA,CACrC,QAAA,CAAUuZ,EACV,IAAA,CAAK,KAAA,CACL,YAAU,QAAA,CACV,eAAA,CAAc,YACb,GAAGpZ,CAAAA,CAEJ,SAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gBAAA,CACZ,QAAA,CAAA,CAAA4mC,CAAAA,EACC3mC,GAAAA,CAAC,OAAI,SAAA,CAAU,0BAAA,CACZ,SAAA4mC,CAAAA,CACC7mC,IAAAA,CAAC,OAAI,SAAA,CAAU,+CAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iFAAA,CAAkF,CAAA,CAAE,6BAErG,CAAA,CAEAA,GAAAA,CAAC,UACC,OAAA,CAAS0mC,CAAAA,CACT,UAAU,gEAAA,CACX,QAAA,CAAA,qBAAA,CAED,EAEJ,CAAA,CAGD,MAAA,CAAO,QAAQU,CAAe,CAAA,CAAE,IAAI,CAAC,CAAC73B,EAAM83B,CAAI,CAAA,GAC/CtnC,KAAC,KAAA,CAAA,CAAe,SAAA,CAAU,YACvB,QAAA,CAAA,CAAAgnC,CAAAA,EACC/mC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CACb,QAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mMACb,QAAA,CAAA,CAAAC,GAAAA,CAAC6N,SAAA,CAAS,SAAA,CAAU,UAAU,CAAA,CAC7B0B,CAAAA,CAAAA,CACH,EACF,CAAA,CAGFvP,GAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACZ,SAAAqnC,CAAAA,CAAK,GAAA,CAAI,CAACC,CAAAA,CAAKv/B,CAAAA,GAAU,CACxB,IAAMw9B,CAAAA,CAAQ+B,EAAI,QAAA,GAAab,CAAAA,CACzBc,EAAUF,CAAAA,CAAKt/B,CAAAA,CAAQ,CAAC,CAAA,CACxBy/B,CAAAA,CAAUH,EAAKt/B,CAAAA,CAAQ,CAAC,EAGP,CAACw/B,GAAWA,CAAAA,CAAQ,QAAA,GAAaD,CAAAA,CAAI,QAAA,KACtDG,EAAgB,CAACD,CAAAA,EAAWA,EAAQ,QAAA,GAAaF,CAAAA,CAAI,SAE3D,OACEtnC,GAAAA,CAACqlC,GAAA,CAEC,OAAA,CAASiC,EACT,KAAA,CAAO/B,CAAAA,CACP,UAAWpmC,CAAAA,CACT,CAACsoC,GAAiB,QACpB,CAAA,CACA,QAAS,IAAM/B,CAAAA,GAAU4B,CAAG,CAAA,CAC5B,OAAA,CAAUI,GAAU/B,CAAAA,GAAU2B,CAAAA,CAAKI,CAAK,CAAA,CACxC,QAAA,CAAU,IAAMlmB,CAAAA,GAAW8lB,CAAG,EAC9B,MAAA,CAAQ,IAAM/lB,IAAS+lB,CAAG,CAAA,CAC1B,UAAW,IAAM1B,CAAAA,GAAY0B,CAAG,CAAA,CAChC,OAAQ,IAAM7F,CAAAA,GAAS6F,CAAG,CAAA,CAC1B,KAAA,CAAO,IAAMzE,CAAAA,GAAQyE,CAAG,EACxB,QAAA,CAAU,IAAMhoB,IAAWgoB,CAAG,CAAA,CAC9B,WAAYT,CAAAA,CAAiB,QAAA,CAASS,EAAI,EAAE,CAAA,CAAA,CAdvCA,EAAI,EAeX,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CAAA,CAxCQ/3B,CAyCV,CACD,CAAA,CACDvP,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKgnC,EAAW,SAAA,CAAU,MAAA,CAAO,GACxC,CAAA,CACF,CAEJ,CCrJO,SAASW,EAAAA,CAAU,CACxB,MAAA,CAAAC,CAAAA,CACA,SAAAvH,CAAAA,CACA,KAAA,CAAAG,EACA,OAAA,CAAAqH,CAAAA,CACA,MAAAC,CAAAA,CACA,UAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,YAAA7gC,CAAAA,CAAc,mBAAA,CACd,KAAA,CAAAmhB,CAAAA,CAAQ,EAAC,CACT,UAAA,CAAA2f,EACA,WAAA,CAAAC,CAAAA,CACA,UAAAzH,CAAAA,CACA,QAAA,CAAA1/B,EACA,SAAA,CAAArB,CAAAA,CACA,GAAGG,CACL,CAAA,CAAmB,CACjB,GAAM,CAACyF,EAAS6iC,CAAU,CAAA,CAAI/jC,SAAS,EAAE,CAAA,CACnC,CAACgkC,CAAAA,CAAaC,CAAc,EAAIjkC,QAAAA,CAAS,KAAK,EAC9C,CAACkkC,CAAAA,CAAeC,CAAgB,CAAA,CAAInkC,QAAAA,CAAwB,IAAI,CAAA,CAChE,CAACokC,EAAcC,CAAe,CAAA,CAAIrkC,SAAS,CAAC,CAAA,CAC5C08B,CAAAA,CAAc5/B,MAAAA,CAA4B,IAAI,CAAA,CAE9CwnC,CAAAA,CAAgB/8B,QAAQ,IACxB28B,CAAAA,GAAkB,KAAa,EAAC,CAC7BhgB,EAAM,MAAA,CAAO0C,CAAAA,EAClBA,EAAE,IAAA,CAAK,WAAA,GAAc,QAAA,CAASsd,CAAAA,CAAc,aAAa,CAC3D,EAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CACX,CAAChgB,EAAOggB,CAAa,CAAC,EAEnBrH,CAAAA,CAAe7/B,CAAAA,EAA8C,CACjE,GAAIL,CAAAA,CAAU,OACd,IAAMkB,CAAAA,CAAQb,EAAE,MAAA,CAAO,KAAA,CACvB,GAAIq/B,CAAAA,EAAax+B,CAAAA,CAAM,MAAA,CAASw+B,CAAAA,CAAW,OAE3C0H,CAAAA,CAAWlmC,CAAK,EAGCA,EAAMb,CAAAA,CAAE,MAAA,CAAO,eAAiB,CAAC,CAAA,KAE5CunC,GADmB1mC,CAAAA,CAAM,KAAA,CAAM,EAAGb,CAAAA,CAAE,MAAA,CAAO,cAAc,CAAA,CACzB,KAAA,CAAM,SAAS,EAEjDunC,EAAAA,EACFJ,EAAiBI,EAAAA,CAAa,CAAC,GAAK,EAAE,CAAA,CACtCF,EAAgB,CAAC,CAAA,EAEjBF,EAAiB,IAAI,CAAA,CAInBzH,EAAY,OAAA,GACdA,CAAAA,CAAY,QAAQ,KAAA,CAAM,MAAA,CAAS,OACnCA,CAAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAS,GAAG,IAAA,CAAK,GAAA,CAAIA,EAAY,OAAA,CAAQ,YAAA,CAAc,GAAG,CAAC,CAAA,EAAA,CAAA,EAEzF,EAEM8H,CAAAA,CAAiBjqB,CAAAA,EAAe,CACpC,GAAI,CAACmiB,EAAY,OAAA,CAAS,OAC1B,IAAM+H,CAAAA,CAAQ/H,CAAAA,CAAY,QAAQ,cAAA,CAC5BgI,CAAAA,CAAaxjC,EAAQ,KAAA,CAAM,CAAA,CAAGujC,CAAK,CAAA,CAAE,OAAA,CAAQ,QAAS,CAAA,CAAA,EAAIlqB,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA,CACtEoqB,EAAYzjC,CAAAA,CAAQ,KAAA,CAAMujC,CAAK,CAAA,CACrCV,CAAAA,CAAWW,EAAaC,CAAS,CAAA,CACjCR,CAAAA,CAAiB,IAAI,EACrBzH,CAAAA,CAAY,OAAA,CAAQ,QACtB,CAAA,CAEM14B,EAAiBhH,CAAAA,EAA2B,CAChD,GAAI,CAAAL,CAAAA,CACJ,IAAIunC,CAAAA,GAAkB,IAAA,EAAQI,EAAc,MAAA,CAAS,CAAA,CAAG,CAClDtnC,CAAAA,CAAE,GAAA,GAAQ,aACZA,CAAAA,CAAE,cAAA,GACFqnC,CAAAA,CAAgBpgC,CAAAA,EAAAA,CAASA,EAAO,CAAA,EAAKqgC,CAAAA,CAAc,MAAM,CAAA,EAChDtnC,CAAAA,CAAE,MAAQ,SAAA,EACnBA,CAAAA,CAAE,gBAAe,CACjBqnC,CAAAA,CAAgBpgC,IAASA,CAAAA,CAAO,CAAA,CAAIqgC,EAAc,MAAA,EAAUA,CAAAA,CAAc,MAAM,CAAA,EACvEtnC,EAAE,GAAA,GAAQ,OAAA,EAAWA,EAAE,GAAA,GAAQ,KAAA,EACxCA,EAAE,cAAA,EAAe,CACjBwnC,EAAcF,CAAAA,CAAcF,CAAY,CAAE,CAAA,EACjCpnC,CAAAA,CAAE,MAAQ,QAAA,EACnBmnC,CAAAA,CAAiB,IAAI,CAAA,CAEvB,MACF,CAEInnC,CAAAA,CAAE,GAAA,GAAQ,SAAW,CAACA,CAAAA,CAAE,WAC1BA,CAAAA,CAAE,cAAA,GACF4nC,CAAAA,EAAW,EAAA,CAEf,EAEMA,CAAAA,CAAa,IAAM,CACnBjoC,CAAAA,EAAY,CAACuE,EAAQ,IAAA,EAAK,GAC9BsiC,IAAStiC,CAAO,CAAA,CAChB6iC,CAAAA,CAAW,EAAE,EACTrH,CAAAA,CAAY,OAAA,GACdA,EAAY,OAAA,CAAQ,KAAA,CAAM,OAAS,MAAA,CAAA,EAEvC,CAAA,CAEA,OACE/gC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG,8FAAA,CAAgGO,CAAS,CAAA,CAAI,GAAGG,EAChI,QAAA,CAAA,CAAAooC,CAAAA,EACCloC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mIACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,UAAAC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,iCAAA,CAAkC,QAAA,CAAA,aAAA,CAAW,EAC1DA,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,mDAAA,CAAqD,QAAA,CAAAioC,EAAW,OAAA,CAAQ,CAAA,CAAA,CACvF,CAAA,CACAjoC,GAAAA,CAAC,UACC,OAAA,CAASgoC,CAAAA,CACT,UAAU,yEAAA,CAEV,QAAA,CAAAhoC,IAAC+R,CAAAA,CAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CACzB,GACF,CAAA,CAGFhS,IAAAA,CAAC,OAAI,SAAA,CAAU,sBAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,8BAAA,CACb,QAAA,CAAA,CAAAC,IAAC,QAAA,CAAA,CACC,OAAA,CAASqgC,EACT,QAAA,CAAUt/B,CAAAA,CACV,UAAU,sIAAA,CAEV,QAAA,CAAAf,IAAC2iB,SAAAA,CAAA,CAAU,UAAU,SAAA,CAAU,CAAA,CACjC,EACA3iB,GAAAA,CAAC,QAAA,CAAA,CACC,QAAS6nC,CAAAA,CACT,QAAA,CAAU9mC,CAAAA,CACV,SAAA,CAAU,uIAEV,QAAA,CAAAf,GAAAA,CAACsmC,MAAA,CAAM,SAAA,CAAU,UAAU,CAAA,CAC7B,CAAA,CAAA,CACF,EAEAvmC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iBAAA,CACb,QAAA,CAAA,CAAAC,IAAC,UAAA,CAAA,CACC,GAAA,CAAK8gC,EACL,KAAA,CAAOx7B,CAAAA,CACP,SAAU27B,CAAAA,CACV,SAAA,CAAW74B,EACX,WAAA,CAAa8/B,CAAAA,CAAc,eAAiB/gC,CAAAA,CAC5C,QAAA,CAAUpG,GAAYmnC,CAAAA,CACtB,IAAA,CAAM,EACN,SAAA,CAAW/oC,CAAAA,CACT,+LACA+oC,CAAAA,EAAe,4BACjB,EACF,CAAA,CAECI,CAAAA,GAAkB,MAAQI,CAAAA,CAAc,MAAA,CAAS,CAAA,EAChD1oC,GAAAA,CAAC0C,EAAA,CAAQ,SAAA,CAAU,4GACjB,QAAA,CAAA1C,GAAAA,CAAC,OAAI,SAAA,CAAU,KAAA,CACZ,SAAA0oC,CAAAA,CAAc,GAAA,CAAI,CAAC/pB,CAAAA,CAAMhZ,CAAAA,GACxB5F,KAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAM6oC,CAAAA,CAAcjqB,CAAI,EACjC,SAAA,CAAWxf,CAAAA,CACT,4EACAwG,CAAAA,GAAM6iC,CAAAA,CAAe,yBAA2B,8CAClD,CAAA,CAEA,UAAAxoC,GAAAA,CAACgb,CAAAA,CAAA,CAAO,GAAA,CAAK2D,CAAAA,CAAK,OAAQ,GAAA,CAAKA,CAAAA,CAAK,KAAM,QAAA,CAAUA,CAAAA,CAAK,KAAK,CAAC,CAAA,CAAG,IAAA,CAAK,IAAA,CAAK,EAC5E3e,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,qBAAA,CAAuB,QAAA,CAAA2e,EAAK,IAAA,CAAK,CAAA,CAAA,CAAA,CAR5CA,EAAK,EASZ,CACD,EACH,CAAA,CACF,CAAA,CAAA,CAEJ,EAEA5e,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,8BAAA,CACZ,QAAA,CAAA,CAAA,CAACuF,EAAQ,IAAA,EAAK,EAAK,CAAC4iC,CAAAA,EACnBnoC,IAAAA,CAAAye,SAAA,CACE,QAAA,CAAA,CAAAxe,IAAC,QAAA,CAAA,CACC,OAAA,CAAS8nC,EACT,QAAA,CAAU/mC,CAAAA,CACV,UAAU,sIAAA,CAEV,QAAA,CAAAf,IAACipC,IAAAA,CAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAC5B,CAAA,CACAjpC,GAAAA,CAAC,UACC,OAAA,CAAS+nC,CAAAA,CACT,SAAUhnC,CAAAA,CACV,SAAA,CAAU,uIAEV,QAAA,CAAAf,GAAAA,CAAC8lC,OAAA,CAAO,SAAA,CAAU,UAAU,CAAA,CAC9B,CAAA,CAAA,CACF,EAGDoC,CAAAA,CACCloC,GAAAA,CAACQ,EAAA,CACC,IAAA,CAAK,OACL,OAAA,CAAQ,OAAA,CACR,QAASggC,CAAAA,CACT,SAAA,CAAU,4EAEV,QAAA,CAAAxgC,GAAAA,CAACqhC,IAAA,CAAI,SAAA,CAAU,UAAU,CAAA,CAC3B,CAAA,CACE/7B,EAAQ,IAAA,EAAK,CACftF,IAACQ,CAAAA,CAAA,CACC,KAAK,MAAA,CACL,OAAA,CAASwoC,CAAAA,CACT,QAAA,CAAUjoC,EACV,SAAA,CAAU,oFAAA,CAEV,SAAAf,GAAAA,CAAC2nB,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,EAC5B,CAAA,CAEA3nB,GAAAA,CAAC,UACC,OAAA,CAASwgC,CAAAA,CACT,SAAUz/B,CAAAA,CACV,SAAA,CAAU,uIAEV,QAAA,CAAAf,GAAAA,CAACqhC,IAAA,CAAI,SAAA,CAAU,UAAU,CAAA,CAC3B,CAAA,CAAA,CAEJ,GACF,CAAA,CACCZ,CAAAA,EACC1gC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CACZ,QAAA,CAAA,CAAAuF,CAAAA,CAAQ,OAAO,KAAA,CAAIm7B,CAAAA,CAAAA,CACtB,GAEJ,CAEJ,CC5OO,SAASyI,EAAAA,CAAY,CAAE,IAAA,CAAAvqB,CAAAA,CAAM,QAAA6H,CAAAA,CAAS,SAAA,CAAA9mB,EAAW,GAAGG,CAAM,EAAqB,CACpF,OACEE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWZ,EAAG,4FAAA,CAA8FO,CAAS,EAAI,GAAGG,CAAAA,CAC/H,UAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2EAAA,CACb,QAAA,CAAA,CAAAC,IAAC,QAAA,CAAA,CAAO,OAAA,CAASwmB,CAAAA,CAAS,SAAA,CAAU,sEAClC,QAAA,CAAAxmB,GAAAA,CAAC+R,EAAA,CAAE,SAAA,CAAU,wBAAwB,CAAA,CACvC,CAAA,CACA/R,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mDAAmD,QAAA,CAAA,cAAA,CAAY,CAAA,CAAA,CACjF,EAEAD,IAAAA,CAAC6P,EAAAA,CAAA,CAAW,SAAA,CAAU,QAAA,CACpB,UAAA7P,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,4CAAA,CACb,QAAA,CAAA,CAAAC,IAACgb,CAAAA,CAAA,CAAO,IAAK2D,CAAAA,CAAK,MAAA,CAAQ,IAAKA,CAAAA,CAAK,IAAA,CAAM,SAAUA,CAAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAG,SAAA,CAAU,0BAA0B,CAAA,CACtG3e,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,kDAAmD,QAAA,CAAA2e,CAAAA,CAAK,KAAK,CAAA,CAC3E3e,GAAAA,CAAC,KAAE,SAAA,CAAU,+CAAA,CAAiD,SAAA2e,CAAAA,CAAK,KAAA,EAAS,oBAAoB,CAAA,CAEhG5e,IAAAA,CAAC,OAAI,SAAA,CAAU,aAAA,CACb,UAAAC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,yDAAA,CAA0D,QAAA,CAAA,OAAA,CAAK,EAC5EA,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,iDAAA,CAAmD,QAAA,CAAA2e,EAAK,GAAA,EAAO,mCAAA,CAAoC,GAClH,CAAA,CAAA,CACF,CAAA,CAEA3e,IAAC2yB,EAAAA,CAAA,EAAU,EAEX5yB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,iFAAA,CAAkF,QAAA,CAAA,cAAA,CAAY,EAC5GA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wBAAA,CACZ,QAAA,CAAA,CAAC,EAAG,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAC,EAAE,GAAA,CAAK2F,CAAAA,EACvB5F,KAAC,KAAA,CAAA,CAAY,SAAA,CAAU,2GACrB,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAI,SAAA,CAAU,iEAAA,CACb,SAAAA,GAAAA,CAACie,KAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,EAC7B,CAAA,CACAje,GAAAA,CAAC,OAAI,SAAA,CAAU,mFAAA,CAAoF,IAJ3F2F,CAKV,CACD,EACH,CAAA,CAAA,CACF,CAAA,CAEA3F,GAAAA,CAAC2yB,EAAAA,CAAA,EAAU,CAAA,CAEX3yB,GAAAA,CAAC,OAAI,SAAA,CAAU,eAAA,CACb,SAAAD,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mCAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2DACb,QAAA,CAAA,CAAAC,GAAAA,CAACmpC,KAAA,CAAK,SAAA,CAAU,UAAU,CAAA,CAC1BnpC,GAAAA,CAAC,QAAK,SAAA,CAAU,qBAAA,CAAsB,8BAAkB,CAAA,CAAA,CAC1D,CAAA,CACAA,IAAC+G,EAAAA,CAAA,EAAO,GACV,CAAA,CACF,CAAA,CAEA/G,IAAC2yB,EAAAA,CAAA,EAAU,EAEX5yB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,QAAA,CAAA,CAAO,UAAU,8JAAA,CAChB,QAAA,CAAA,CAAAC,IAACopC,GAAAA,CAAA,CAAI,UAAU,SAAA,CAAU,CAAA,CAAE,SACpBzqB,CAAAA,CAAK,IAAA,CAAA,CACd,EACA5e,IAAAA,CAAC,QAAA,CAAA,CAAO,UAAU,8JAAA,CAChB,QAAA,CAAA,CAAAC,IAACsiB,MAAAA,CAAA,CAAO,UAAU,SAAA,CAAU,CAAA,CAAE,eAEhC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,GACF,CAEJ,CCrEO,SAAS+mB,GAAa,CAAE,OAAA,CAAA/D,CAAAA,CAAS,QAAA,CAAAgE,EAAU,SAAA,CAAA5pC,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAsB,CAC1F,OACEE,IAAAA,CAAC,OACC,SAAA,CAAWZ,CAAAA,CACT,oHACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAA,CAAAG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gDACb,QAAA,CAAAA,GAAAA,CAACmmC,MAAA,CAAM,SAAA,CAAU,UAAU,CAAA,CAC7B,CAAA,CACApmC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,KAAE,SAAA,CAAU,iCAAA,CAAkC,uBAAW,CAAA,CAC1DA,GAAAA,CAAC,KAAE,SAAA,CAAU,mDAAA,CAAqD,QAAA,CAAAslC,CAAAA,CAAQ,QAAQ,CAAA,CAAA,CACpF,CAAA,CACCgE,GACCtpC,GAAAA,CAAC,QAAA,CAAA,CACC,QAASspC,CAAAA,CACT,SAAA,CAAU,4FAEV,QAAA,CAAAtpC,GAAAA,CAAC+R,EAAA,CAAE,SAAA,CAAU,UAAU,CAAA,CACzB,CAAA,CAAA,CAEJ,CAEJ,CCtBO,SAASw3B,EAAAA,CAAW,CACzB,KAAAh5B,CAAAA,CAAO,MAAA,CACP,QAAA+0B,CAAAA,CACA,MAAA,CAAA9tB,CAAAA,CACA,OAAA,CAAAgP,EACA,SAAA,CAAA9mB,CAAAA,CACA,GAAGG,CACL,CAAA,CAAoB,CAClB,IAAM2pC,CAAAA,CAAQ,CACZ,IAAA,CAAM/xB,IAAAA,CACN,QAAS0J,WAAAA,CACT,KAAA,CAAOA,YACP,OAAA,CAAS0Q,YACX,EAEMgD,CAAAA,CAAS,CACb,KAAM,oEAAA,CACN,OAAA,CAAS,yEACT,KAAA,CAAO,gEAAA,CACP,QAAS,wEACX,CAAA,CAEM5d,EAAOuyB,CAAAA,CAAMj5B,CAAI,EAEvB,OACExQ,IAAAA,CAAC,OACC,SAAA,CAAWZ,CAAAA,CACT,+FACA01B,CAAAA,CAAOtkB,CAAI,EACX7Q,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,UAAAG,GAAAA,CAACiX,CAAAA,CAAA,CAAK,SAAA,CAAU,kBAAA,CAAmB,EACnCjX,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,oBAAA,CAAsB,QAAA,CAAAslC,EAAQ,CAAA,CAE1C9tB,CAAAA,EACCxX,IAAC,QAAA,CAAA,CACC,OAAA,CAASwX,EAAO,OAAA,CAChB,SAAA,CAAU,6DAET,QAAA,CAAAA,CAAAA,CAAO,MACV,CAAA,CAGDgP,CAAAA,EACCxmB,IAAC,QAAA,CAAA,CACC,OAAA,CAASwmB,EACT,SAAA,CAAU,2EAAA,CAEV,SAAAxmB,GAAAA,CAAC+R,CAAAA,CAAA,CAAE,SAAA,CAAU,SAAA,CAAU,EACzB,CAAA,CAAA,CAEJ,CAEJ,CC7DO,SAAS03B,EAAAA,CAAc,CAAE,KAAAl6B,CAAAA,CAAM,SAAA,CAAA7P,EAAW,GAAGG,CAAM,EAAuB,CAC/E,OACEG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,4CAAA,CAA8CO,CAAS,EAAI,GAAGG,CAAAA,CAC/E,SAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mOAAA,CACb,QAAA,CAAA,CAAAC,IAAC6N,QAAAA,CAAA,CAAS,UAAU,SAAA,CAAU,CAAA,CAC7B0B,GACH,CAAA,CACF,CAEJ,CCTO,SAASm6B,GAAgB,CAAE,MAAA,CAAAzqB,EAAS,SAAA,CAAW,IAAA,CAAAve,EAAO,IAAA,CAAM,SAAA,CAAAhB,EAAW,GAAGG,CAAM,EAAyB,CAC9G,IAAMg1B,EAAS,CACb,MAAA,CAAQ,eACR,OAAA,CAAS,aAAA,CACT,KAAM,cAAA,CACN,IAAA,CAAM,YACR,CAAA,CAEM9c,CAAAA,CAAQ,CACZ,EAAA,CAAI,SAAA,CACJ,GAAI,SAAA,CACJ,EAAA,CAAI,SACN,CAAA,CAEA,OACE/X,IAAC,MAAA,CAAA,CACC,SAAA,CAAWb,EACT,+DAAA,CACA01B,CAAAA,CAAO5V,CAAM,CAAA,CACblH,CAAAA,CAAMrX,CAAI,CAAA,CACVue,IAAW,QAAA,EAAY,eAAA,CACvBvf,CACF,CAAA,CACC,GAAGG,EACN,CAEJ,CC3BO,SAAS8pC,EAAAA,CAAc,CAAE,QAAArkC,CAAAA,CAAS,SAAA,CAAA5F,EAAW,GAAGG,CAAM,EAAuB,CAClF,OACEG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,0BAAA,CAA4BO,CAAS,EAAI,GAAGG,CAAAA,CAC7D,SAAAG,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iKAAA,CACZ,QAAA,CAAAsF,EACH,CAAA,CACF,CAEJ,CCDO,SAASskC,GAAY,CAC1B,KAAA,CAAAC,EACA,MAAA,CAAArG,CAAAA,CACA,OAAAC,CAAAA,CACA,QAAA,CAAAG,EACA,WAAA,CAAAkG,CAAAA,CAAc,EAAC,CACf,SAAA,CAAApqC,EACA,GAAGG,CACL,EAAqB,CACnB,IAAMkqC,EAAaD,CAAAA,CAAY,MAAA,CAAS,EACpC,CAAA,EAAGA,CAAAA,CAAY,KAAK,IAAI,CAAC,IAAIA,CAAAA,CAAY,MAAA,GAAW,CAAA,CAAI,IAAA,CAAO,KAAK,CAAA,UAAA,CAAA,CACpE,WAAA,CAEJ,OACE/pC,IAAAA,CAAC,KAAA,CAAA,CACC,UAAWZ,CAAAA,CACT,wJAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEJ,QAAA,CAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACZ,UAAAyjC,CAAAA,EACCxjC,GAAAA,CAAC,UAAO,OAAA,CAASwjC,CAAAA,CAAQ,UAAU,+EAAA,CACjC,QAAA,CAAAxjC,IAAC8jC,SAAAA,CAAA,CAAU,UAAU,0CAAA,CAA2C,CAAA,CAClE,EAGF9jC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CAA0B,OAAA,CAASyjC,EAChD,QAAA,CAAA1jC,IAAAA,CAAC,OAAI,SAAA,CAAU,iBAAA,CACZ,QAAA,CAAA,CAAA8pC,CAAAA,CAAM,QAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAACG,CAAAA,CAAQrkC,CAAAA,GACtC3F,IAACgb,CAAAA,CAAA,CAEC,IAAKgvB,CAAAA,CAAO,MAAA,CACZ,IAAKA,CAAAA,CAAO,IAAA,CACZ,SAAUA,CAAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CACvB,SAAA,CAAW7qC,EAAG,yCAAA,CAA2CwG,CAAAA,GAAM,EAAI,MAAA,CAAS,KAAK,GAJ5EqkC,CAAAA,CAAO,EAKd,CACD,CAAA,CACAH,CAAAA,CAAM,QAAQ,MAAA,CAAS,CAAA,EACtB9pC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0LAA0L,QAAA,CAAA,CAAA,GAAA,CACrM8pC,CAAAA,CAAM,OAAA,CAAQ,MAAA,CAAS,GAC3B,CAAA,CAAA,CAEJ,CAAA,CACF,EAEA9pC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wBAAA,CAAyB,OAAA,CAAS0jC,EAC/C,QAAA,CAAA,CAAAzjC,GAAAA,CAAC,MAAG,SAAA,CAAU,mEAAA,CAAqE,SAAA6pC,CAAAA,CAAM,IAAA,CAAK,EAC9F7pC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAWb,CAAAA,CACZ,yCAAA,CACAykC,EAAW,yCAAA,CAA4C,kCACzD,EACG,QAAA,CAAAA,CAAAA,CAAWmG,EAAa,CAAA,EAAGF,CAAAA,CAAM,QAAQ,MAAM,CAAA,QAAA,CAAA,CAClD,GACF,CAAA,CAAA,CACF,CAAA,CAEA9pC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,QAAA,CAAA,CAAO,SAAA,CAAU,mHAChB,QAAA,CAAAA,GAAAA,CAAC+jC,MAAA,CAAM,SAAA,CAAU,UAAU,CAAA,CAC7B,CAAA,CACA/jC,IAAC,QAAA,CAAA,CAAO,SAAA,CAAU,mHAChB,QAAA,CAAAA,GAAAA,CAACgkC,MAAA,CAAM,SAAA,CAAU,UAAU,CAAA,CAC7B,CAAA,CACAhkC,IAAC,QAAA,CAAA,CACC,OAAA,CAASyjC,EACT,SAAA,CAAU,kHAAA,CAEV,SAAAzjC,GAAAA,CAACmjB,YAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,EACpC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC5EO,SAAS8mB,EAAAA,CAAY,CAAE,KAAA,CAAA3hB,EAAO,aAAA,CAAA4hB,CAAAA,CAAe,SAAA5qB,CAAAA,CAAU,SAAA,CAAA5f,EAAW,GAAGG,CAAM,EAAqB,CACrG,OAAIyoB,EAAM,MAAA,GAAW,CAAA,CAAU,KAG7BtoB,GAAAA,CAAC0C,CAAAA,CAAA,CACC,SAAA,CAAWvD,CAAAA,CACT,2EACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEJ,QAAA,CAAAE,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,MACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAI,SAAA,CAAU,0HAAA,CAA2H,2BAE1I,CAAA,CACCsoB,CAAAA,CAAM,IAAI,CAAC3J,CAAAA,CAAMhZ,IAChB5F,IAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMuf,EAASX,CAAI,CAAA,CAC5B,UAAWxf,CAAAA,CACT,2EAAA,CACAwG,IAAMukC,CAAAA,CAAgB,wBAAA,CAA2B,8CACnD,CAAA,CAEA,QAAA,CAAA,CAAAlqC,IAACgb,CAAAA,CAAA,CAAO,IAAK2D,CAAAA,CAAK,MAAA,CAAQ,IAAKA,CAAAA,CAAK,IAAA,CAAM,SAAUA,CAAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAG,IAAA,CAAK,KAAK,CAAA,CAC5E5e,IAAAA,CAAC,OAAI,SAAA,CAAU,gBAAA,CACb,UAAAC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,8BAAA,CAAgC,QAAA,CAAA2e,EAAK,IAAA,CAAK,CAAA,CACtDA,EAAK,MAAA,EAAU3e,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAWb,EAAG,aAAA,CAAewG,CAAAA,GAAMukC,EAAgB,eAAA,CAAkB,eAAe,EAAI,QAAA,CAAAvrB,CAAAA,CAAK,OAAO,CAAA,CAAA,CACzH,CAAA,CAAA,CAAA,CAXKA,EAAK,EAYZ,CACD,GACH,CAAA,CACF,CAEJ,CCrCA,IAAMwrB,EAAAA,CAAmB,CACvB,CAAE,IAAA,CAAM,SAAA,CAAW,OAAQ,CAAC,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,cAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAI,CAAE,CAAA,CACtiB,CAAE,IAAA,CAAM,QAAA,CAAU,OAAQ,CAAC,cAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,cAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAI,CAAE,CAAA,CAC7I,CAAE,IAAA,CAAM,UAAA,CAAY,OAAQ,CAAC,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,cAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,cAAA,CAAM,SAAK,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,cAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,iBAAA,CAAO,YAAM,WAAI,CAAE,EACvT,CAAE,IAAA,CAAM,aAAc,MAAA,CAAQ,CAAC,SAAK,WAAA,CAAM,WAAA,CAAM,SAAK,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,QAAA,CAAK,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,cAAA,CAAM,WAAA,CAAM,eAAM,WAAA,CAAM,WAAA,CAAM,kBAAO,WAAA,CAAM,WAAA,CAAM,eAAM,WAAA,CAAM,WAAA,CAAM,kBAAO,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAI,CAAE,CAAA,CAChV,CAAE,IAAA,CAAM,QAAA,CAAU,OAAQ,CAAC,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,6BAAA,CAAS,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,iBAAA,CAAO,kBAAO,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,0BAAA,CAAS,YAAM,uBAAA,CAAQ,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,kBAAO,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,iBAAA,CAAO,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,cAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,YAAM,WAAA,CAAM,WAAA,CAAM,eAAM,WAAA,CAAM,QAAA,CAAK,eAAM,cAAA,CAAM,WAAA,CAAM,YAAM,iBAAA,CAAO,WAAA,CAAM,eAAM,iBAAA,CAAO,cAAA,CAAM,kBAAO,cAAA,CAAM,iBAAA,CAAO,kBAAO,cAAA,CAAM,iBAAA,CAAO,kBAAO,cAAA,CAAM,cAAA,CAAM,eAAM,iBAAA,CAAO,WAAA,CAAM,YAAM,WAAA,CAAM,cAAA,CAAM,eAAM,WAAA,CAAM,iBAAK,CAAE,CACnsC,EAEO,SAASC,EAAAA,CAAY,CAAE,QAAA,CAAA9qB,CAAAA,CAAU,UAAA5f,CAAAA,CAAW,GAAGG,CAAM,CAAA,CAAqB,CAC/E,GAAM,CAACoL,CAAAA,CAAQ+R,CAAS,CAAA,CAAI5Y,QAAAA,CAAS,EAAE,CAAA,CAEjCimC,CAAAA,CAAqBF,GAAiB,GAAA,CAAIG,CAAAA,GAAQ,CACtD,GAAGA,CAAAA,CACH,OAAQA,CAAAA,CAAI,MAAA,CAAO,OAAOlpC,CAAAA,EAAK6J,CAAAA,GAAW,IAAM7J,CAAAA,CAAE,QAAA,CAAS6J,CAAM,CAAC,CACpE,EAAE,CAAA,CAAE,MAAA,CAAOq/B,GAAOA,CAAAA,CAAI,MAAA,CAAO,MAAA,CAAS,CAAC,EAEvC,OACEvqC,IAAAA,CAAC2C,EAAA,CAAQ,SAAA,CAAWvD,EAAG,oDAAA,CAAsDO,CAAS,EAAI,GAAGG,CAAAA,CAC3F,UAAAG,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mDAAA,CACb,QAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WACb,QAAA,CAAA,CAAAC,GAAAA,CAAC2d,OAAA,CAAO,SAAA,CAAU,uEAAuE,CAAA,CACzF3d,GAAAA,CAAC,SACC,IAAA,CAAK,MAAA,CACL,MAAOiL,CAAAA,CACP,QAAA,CAAW7J,GAAM4b,CAAAA,CAAU5b,CAAAA,CAAE,OAAO,KAAK,CAAA,CACzC,YAAY,iBAAA,CACZ,SAAA,CAAU,2IAAA,CACZ,CAAA,CAAA,CACF,EACF,CAAA,CAEApB,GAAAA,CAAC,OAAI,SAAA,CAAU,6CAAA,CACZ,SAAAqqC,CAAAA,CAAmB,GAAA,CAAIC,GACtBvqC,IAAAA,CAAC,KAAA,CAAA,CAAmB,UAAU,MAAA,CAC5B,QAAA,CAAA,CAAAC,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,yEAA0E,QAAA,CAAAsqC,CAAAA,CAAI,KAAK,CAAA,CACjGtqC,GAAAA,CAAC,OAAI,SAAA,CAAU,wBAAA,CACZ,SAAAsqC,CAAAA,CAAI,MAAA,CAAO,IAAI5C,CAAAA,EACd1nC,GAAAA,CAAC,UAEC,OAAA,CAAS,IAAMsf,EAASooB,CAAK,CAAA,CAC7B,UAAU,wHAAA,CAET,QAAA,CAAAA,GAJIA,CAKP,CACD,CAAA,CACH,CAAA,CAAA,CAAA,CAZQ4C,EAAI,IAad,CACD,EACH,CAAA,CAAA,CACF,CAEJ,CC/CO,SAASC,EAAAA,EAAsC,CACpD,GAAM,CAACrC,CAAAA,CAAasC,CAAc,CAAA,CAAIpmC,QAAAA,CAAS,KAAK,CAAA,CAC9C,CAACN,EAAU2mC,CAAW,CAAA,CAAIrmC,SAAS,CAAC,CAAA,CACpC,CAACsmC,CAAAA,CAAWC,CAAY,CAAA,CAAIvmC,QAAAA,CAAsB,IAAI,CAAA,CACtD,CAACwmC,EAAUC,CAAW,CAAA,CAAIzmC,SAAwB,IAAI,CAAA,CAEtD0mC,EAAgB5pC,MAAAA,CAA6B,IAAI,EACjD6pC,CAAAA,CAAgB7pC,MAAAA,CAAsB,IAAI,CAAA,CAC1C8pC,CAAAA,CAAS9pC,OAAe,EAAE,EAE1B+pC,CAAAA,CAAiB9hC,WAAAA,CAAY,SAAY,CAC7C,GAAI,CACF,IAAM+hC,CAAAA,CAAS,MAAM,SAAA,CAAU,YAAA,CAAa,aAAa,CAAE,KAAA,CAAO,EAAK,CAAC,CAAA,CACxEJ,EAAc,OAAA,CAAU,IAAI,aAAA,CAAcI,CAAM,EAChDF,CAAAA,CAAO,OAAA,CAAU,EAAC,CAElBF,CAAAA,CAAc,QAAQ,eAAA,CAAmB1pC,CAAAA,EAAM,CACzCA,CAAAA,CAAE,IAAA,CAAK,KAAO,CAAA,EAChB4pC,CAAAA,CAAO,QAAQ,IAAA,CAAK5pC,CAAAA,CAAE,IAAI,EAE9B,CAAA,CAEA0pC,EAAc,OAAA,CAAQ,MAAA,CAAS,IAAM,CACnC,IAAMK,EAAO,IAAI,IAAA,CAAKH,EAAO,OAAA,CAAS,CAAE,KAAM,YAAa,CAAC,EACtD9F,CAAAA,CAAM,GAAA,CAAI,gBAAgBiG,CAAI,CAAA,CACpCR,EAAaQ,CAAI,CAAA,CACjBN,CAAAA,CAAY3F,CAAG,EAGfgG,CAAAA,CAAO,SAAA,GAAY,OAAA,CAAQE,CAAAA,EAASA,EAAM,IAAA,EAAM,EAClD,CAAA,CAEAN,CAAAA,CAAc,QAAQ,KAAA,EAAM,CAC5BN,EAAe,CAAA,CAAI,CAAA,CACnBC,EAAY,CAAC,CAAA,CAEbM,EAAc,OAAA,CAAU,MAAA,CAAO,YAAY,IAAM,CAC/CN,EAAYpiC,CAAAA,EAAQA,CAAAA,CAAO,CAAC,EAC9B,CAAA,CAAG,GAAI,EACT,CAAA,MAASyO,EAAK,CACZ,MAAA,OAAA,CAAQ,MAAM,2BAAA,CAA6BA,CAAG,EACxCA,CACR,CACF,CAAA,CAAG,EAAE,CAAA,CAECu0B,CAAAA,CAAgBliC,YAAY,IAAM,CAClC2hC,EAAc,OAAA,EAAW5C,CAAAA,GAC3B4C,EAAc,OAAA,CAAQ,IAAA,GACtBN,CAAAA,CAAe,KAAK,EAChBO,CAAAA,CAAc,OAAA,EAChB,cAAcA,CAAAA,CAAc,OAAO,GAGzC,CAAA,CAAG,CAAC7C,CAAW,CAAC,CAAA,CAEVoD,EAAkBniC,WAAAA,CAAY,IAAM,CACpC2hC,CAAAA,CAAc,OAAA,EAAW5C,IAC3B4C,CAAAA,CAAc,OAAA,CAAQ,MAAK,CAC3BN,CAAAA,CAAe,KAAK,CAAA,CAChBO,CAAAA,CAAc,SAChB,aAAA,CAAcA,CAAAA,CAAc,OAAO,CAAA,CAErCJ,EAAa,IAAI,CAAA,CACjBE,EAAY,IAAI,CAAA,CAChBJ,EAAY,CAAC,CAAA,EAEjB,EAAG,CAACvC,CAAW,CAAC,CAAA,CAEVqD,CAAAA,CAAapiC,YAAY,IAAM,CACnCwhC,EAAa,IAAI,CAAA,CACjBE,EAAY,IAAI,CAAA,CAChBJ,EAAY,CAAC,EACf,EAAG,EAAE,EAEL,OAAO,CACL,YAAAvC,CAAAA,CACA,QAAA,CAAApkC,EACA,SAAA,CAAA4mC,CAAAA,CACA,SAAAE,CAAAA,CACA,cAAA,CAAAK,EACA,aAAA,CAAAI,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,WAAAC,CACF,CACF,CCtFO,SAASC,EAAAA,CAAc,CAAE,MAAA,CAAA5D,CAAAA,CAAQ,SAAA0B,CAAAA,CAAU,SAAA,CAAA5pC,EAAW,GAAGG,CAAM,EAAuB,CAC3F,GAAM,CACJ,WAAA,CAAAqoC,CAAAA,CACA,SAAApkC,CAAAA,CACA,SAAA,CAAA4mC,EACA,cAAA,CAAAO,CAAAA,CACA,cAAAI,CAAAA,CACA,eAAA,CAAAC,CACF,CAAA,CAAIf,EAAAA,GAEJ/lC,SAAAA,CAAU,KACRymC,GAAe,CACR,IAAMK,CAAAA,EAAgB,CAAA,CAC5B,CAACL,CAAAA,CAAgBK,CAAe,CAAC,CAAA,CAEpC,IAAMpiB,EAAcD,CAAAA,EAAc,CAChC,IAAMG,CAAAA,CAAO,IAAA,CAAK,MAAMH,CAAAA,CAAI,EAAE,EACxBI,CAAAA,CAAOJ,CAAAA,CAAI,GACjB,OAAO,CAAA,EAAGG,CAAI,CAAA,CAAA,EAAIC,CAAAA,CAAK,UAAS,CAAE,QAAA,CAAS,EAAG,GAAG,CAAC,EACpD,CAAA,CAEA,OACEtpB,KAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,EACT,wJAAA,CACAO,CACF,EACC,GAAGG,CAAAA,CAEJ,UAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2EAAA,CACb,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,+CAAA,CAAgD,CAAA,CAC/DA,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8BAA+B,QAAA,CAAAkpB,CAAAA,CAAWplB,CAAQ,CAAA,CAAE,CAAA,CAAA,CACtE,EAEA9D,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2CAAA,CAEZ,QAAA,CAAA,CAAC,GAAG,KAAA,CAAM,EAAE,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC4L,CAAAA,CAAGjG,CAAAA,GACtB3F,IAAC,KAAA,CAAA,CAEC,SAAA,CAAU,6DACV,KAAA,CAAO,CACL,OAAQkoC,CAAAA,CAAc,CAAA,EAAG,GAAK,IAAA,CAAK,MAAA,GAAW,EAAE,CAAA,CAAA,CAAA,CAAM,KAAA,CACtD,cAAA,CAAgB,GAAGviC,CAAAA,CAAI,GAAI,GAC7B,CAAA,CAAA,CALKA,CAMP,CACD,CAAA,CACH,CAAA,CAEA5F,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,UACC,OAAA,CAAS,IAAM,CAAEsrC,CAAAA,EAAgB,CAAGhC,IAAY,CAAA,CAChD,UAAU,2FAAA,CAEV,QAAA,CAAAtpC,IAACsiB,MAAAA,CAAA,CAAO,UAAU,SAAA,CAAU,CAAA,CAC9B,EAEC4lB,CAAAA,CACCloC,GAAAA,CAACQ,EAAA,CACC,IAAA,CAAK,OACL,OAAA,CAAQ,OAAA,CACR,QAAS6qC,CAAAA,CACT,SAAA,CAAU,qDAAA,CAEV,QAAA,CAAArrC,IAAConB,MAAAA,CAAA,CAAO,UAAU,sBAAA,CAAuB,CAAA,CAC3C,EAEApnB,GAAAA,CAACQ,CAAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,QAAS,IAAMkqC,CAAAA,EAAa9C,EAAO8C,CAAAA,CAAW5mC,CAAQ,EACtD,SAAA,CAAU,uDAAA,CAEV,SAAA9D,GAAAA,CAAC2nB,IAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,EAC5B,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CC5EO,SAAS8jB,EAAAA,CAAc,CAC5B,QAAA,CAAAlf,CAAAA,CACA,QAAAmf,CAAAA,CACA,aAAA,CAAAC,EACA,OAAA,CAAAnlB,CAAAA,CACA,UAAA9mB,CAAAA,CACA,GAAGG,CACL,CAAA,CAAuB,CACrB,GAAM,CAAC2rB,CAAAA,CAAOogB,CAAQ,CAAA,CAAIxnC,QAAAA,CAAS,EAAE,CAAA,CAE/B4+B,CAAAA,CAAgB5hC,GAA2C,CAC/D,IAAMoP,EAAMpP,CAAAA,CAAE,MAAA,CAAO,MACrBwqC,CAAAA,CAASp7B,CAAG,EACZ+b,CAAAA,CAAS/b,CAAG,EACd,CAAA,CAEA,OACEzQ,KAAC,KAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,0IAAA,CACAO,CACF,CAAA,CACC,GAAGG,EAEJ,QAAA,CAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,qFAAA,CACb,UAAAC,GAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,yCAAA,CAA0C,QAAA,CAAA,iBAAA,CAAe,EACvEA,GAAAA,CAAC,QAAA,CAAA,CAAO,QAASwmB,CAAAA,CAAS,SAAA,CAAU,4DAClC,QAAA,CAAAxmB,GAAAA,CAAC+R,EAAA,CAAE,SAAA,CAAU,wBAAwB,CAAA,CACvC,CAAA,CAAA,CACF,EAEA/R,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,KAAA,CACb,QAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WACb,QAAA,CAAA,CAAAC,GAAAA,CAAC2d,OAAA,CAAO,SAAA,CAAU,gEAAA,CAAiE,CAAA,CACnF3d,IAAC,OAAA,CAAA,CACC,IAAA,CAAK,OACL,KAAA,CAAOwrB,CAAAA,CACP,SAAUwX,CAAAA,CACV,WAAA,CAAY,4BACZ,SAAA,CAAU,sIAAA,CACV,UAAS,IAAA,CACX,CAAA,CAAA,CACF,EACF,CAAA,CAEAhjC,GAAAA,CAAC,OAAI,SAAA,CAAU,4BAAA,CACZ,SAAAwrB,CAAAA,EAASkgB,CAAAA,CAAQ,SAAW,CAAA,CAC3B1rC,GAAAA,CAAC,OAAI,SAAA,CAAU,kDAAA,CACb,SAAAD,IAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,SAAA,CAAU,QAAA,CAAA,CAAA,yBAAA,CAAwByrB,EAAM,GAAA,CAAA,CAAC,CAAA,CACxD,EAEAxrB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACZ,QAAA,CAAA0rC,CAAAA,CAAQ,GAAA,CAAIpE,GACXvnC,IAAAA,CAAC,QAAA,CAAA,CAEC,QAAS,IAAM4rC,CAAAA,CAAcrE,CAAG,CAAA,CAChC,SAAA,CAAU,+FAEV,QAAA,CAAA,CAAAvnC,IAAAA,CAAC,OAAI,SAAA,CAAU,2BAAA,CACb,UAAAC,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,+CAAA,CACb,QAAA,CAAAsnC,EAAI,SAAA,CAAU,kBAAA,GACjB,CAAA,CACAtnC,GAAAA,CAAC,QAAK,SAAA,CAAU,2BAAA,CACb,SAAAsnC,CAAAA,CAAI,SAAA,CAAU,mBAAmB,EAAC,CAAG,CAAE,IAAA,CAAM,SAAA,CAAW,OAAQ,SAAU,CAAC,EAC9E,CAAA,CAAA,CACF,CAAA,CACAtnC,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,6GAAA,CACV,QAAA,CAAAsnC,EAAI,OAAA,CACP,CAAA,CAAA,CAAA,CAdKA,EAAI,EAeX,CACD,EACH,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CC5EO,SAASuE,EAAAA,EAA0B,CACxC,GAAM,CAACpgB,CAAAA,CAAQqgB,CAAS,CAAA,CAAI1nC,QAAAA,CAAuB,CACjD,OAAA,CAAS,CAAA,CACT,QAAS,CAAA,CACT,eAAA,CAAiB,EACjB,eAAA,CAAiB,CACnB,CAAC,CAAA,CAEK2nC,CAAAA,CAAU7qC,MAAAA,CAAO,KAAK,EAEtB+X,CAAAA,CAAe9P,WAAAA,CAAY,IAAM,CAChC4iC,CAAAA,CAAQ,UACX,MAAA,CAAO,qBAAA,CAAsB,IAAM,CACjC,IAAMxqC,EAAI,MAAA,CAAO,OAAA,CACXC,EAAI,MAAA,CAAO,OAAA,CAEXyL,EAAQ,QAAA,CAAS,eAAA,CAAgB,YAAc,QAAA,CAAS,eAAA,CAAgB,YACxEsM,CAAAA,CAAS,QAAA,CAAS,gBAAgB,YAAA,CAAe,QAAA,CAAS,gBAAgB,YAAA,CAEhFuyB,CAAAA,CAAU,CACR,OAAA,CAASvqC,CAAAA,CACT,QAASC,CAAAA,CACT,eAAA,CAAiByL,EAAQ,CAAA,CAAI1L,CAAAA,CAAI0L,EAAQ,CAAA,CACzC,eAAA,CAAiBsM,CAAAA,CAAS,CAAA,CAAI/X,EAAI+X,CAAAA,CAAS,CAC7C,CAAC,CAAA,CAEDwyB,CAAAA,CAAQ,QAAU,MACpB,CAAC,EAEDA,CAAAA,CAAQ,OAAA,CAAU,MAEtB,CAAA,CAAG,EAAE,CAAA,CAEL,OAAAvnC,UAAU,KACR,MAAA,CAAO,iBAAiB,QAAA,CAAUyU,CAAAA,CAAc,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CACjEA,CAAAA,GAEO,IAAM,MAAA,CAAO,oBAAoB,QAAA,CAAUA,CAAY,GAC7D,CAACA,CAAY,CAAC,CAAA,CAEVwS,CACT,CC3CO,SAASugB,GAAe,CAC7B,SAAA,CAAAtsC,EACA,KAAA,CAAAoC,CAAAA,CAAQ,cACR,MAAA,CAAAyX,CAAAA,CAAS,EACT,QAAA,CAAAzQ,CAAAA,CAAW,MACX,GAAGjJ,CACL,EAAwB,CACtB,GAAM,CAAE,eAAA,CAAAosC,CAAgB,EAAIJ,EAAAA,EAAU,CAEtC,OACE7rC,GAAAA,CAAC,KAAA,CAAA,CACC,UAAWb,CAAAA,CACT,yDAAA,CACA2J,IAAa,KAAA,CAAQ,OAAA,CAAU,WAC/BpJ,CACF,CAAA,CACA,MAAO,CAAE,MAAA,CAAA6Z,CAAO,CAAA,CACf,GAAG1Z,EAEJ,QAAA,CAAAG,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,EAAG,4CAAA,CAA8C2C,CAAK,EACjE,KAAA,CAAO,CACL,MAAO,CAAA,EAAGmqC,CAAAA,CAAkB,GAAG,CAAA,CAAA,CAAA,CAC/B,SAAA,CAAWA,EAAkB,CAAA,CAAI,CAAA,SAAA,EAAYnqC,EAAM,OAAA,CAAQ,KAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAK,MAClF,CAAA,CACF,CAAA,CACF,CAEJ,CC/BO,IAAMoqC,GAAU1sC,WAAAA,CAAM,UAAA,CAC3B,CAAC,CAAE,WAAA,CAAAqQ,EAAc,YAAA,CAAc,SAAA,CAAAnQ,EAAW,GAAGG,CAAM,CAAA,CAAGC,CAAAA,GAElDE,IAAC,IAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CACT,wCACA,CACE,aAAA,CAAe0Q,IAAgB,YAAA,CAC/B,aAAA,CAAeA,IAAgB,UACjC,CAAA,CACAnQ,CACF,CAAA,CACC,GAAGG,EACN,CAGN,EAEAqsC,GAAQ,WAAA,CAAc,SAAA,KCnBTC,EAAAA,CAAM3sC,WAAAA,CAAM,WACvB,CAAC,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAAC,EAAW,GAAGG,CAAM,EAAGC,CAAAA,GAEhCE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWX,CAAAA,CACT,+JACAO,CACF,CAAA,CACC,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,EACH,CAGN,EAEA0sC,GAAI,WAAA,CAAc,KAAA,CCTlB,IAAMvgB,EAAAA,CAAmC,CACvC,KAAA,CAAO,QAAA,CACP,SAAU,IAAM,IAClB,EAEMwgB,EAAAA,CAAuBtiC,aAAAA,CAAkC8hB,EAAY,CAAA,CAEpE,SAASygB,GAAc,CAC5B,QAAA,CAAA5sC,CAAAA,CACA,YAAA,CAAA6sC,EAAe,QAAA,CACf,UAAA,CAAAC,EAAa,eAAA,CACb,GAAG1sC,CACL,CAAA,CAAuB,CACrB,GAAM,CAACo1B,CAAAA,CAAOuX,CAAQ,CAAA,CAAIpoC,QAAAA,CACxB,IAAO,YAAA,CAAa,OAAA,CAAQmoC,CAAU,CAAA,EAAeD,CACvD,EAEA9nC,SAAAA,CAAU,IAAM,CACd,IAAMioC,CAAAA,CAAO,OAAO,QAAA,CAAS,eAAA,CAI7B,GAFAA,CAAAA,CAAK,SAAA,CAAU,OAAO,OAAA,CAAS,MAAM,EAEjCxX,CAAAA,GAAU,QAAA,CAAU,CACtB,IAAMyX,CAAAA,CAAa,OAAO,UAAA,CAAW,8BAA8B,CAAA,CAE7DC,CAAAA,CAAmB,IAAM,CAC7BF,CAAAA,CAAK,UAAU,MAAA,CAAO,OAAA,CAAS,MAAM,CAAA,CACrCA,CAAAA,CAAK,UAAU,GAAA,CAAIC,CAAAA,CAAW,QAAU,MAAA,CAAS,OAAO,EAC1D,CAAA,CAEA,OAAAC,GAAiB,CAEjBD,CAAAA,CAAW,iBAAiB,QAAA,CAAUC,CAAgB,EAC/C,IAAMD,CAAAA,CAAW,oBAAoB,QAAA,CAAUC,CAAgB,CACxE,CAEAF,CAAAA,CAAK,UAAU,GAAA,CAAIxX,CAAK,EAC1B,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAMhzB,CAAAA,CAAQ,CACZ,KAAA,CAAAgzB,CAAAA,CACA,SAAWA,CAAAA,EAAiB,CAC1B,aAAa,OAAA,CAAQsX,CAAAA,CAAYtX,CAAK,CAAA,CACtCuX,CAAAA,CAASvX,CAAK,EAChB,CACF,EAEA,OACEj1B,GAAAA,CAACosC,GAAqB,QAAA,CAArB,CAA+B,GAAGvsC,CAAAA,CAAO,KAAA,CAAOoC,EAC9C,QAAA,CAAAxC,CAAAA,CACH,CAEJ,CAEO,IAAMmtC,GAAW,IAAM,CAC5B,IAAMtiC,CAAAA,CAAUC,UAAAA,CAAW6hC,EAAoB,CAAA,CAE/C,GAAI9hC,IAAY,MAAA,CACd,MAAM,IAAI,KAAA,CAAM,8CAA8C,EAEhE,OAAOA,CACT,ECvEO,SAASuiC,IAAc,CAC5B,GAAM,CAAE,QAAA,CAAAL,CAAAA,CAAU,MAAAvX,CAAM,CAAA,CAAI2X,IAAS,CAErC,OACE7sC,KAACS,CAAAA,CAAA,CACC,QAAQ,OAAA,CACR,IAAA,CAAK,OACL,OAAA,CAAS,IAAMgsC,EAASvX,CAAAA,GAAU,OAAA,CAAU,OAAS,OAAO,CAAA,CAE5D,UAAAj1B,GAAAA,CAAC8sC,GAAAA,CAAA,CAAI,SAAA,CAAU,sFAAA,CAAuF,CAAA,CACtG9sC,GAAAA,CAAC+sC,KAAA,CAAK,SAAA,CAAU,+FAA+F,CAAA,CAC/G/sC,GAAAA,CAAC,QAAK,SAAA,CAAU,SAAA,CAAU,wBAAY,CAAA,CAAA,CACxC,CAEJ,CCRO,SAASgtC,EAAAA,CAAYC,CAAAA,CAAiCC,EAAY,IAAA,CAAM,CAC7E,GAAM,CAACrhB,CAAAA,CAAOC,CAAQ,CAAA,CAAI1nB,QAAAA,CAAwB,CAChD,IAAA,CAAM,IAAA,CACN,MAAO,IAAA,CACP,SAAA,CAAW,KACb,CAAC,CAAA,CAEK+oC,EAAUhkC,WAAAA,CAAY,SAAY,CACtC2iB,CAAAA,CAAS,CAAE,IAAA,CAAM,IAAA,CAAM,MAAO,IAAA,CAAM,SAAA,CAAW,IAAK,CAAC,CAAA,CACrD,GAAI,CACF,IAAMshB,EAAW,MAAMH,CAAAA,GACvB,OAAAnhB,CAAAA,CAAS,CAAE,IAAA,CAAMshB,CAAAA,CAAU,MAAO,IAAA,CAAM,SAAA,CAAW,EAAM,CAAC,CAAA,CACnDA,CACT,CAAA,MAAS7mC,CAAAA,CAAY,CACnB,MAAAulB,CAAAA,CAAS,CAAE,IAAA,CAAM,IAAA,CAAM,MAAOvlB,CAAAA,CAAgB,SAAA,CAAW,KAAM,CAAC,CAAA,CAC1DA,CACR,CACF,CAAA,CAAG,CAAC0mC,CAAa,CAAC,CAAA,CAElB,OAAAzoC,UAAU,IAAM,CACV0oC,GACFC,CAAAA,GAEJ,EAAG,CAACA,CAAAA,CAASD,CAAS,CAAC,CAAA,CAEhB,CAAE,GAAGrhB,CAAAA,CAAO,QAAAshB,CAAQ,CAC7B,CAKO,SAASE,EAAAA,CAAYnI,EAAajhC,CAAAA,CAAuB,CAC9D,IAAMqpC,CAAAA,CAAUnkC,WAAAA,CAAY,IAAM,KAAA,CAAM+7B,CAAAA,CAAKjhC,CAAO,CAAA,CAAE,IAAA,CAAMspC,GAAQA,CAAAA,CAAI,IAAA,EAAM,CAAA,CAAG,CAACrI,EAAKjhC,CAAO,CAAC,CAAA,CAC/F,OAAO+oC,GAAYM,CAAO,CAC5B,CCjBO,SAASE,GAAQ,CACtB,eAAA,CAAAC,EAAkB,EAAC,CACnB,cAAAC,CAAAA,CACA,eAAA,CAAAC,EAAkB,GACpB,CAAA,CAAoB,EAAC,CAAG,CACtB,GAAM,CAACnH,CAAAA,CAAUoH,CAAW,CAAA,CAAIxpC,QAAAA,CAAwBqpC,CAAe,CAAA,CACjE,CAAC7J,EAAUiK,CAAW,CAAA,CAAIzpC,SAAS,KAAK,CAAA,CACxC,CAACtD,CAAAA,CAAWsd,CAAY,CAAA,CAAIha,QAAAA,CAAS,KAAK,CAAA,CAC1C0pC,CAAAA,CAAY5sC,OAAuB,IAAI,CAAA,CACvCimC,EAAajmC,MAAAA,CAAO,IAAI,EAExB6sC,CAAAA,CAAiB5kC,WAAAA,CAAY,CAAC6kC,CAAAA,CAA2B,QAAA,GAAa,CACtEF,CAAAA,CAAU,OAAA,EACZA,EAAU,OAAA,CAAQ,QAAA,CAAS,CACzB,GAAA,CAAKA,CAAAA,CAAU,QAAQ,YAAA,CACvB,QAAA,CAAAE,CACF,CAAC,EAEL,EAAG,EAAE,EAGC/0B,CAAAA,CAAe9P,WAAAA,CAAY,IAAM,CACrC,GAAI2kC,EAAU,OAAA,CAAS,CACrB,GAAM,CAAE,UAAAG,CAAAA,CAAW,YAAA,CAAAC,EAAc,YAAA,CAAAC,CAAa,EAAIL,CAAAA,CAAU,OAAA,CAC5D3G,EAAW,OAAA,CAAU+G,CAAAA,CAAeD,EAAYE,CAAAA,CAAeR,EACjE,CACF,CAAA,CAAG,CAACA,CAAe,CAAC,CAAA,CAGpBnpC,UAAU,IAAM,CACV2iC,EAAW,OAAA,EACb4G,CAAAA,GAEJ,CAAA,CAAG,CAACvH,EAAUuH,CAAc,CAAC,EAK7B,IAAMK,CAAAA,CAAcjlC,YAAY,MAAO7D,CAAAA,CAAiB+oC,IAAqB,CAC3E,GAAI,CAAC/oC,CAAAA,CAAQ,IAAA,EAAK,CAAG,OAErB,IAAMgpC,CAAAA,CAAS,MAAA,CAAO,YAAW,CAC3BC,CAAAA,CAA0B,CAC9B,EAAA,CAAID,CAAAA,CACJ,QAAAhpC,CAAAA,CACA,QAAA,CAAA+oC,EACA,SAAA,CAAW,IAAI,KACf,MAAA,CAAQ,SACV,EAEAT,CAAAA,CAAavlC,CAAAA,EAAS,CAAC,GAAGA,CAAAA,CAAMkmC,CAAU,CAAC,CAAA,CAE3C,GAAI,CACEb,CAAAA,EACF,MAAMA,CAAAA,CAAcpoC,CAAO,EAE7BsoC,CAAAA,CAAavlC,CAAAA,EACXA,EAAK,GAAA,CAAKi/B,CAAAA,EAASA,EAAI,EAAA,GAAOgH,CAAAA,CAAS,CAAE,GAAGhH,CAAAA,CAAK,MAAA,CAAQ,MAAO,EAAIA,CAAI,CAC1E,EACF,CAAA,KAAgB,CACdsG,EAAavlC,CAAAA,EACXA,CAAAA,CAAK,IAAKi/B,CAAAA,EAASA,CAAAA,CAAI,KAAOgH,CAAAA,CAAS,CAAE,GAAGhH,CAAAA,CAAK,MAAA,CAAQ,OAAQ,CAAA,CAAIA,CAAI,CAC3E,EACF,CACF,EAAG,CAACoG,CAAa,CAAC,CAAA,CAKZc,CAAAA,CAAgBrlC,YAAY,IAAM,CACtCykC,EAAY,EAAE,EAChB,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,QAAA,CAAApH,CAAAA,CACA,WAAA,CAAAoH,CAAAA,CACA,YAAAQ,CAAAA,CACA,aAAA,CAAAI,EACA,QAAA,CAAA5K,CAAAA,CACA,YAAAiK,CAAAA,CACA,SAAA,CAAA/sC,EACA,YAAA,CAAAsd,CAAAA,CACA,UAAA0vB,CAAAA,CACA,YAAA,CAAA70B,EACA,cAAA,CAAA80B,CACF,CACF,CC/GO,SAASU,GAAgBhB,CAAAA,CAA6B,GAAI,CAC/D,GAAM,CAACjH,CAAAA,CAAUoH,CAAW,EAAIxpC,QAAAA,CAAoBqpC,CAAe,EAE7DiB,CAAAA,CAAavlC,WAAAA,CAAam8B,GAAqB,CACnDsI,CAAAA,CAAYvlC,CAAAA,EAAQ,CAAC,GAAGA,CAAAA,CAAMi9B,CAAO,CAAC,EACxC,CAAA,CAAG,EAAE,CAAA,CAECqJ,EAAsBxlC,WAAAA,CAAY,CAAChD,EAAY8Y,CAAAA,GAA0B,CAC7E2uB,EAAYvlC,CAAAA,EAAQA,CAAAA,CAAK,IAAIumC,CAAAA,EAAKA,CAAAA,CAAE,KAAOzoC,CAAAA,CAAK,CAAE,GAAGyoC,CAAAA,CAAG,MAAA,CAAA3vB,CAAO,CAAA,CAAI2vB,CAAC,CAAC,EACvE,CAAA,CAAG,EAAE,CAAA,CAECC,EAAgB1lC,WAAAA,CAAahD,CAAAA,EAAe,CAChDynC,CAAAA,CAAYvlC,CAAAA,EAAQA,EAAK,MAAA,CAAOumC,CAAAA,EAAKA,CAAAA,CAAE,EAAA,GAAOzoC,CAAE,CAAC,EACnD,EAAG,EAAE,EAEC2oC,CAAAA,CAAc3lC,WAAAA,CAAY,CAAChD,CAAAA,CAAYb,CAAAA,GAAoB,CAC/DsoC,CAAAA,CAAYvlC,CAAAA,EAAQA,EAAK,GAAA,CAAIumC,CAAAA,EAAKA,EAAE,EAAA,GAAOzoC,CAAAA,CAAK,CAAE,GAAGyoC,CAAAA,CAAG,QAAAtpC,CAAAA,CAAS,QAAA,CAAU,IAAK,CAAA,CAAIspC,CAAC,CAAC,EACxF,CAAA,CAAG,EAAE,CAAA,CAECG,EAAc5lC,WAAAA,CAAY,CAAC6lC,EAAmBtH,CAAAA,CAAeuH,CAAAA,GAAmB,CACpFrB,CAAAA,CAAYvlC,CAAAA,EAAQA,CAAAA,CAAK,GAAA,CAAIumC,GAAK,CAChC,GAAIA,EAAE,EAAA,GAAOI,CAAAA,CAAW,OAAOJ,CAAAA,CAE/B,IAAMM,EAAY,CAAE,GAAIN,EAAE,SAAA,EAAa,EAAI,CAAA,CACrCtmB,CAAAA,CAAQ4mB,EAAUxH,CAAK,CAAA,EAAK,EAAC,CAEnC,OAAIpf,EAAM,QAAA,CAAS2mB,CAAM,GACvBC,CAAAA,CAAUxH,CAAK,EAAIpf,CAAAA,CAAM,MAAA,CAAOniB,GAAMA,CAAAA,GAAO8oC,CAAM,EAC/CC,CAAAA,CAAUxH,CAAK,EAAE,MAAA,GAAW,CAAA,EAAG,OAAOwH,CAAAA,CAAUxH,CAAK,CAAA,EAEzDwH,CAAAA,CAAUxH,CAAK,CAAA,CAAI,CAAC,GAAGpf,CAAAA,CAAO2mB,CAAM,EAG/B,CAAE,GAAGL,EAAG,SAAA,CAAAM,CAAU,CAC3B,CAAC,CAAC,EACJ,CAAA,CAAG,EAAE,CAAA,CAECV,CAAAA,CAAgBrlC,YAAY,IAAM,CACtCykC,EAAY,EAAE,EAChB,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,QAAA,CAAApH,CAAAA,CACA,YAAAoH,CAAAA,CACA,UAAA,CAAAc,EACA,mBAAA,CAAAC,CAAAA,CACA,cAAAE,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,EACA,aAAA,CAAAP,CACF,CACF,CCnDO,SAASW,GAAc3I,CAAAA,CAAqB,CACjD,GAAM,CAAChb,CAAAA,CAAOogB,CAAQ,CAAA,CAAIxnC,QAAAA,CAAS,EAAE,CAAA,CAE/BsnC,CAAAA,CAAU//B,QAAQ,IAAM,CAC5B,GAAI,CAAC6f,CAAAA,CAAM,MAAK,CAAG,OAAO,EAAC,CAC3B,IAAM4jB,EAAa5jB,CAAAA,CAAM,WAAA,GACzB,OAAOgb,CAAAA,CAAS,OAAOoI,CAAAA,EACrBA,CAAAA,CAAE,OAAA,CAAQ,WAAA,GAAc,QAAA,CAASQ,CAAU,CAC7C,CACF,CAAA,CAAG,CAAC5I,CAAAA,CAAUhb,CAAK,CAAC,CAAA,CAEpB,OAAO,CACL,KAAA,CAAAA,CAAAA,CACA,SAAAogB,CAAAA,CACA,OAAA,CAAAF,CACF,CACF,CCdO,SAAS2D,EAAAA,CACdC,CAAAA,CACoB,CACpB,IAAMxvC,CAAAA,CAAMoB,OAAU,IAAI,CAAA,CAE1B,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAM+qC,CAAAA,CAAYtnC,GAAmC,CACnD,IAAM5G,CAAAA,CAAKvB,CAAAA,CAAI,QACX,CAACuB,CAAAA,EAAMA,EAAG,QAAA,CAAU4G,CAAAA,EAAO,QAAmB,IAAI,CAAA,EAItDqnC,EAAQrnC,CAAK,EACf,EAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,YAAasnC,CAAQ,CAAA,CAC/C,SAAS,gBAAA,CAAiB,YAAA,CAAcA,CAAQ,CAAA,CAEzC,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,YAAaA,CAAQ,CAAA,CAClD,SAAS,mBAAA,CAAoB,YAAA,CAAcA,CAAQ,EACrD,CACF,EAAG,CAACD,CAAO,CAAC,CAAA,CAELxvC,CACT,CChBO,SAAS0vC,GAAa,CAAE,OAAA,CAAAl1B,EAAU,GAAK,CAAA,CAAyB,EAAC,CAAG,CACzE,GAAM,CAACm1B,CAAAA,CAAQC,CAAS,CAAA,CAAItrC,QAAAA,CAAS,KAAK,CAAA,CACpC,CAACmC,EAAO+M,CAAQ,CAAA,CAAIlP,SAAuB,IAAI,CAAA,CAiBrD,OAAO,CAAE,IAAA,CAfI+E,YAAY,MAAO3D,CAAAA,EAAiB,CAC/C,GAAI,CAAC,WAAW,SAAA,CAAW,CACzB8N,EAAS,IAAI,KAAA,CAAM,6BAA6B,CAAC,CAAA,CACjD,MACF,CAEA,GAAI,CACF,MAAM,UAAU,SAAA,CAAU,SAAA,CAAU9N,CAAI,CAAA,CACxCkqC,CAAAA,CAAU,EAAI,CAAA,CACd,UAAA,CAAW,IAAMA,CAAAA,CAAU,CAAA,CAAK,EAAGp1B,CAAO,EAC5C,OAASxD,CAAAA,CAAK,CACZxD,EAASwD,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,gBAAgB,CAAC,EACnE,CACF,CAAA,CAAG,CAACwD,CAAO,CAAC,CAAA,CAEG,OAAAm1B,CAAAA,CAAQ,KAAA,CAAAlpC,CAAM,CAC/B,CC5BO,SAASopC,EAAAA,CAAe1tC,EAAU4C,CAAAA,CAAkB,CACzD,GAAM,CAAC+qC,CAAAA,CAAgBC,CAAiB,CAAA,CAAIzrC,QAAAA,CAAYnC,CAAK,CAAA,CAE7D,OAAAuC,UAAU,IAAM,CACd,IAAM8qC,CAAAA,CAAU,UAAA,CAAW,IAAM,CAC/BO,CAAAA,CAAkB5tC,CAAK,EACzB,CAAA,CAAG4C,CAAK,CAAA,CAER,OAAO,IAAM,CACX,YAAA,CAAayqC,CAAO,EACtB,CACF,EAAG,CAACrtC,CAAAA,CAAO4C,CAAK,CAAC,CAAA,CAEV+qC,CACT,CCRO,SAASE,EAAAA,CAAQC,EAAqC,CAC3D,GAAM,CAACC,CAAAA,CAAYC,CAAa,EAAI7rC,QAAAA,CAAS,KAAK,EAC5C,CAAC8rC,CAAAA,CAAQC,CAAS,CAAA,CAAI/rC,QAAAA,CAAS,CAAE,CAAA,CAAG,CAAA,CAAG,EAAG,CAAE,CAAC,EAE7CgsC,CAAAA,CAAWlvC,MAAAA,CAAO,CAAE,CAAA,CAAG,CAAA,CAAG,EAAG,CAAE,CAAC,EAChCmvC,CAAAA,CAAUnvC,MAAAA,CAAO,CAAE,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAE,CAAC,CAAA,CAC/BovC,CAAAA,CAAWpvC,OAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAC5BqvC,CAAAA,CAAWrvC,OAAO,CAAE,CAAA,CAAG,EAAG,CAAA,CAAG,CAAE,CAAC,CAAA,CAEhCsvC,CAAAA,CAAcrnC,YAAY,CAAC5H,CAAAA,CAAWC,IAAc,CACxDyuC,CAAAA,CAAc,IAAI,CAAA,CAClBG,CAAAA,CAAS,QAAU,CAAE,CAAA,CAAG7uC,EAAI2uC,CAAAA,CAAO,CAAA,CAAG,EAAG1uC,CAAAA,CAAI0uC,CAAAA,CAAO,CAAE,CAAA,CACtDG,CAAAA,CAAQ,QAAU,CAAE,CAAA,CAAA9uC,EAAG,CAAA,CAAAC,CAAE,CAAA,CACzB8uC,CAAAA,CAAS,QAAU,IAAA,CAAK,GAAA,GAC1B,CAAA,CAAG,CAACJ,CAAM,CAAC,CAAA,CAEL/uC,EAAagI,WAAAA,CAAY,CAAC5H,EAAWC,CAAAA,GAAc,CACvD,GAAI,CAACwuC,CAAAA,CAAY,OAEjB,IAAMS,CAAAA,CAAOlvC,EAAI6uC,CAAAA,CAAS,OAAA,CAAQ,EAC5BM,CAAAA,CAAOlvC,CAAAA,CAAI4uC,EAAS,OAAA,CAAQ,CAAA,CAE5B/L,EAAc,IAAA,CAAK,GAAA,GACnBsM,CAAAA,CAAYtM,CAAAA,CAAciM,EAAS,OAAA,CAErCK,CAAAA,CAAY,IACdJ,CAAAA,CAAS,OAAA,CAAU,CACjB,CAAA,CAAA,CAAIhvC,CAAAA,CAAI8uC,CAAAA,CAAQ,OAAA,CAAQ,GAAKM,CAAAA,CAC7B,CAAA,CAAA,CAAInvC,EAAI6uC,CAAAA,CAAQ,OAAA,CAAQ,GAAKM,CAC/B,CAAA,CAAA,CAGFR,EAAU,CAAE,CAAA,CAAGM,EAAM,CAAA,CAAGC,CAAK,CAAC,CAAA,CAC9BL,CAAAA,CAAQ,QAAU,CAAE,CAAA,CAAA9uC,EAAG,CAAA,CAAAC,CAAE,EACzB8uC,CAAAA,CAAS,OAAA,CAAUjM,EAEnB0L,CAAAA,GAAS,CAAE,WAAY,IAAA,CAAM,MAAA,CAAQ,CAAE,CAAA,CAAGU,CAAAA,CAAM,EAAGC,CAAK,CAAA,CAAG,SAAUH,CAAAA,CAAS,OAAQ,CAAC,EACzF,CAAA,CAAG,CAACP,CAAAA,CAAYD,CAAM,CAAC,CAAA,CAEjBa,EAAYznC,WAAAA,CAAY,IAAM,CAClC8mC,CAAAA,CAAc,KAAK,EACnBF,CAAAA,GAAS,CAAE,WAAY,KAAA,CAAO,MAAA,CAAAG,EAAQ,QAAA,CAAUK,CAAAA,CAAS,OAAQ,CAAC,EACpE,EAAG,CAACL,CAAAA,CAAQH,CAAM,CAAC,CAAA,CAEnB,OAAAvrC,SAAAA,CAAU,IAAM,CACd,IAAMqsC,CAAAA,CAAezvC,GAAkBD,CAAAA,CAAWC,CAAAA,CAAE,QAASA,CAAAA,CAAE,OAAO,EAChE0vC,CAAAA,CAAe1vC,CAAAA,EAAkB,CACjCA,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,EAAGD,EAAWC,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAASA,EAAE,OAAA,CAAQ,CAAC,EAAE,OAAO,EACzE,EACM2vC,CAAAA,CAAY,IAAMH,GAAU,CAC5BI,CAAAA,CAAa,IAAMJ,CAAAA,EAAU,CAEnC,OAAIZ,CAAAA,GACF,MAAA,CAAO,iBAAiB,WAAA,CAAaa,CAAW,EAChD,MAAA,CAAO,gBAAA,CAAiB,UAAWE,CAAS,CAAA,CAC5C,OAAO,gBAAA,CAAiB,WAAA,CAAaD,CAAW,CAAA,CAChD,MAAA,CAAO,iBAAiB,UAAA,CAAYE,CAAU,GAGzC,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,YAAaH,CAAW,CAAA,CACnD,OAAO,mBAAA,CAAoB,SAAA,CAAWE,CAAS,CAAA,CAC/C,MAAA,CAAO,oBAAoB,WAAA,CAAaD,CAAW,EACnD,MAAA,CAAO,mBAAA,CAAoB,WAAYE,CAAU,EACnD,CACF,CAAA,CAAG,CAAChB,EAAY7uC,CAAAA,CAAYyvC,CAAS,CAAC,CAAA,CAE/B,CACL,WAAAZ,CAAAA,CACA,MAAA,CAAAE,EACA,SAAA,CAAW,CACT,YAAc9uC,CAAAA,EAAwBovC,CAAAA,CAAYpvC,EAAE,OAAA,CAASA,CAAAA,CAAE,OAAO,CAAA,CACtE,YAAA,CAAeA,GAAwB,CACjCA,CAAAA,CAAE,OAAA,CAAQ,CAAC,GAAGovC,CAAAA,CAAYpvC,CAAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,QAASA,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAO,EAC1E,CAAA,CACA,KAAA,CAAO,CAAE,MAAA,CAAQ4uC,CAAAA,CAAa,WAAa,MAAA,CAAQ,WAAA,CAAa,MAAO,CACzE,CACF,CACF,CC9EO,SAASiB,EAAAA,CAAiBnxC,EAAwD,CACvF,GAAM,CAAC2rB,CAAAA,CAAQqgB,CAAS,EAAI1nC,QAAAA,CAA8B,CACxD,QAAA,CAAU,CAAA,CACV,QAAS,CAAA,CACT,cAAA,CAAgB,KAClB,CAAC,CAAA,CAEK2nC,EAAU7qC,MAAAA,CAAO,KAAK,EAE5B,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAMC,EAAU3E,CAAAA,CAAI,OAAA,CACpB,GAAI,CAAC2E,CAAAA,CAAS,OAEd,IAAMysC,CAAAA,CAAe,IAAM,CACpBnF,CAAAA,CAAQ,UACX,MAAA,CAAO,qBAAA,CAAsB,IAAM,CACjC,IAAMzqC,EAAOmD,CAAAA,CAAQ,qBAAA,GACfyU,CAAAA,CAAe,MAAA,CAAO,YAKtBi4B,CAAAA,CAAgBj4B,CAAAA,CAAe5X,EAAK,MAAA,CACpC8vC,CAAAA,CAAkBl4B,CAAAA,CAAe5X,CAAAA,CAAK,IACtC8Y,CAAAA,CAAW,IAAA,CAAK,IAAI,CAAA,CAAG,IAAA,CAAK,IAAI,CAAA,CAAGg3B,CAAAA,CAAkBD,CAAa,CAAC,CAAA,CAEzErF,EAAU,CACR,QAAA,CAAA1xB,EACA,OAAA,CAAS,MAAA,CAAO,QAChB,cAAA,CAAgB9Y,CAAAA,CAAK,IAAM4X,CAAAA,EAAgB5X,CAAAA,CAAK,OAAS,CAC3D,CAAC,EAEDyqC,CAAAA,CAAQ,OAAA,CAAU,MACpB,CAAC,CAAA,CACDA,EAAQ,OAAA,CAAU,IAAA,EAEtB,EAEA,OAAA,MAAA,CAAO,gBAAA,CAAiB,SAAUmF,CAAAA,CAAc,CAAE,QAAS,IAAK,CAAC,CAAA,CACjE,MAAA,CAAO,iBAAiB,QAAA,CAAUA,CAAY,EAC9CA,CAAAA,EAAa,CAEN,IAAM,CACX,MAAA,CAAO,oBAAoB,QAAA,CAAUA,CAAY,EACjD,MAAA,CAAO,mBAAA,CAAoB,SAAUA,CAAY,EACnD,CACF,CAAA,CAAG,CAACpxC,CAAG,CAAC,CAAA,CAED2rB,CACT,CCvDO,SAAS4lB,GAAQlrC,CAAAA,CAAYmrC,CAAAA,CAAqB,CACvD,IAAMC,CAAAA,CAAcrwC,OAAuB,IAAI,CAAA,CAE/C,OAAAyI,eAAAA,CAAgB,IAAM,CACpB,IAAMlF,EAAU,QAAA,CAAS,aAAA,CAAc,kBAAkB0B,CAAE,CAAA,EAAA,CAAI,EAC/D,GAAI,CAAC1B,EAAS,OAEd,IAAM+sC,EAAQD,CAAAA,CAAY,OAAA,CACpBE,EAAOhtC,CAAAA,CAAQ,qBAAA,GAErB,GAAI+sC,CAAAA,CAAO,CACT,IAAME,CAAAA,CAASF,EAAM,IAAA,CAAOC,CAAAA,CAAK,KAC3BE,CAAAA,CAASH,CAAAA,CAAM,IAAMC,CAAAA,CAAK,GAAA,CAC1BG,EAASJ,CAAAA,CAAM,KAAA,CAAQC,EAAK,KAAA,CAC5BI,CAAAA,CAASL,EAAM,MAAA,CAASC,CAAAA,CAAK,QAG/B,IAAA,CAAK,GAAA,CAAIC,CAAM,CAAA,CAAI,IAAO,IAAA,CAAK,GAAA,CAAIC,CAAM,CAAA,CAAI,EAAA,EAAO,KAAK,GAAA,CAAIC,CAAAA,CAAS,CAAC,CAAA,CAAI,GAAA,EAAQ,KAAK,GAAA,CAAIC,CAAAA,CAAS,CAAC,CAAA,CAAI,GAAA,GAC5GptC,EAAQ,OAAA,CAAQ,CACd,CACE,eAAA,CAAiB,UAAA,CACjB,UAAW,CAAA,UAAA,EAAaitC,CAAM,OAAOC,CAAM,CAAA,UAAA,EAAaC,CAAM,CAAA,EAAA,EAAKC,CAAM,GAC3E,CAAA,CACA,CACE,gBAAiB,UAAA,CACjB,SAAA,CAAW,MACb,CACF,CAAA,CAAG,CACD,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,gCACV,CAAC,EAEL,CAEAN,EAAY,OAAA,CAAUE,EACxB,EAAGH,CAAY,CAAA,CAER,CAAE,cAAA,CAAgBnrC,CAAG,CAC9B,CCpCO,SAAS2rC,GAA2C,CACzD,aAAA,CAAAC,EACA,QAAA,CAAA5R,CACF,EAAsB,CACpB,GAAM,CAAC1U,CAAAA,CAAQqgB,CAAS,EAAI1nC,QAAAA,CAAY2tC,CAAa,EAC/C,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAI7tC,QAAAA,CAA2C,EAAE,CAAA,CACnE,CAAC8tC,CAAAA,CAAcC,CAAe,CAAA,CAAI/tC,QAAAA,CAAS,KAAK,CAAA,CAEhD2P,CAAAA,CAAe5K,YACnB/H,CAAAA,EACG,CACH,GAAM,CAAE,IAAA,CAAA6F,EAAM,KAAA,CAAAhF,CAAAA,CAAO,KAAAsO,CAAK,CAAA,CAAInP,EAAE,MAAA,CAC1BoP,CAAAA,CAAMD,IAAS,UAAA,CAAcnP,CAAAA,CAAE,OAA4B,OAAA,CAAUa,CAAAA,CAE3E6pC,EAAWzjC,CAAAA,GAAU,CAAE,GAAGA,CAAAA,CAAM,CAACpB,CAAI,EAAGuJ,CAAI,EAAE,CAAA,CAG1CwhC,CAAAA,CAAO/qC,CAAe,CAAA,EACxBgrC,CAAAA,CAAW5pC,IAAU,CAAE,GAAGA,CAAAA,CAAM,CAACpB,CAAI,EAAG,EAAG,EAAE,EAEjD,CAAA,CAAG,CAAC+qC,CAAM,CAAC,EAELtqB,CAAAA,CAAeve,WAAAA,CAAY,MAAO/H,CAAAA,EAAkC,CACxEA,EAAE,cAAA,EAAe,CACjB,IAAMgxC,CAAAA,CAAOhxC,CAAAA,CAAE,cAEf,GAAI,CAACgxC,EAAK,aAAA,EAAc,CAAG,CACzB,IAAMC,CAAAA,CAA8C,EAAC,CACrD,KAAA,CAAM,KAAKD,CAAAA,CAAK,QAAQ,EAAE,OAAA,CAAS3tC,CAAAA,EAAY,CAC7C,IAAM6tC,CAAAA,CAAQ7tC,EACV6tC,CAAAA,CAAM,IAAA,EAAQ,CAACA,CAAAA,CAAM,SAAS,KAAA,GAChCD,CAAAA,CAAUC,EAAM,IAAe,CAAA,CAAIA,EAAM,iBAAA,EAE7C,CAAC,EACDL,CAAAA,CAAUI,CAAS,EACnB,MACF,CAEAF,EAAgB,IAAI,CAAA,CACpB,GAAI,CACF,MAAMhS,EAAS1U,CAAM,EACvB,QAAE,CACA0mB,CAAAA,CAAgB,KAAK,EACvB,CACF,EAAG,CAAC1mB,CAAAA,CAAQ0U,CAAQ,CAAC,CAAA,CAEfoS,EAAWppC,WAAAA,CAAalC,CAAAA,GAAmB,CAC/C,IAAA,CAAMA,CAAAA,CACN,MAAOwkB,CAAAA,CAAOxkB,CAAI,CAAA,CAClB,QAAA,CAAU8M,EACV,KAAA,CAAOi+B,CAAAA,CAAO/qC,CAAI,CACpB,CAAA,CAAA,CAAI,CAACwkB,CAAAA,CAAQumB,CAAAA,CAAQj+B,CAAY,CAAC,CAAA,CAElC,OAAO,CACL,MAAA,CAAA0X,EACA,MAAA,CAAAumB,CAAAA,CACA,aAAAE,CAAAA,CACA,YAAA,CAAAn+B,EACA,YAAA,CAAA2T,CAAAA,CACA,SAAA6qB,CAAAA,CACA,SAAA,CAAAzG,EACA,SAAA,CAAAmG,CACF,CACF,CCzDO,SAASO,GAAc5mB,CAAAA,CAAiB,CAC7C,GAAM,CAACyF,CAAAA,CAASC,CAAU,CAAA,CAAIltB,SAA0B,CACtD,IAAA,CAAM,EAAC,CACP,OAAA,CAASwnB,EACT,MAAA,CAAQ,EACV,CAAC,CAAA,CAEKzL,EAAUkR,CAAAA,CAAQ,IAAA,CAAK,OAAS,CAAA,CAChCjR,CAAAA,CAAUiR,EAAQ,MAAA,CAAO,MAAA,CAAS,EAElCjF,CAAAA,CAAOjjB,WAAAA,CAAY,IAAM,CACxBgX,CAAAA,EAELmR,EAAYjpB,CAAAA,EAAS,CACnB,IAAMoqC,CAAAA,CAAWpqC,CAAAA,CAAK,KAAKA,CAAAA,CAAK,IAAA,CAAK,OAAS,CAAC,CAAA,CAC/C,OAAIoqC,CAAAA,GAAa,MAAA,CAAkBpqC,EAI5B,CACL,IAAA,CAHcA,CAAAA,CAAK,IAAA,CAAK,MAAM,CAAA,CAAGA,CAAAA,CAAK,KAAK,MAAA,CAAS,CAAC,EAIrD,OAAA,CAASoqC,CAAAA,CACT,OAAQ,CAACpqC,CAAAA,CAAK,QAAS,GAAGA,CAAAA,CAAK,MAAM,CACvC,CACF,CAAC,EACH,CAAA,CAAG,CAAC8X,CAAO,CAAC,EAENkM,CAAAA,CAAOljB,WAAAA,CAAY,IAAM,CACxBiX,CAAAA,EAELkR,EAAYjpB,CAAAA,EAAS,CACnB,IAAMoD,CAAAA,CAAOpD,CAAAA,CAAK,OAAO,CAAC,CAAA,CAC1B,GAAIoD,CAAAA,GAAS,MAAA,CAAW,OAAOpD,CAAAA,CAE/B,IAAMqqC,CAAAA,CAAYrqC,CAAAA,CAAK,OAAO,KAAA,CAAM,CAAC,EAErC,OAAO,CACL,KAAM,CAAC,GAAGA,EAAK,IAAA,CAAMA,CAAAA,CAAK,OAAO,CAAA,CACjC,OAAA,CAASoD,EACT,MAAA,CAAQinC,CACV,CACF,CAAC,EACH,EAAG,CAACtyB,CAAO,CAAC,CAAA,CAENuyB,CAAAA,CAAMxpC,YAAaypC,CAAAA,EAAqC,CAC5DthB,EAAYjpB,CAAAA,EAAS,CACnB,IAAMwqC,CAAAA,CAAW,OAAOD,GAAe,UAAA,CAClCA,CAAAA,CAA2BvqC,EAAK,OAAO,CAAA,CACxCuqC,EAEJ,OAAIvqC,CAAAA,CAAK,OAAA,GAAYwqC,CAAAA,CAAiBxqC,EAE/B,CACL,IAAA,CAAM,CAAC,GAAGA,CAAAA,CAAK,KAAMA,CAAAA,CAAK,OAAO,EACjC,OAAA,CAASwqC,CAAAA,CACT,OAAQ,EACV,CACF,CAAC,EACH,EAAG,EAAE,EAECC,CAAAA,CAAQ3pC,WAAAA,CAAY,IAAM,CAC9BmoB,CAAAA,CAAW,CACT,IAAA,CAAM,GACN,OAAA,CAAS1F,CAAAA,CACT,OAAQ,EACV,CAAC,EACH,CAAA,CAAG,CAACA,CAAY,CAAC,EAEjB,OAAO,CACL,KAAA,CAAOyF,CAAAA,CAAQ,QACf,GAAA,CAAAshB,CAAAA,CACA,KAAAvmB,CAAAA,CACA,IAAA,CAAAC,EACA,KAAA,CAAAymB,CAAAA,CACA,QAAA3yB,CAAAA,CACA,OAAA,CAAAC,EACA,OAAA,CAAAiR,CACF,CACF,CCtFO,SAAS0hB,EAAAA,CAAQz4B,EAAkB,GAAA,CAAe,CACvD,GAAM,CAAC04B,CAAAA,CAAQC,CAAS,CAAA,CAAI7uC,QAAAA,CAAS,KAAK,CAAA,CACpC8uC,CAAAA,CAAYhyC,QAAuB,CAEzC,OAAAsD,UAAU,IAAM,CACd,IAAM2uC,CAAAA,CAAiB,IAAM,CAC3BF,CAAAA,CAAU,KAAK,CAAA,CACXC,CAAAA,CAAU,SAAS,YAAA,CAAaA,CAAAA,CAAU,OAAO,CAAA,CAErDA,CAAAA,CAAU,QAAU,UAAA,CAAW,IAAM,CACnCD,CAAAA,CAAU,IAAI,EAChB,CAAA,CAAG34B,CAAO,EACZ,CAAA,CAEM84B,CAAAA,CAAS,CAAC,WAAA,CAAa,WAAA,CAAa,UAAW,YAAA,CAAc,QAAQ,EAE3E,OAAAA,CAAAA,CAAO,QAAQnrC,CAAAA,EAAS,CACtB,OAAO,gBAAA,CAAiBA,CAAAA,CAAOkrC,CAAc,EAC/C,CAAC,EAEDA,CAAAA,EAAe,CAER,IAAM,CACXC,EAAO,OAAA,CAAQnrC,CAAAA,EAAS,CACtB,MAAA,CAAO,mBAAA,CAAoBA,EAAOkrC,CAAc,EAClD,CAAC,CAAA,CACGD,CAAAA,CAAU,SAAS,YAAA,CAAaA,CAAAA,CAAU,OAAO,EACvD,CACF,EAAG,CAAC54B,CAAO,CAAC,CAAA,CAEL04B,CACT,CCfO,SAASK,EAAAA,CAAkB,CAChC,WAAA3M,CAAAA,CACA,SAAA,CAAA5lC,EACA,OAAA,CAAA6lC,CAAAA,CACA,UAAA/sB,CAAAA,CAAY,GAAA,CACZ,IAAA,CAAA6yB,CAAAA,CAAO,IACT,CAAA,CAA6B,CAC3B,IAAM6G,CAAAA,CAAcpyC,MAAAA,CAAoC,IAAI,CAAA,CACtDsH,CAAAA,CAAatH,OAAuB,IAAI,CAAA,CAExCqyC,EAAiBpqC,WAAAA,CACpByqB,CAAAA,EAAyC,CACxC,IAAMvF,CAAAA,CAASuF,EAAQ,CAAC,CAAA,CACpBvF,GAAUA,CAAAA,CAAO,cAAA,EAAkBsY,GAAW,CAAC7lC,CAAAA,EACjD4lC,IAEJ,CAAA,CACA,CAACC,CAAAA,CAAS7lC,CAAAA,CAAW4lC,CAAU,CACjC,CAAA,CAEA,OAAAliC,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAU+D,EAAW,OAAA,CAC3B,GAAK/D,CAAAA,CAEL,OAAA6uC,EAAY,OAAA,CAAU,IAAI,qBAAqBC,CAAAA,CAAgB,CAC7D,KAAA9G,CAAAA,CACA,UAAA,CAAY,WAAW7yB,CAAS,CAAA,MAAA,CAAA,CAChC,UAAW,EACb,CAAC,EAED05B,CAAAA,CAAY,OAAA,CAAQ,QAAQ7uC,CAAO,CAAA,CAE5B,IAAM,CACP6uC,CAAAA,CAAY,SACdA,CAAAA,CAAY,OAAA,CAAQ,aAExB,CACF,EAAG,CAACC,CAAAA,CAAgB9G,EAAM7yB,CAAS,CAAC,EAE7BpR,CACT,CCvDO,SAASgrC,EAAAA,CACdC,EACA,CACE,SAAA,CAAA75B,EAAY,CAAA,CACZ,IAAA,CAAA6yB,EAAO,IAAA,CACP,UAAA,CAAAiH,EAAa,IAAA,CACb,iBAAA,CAAAC,EAAoB,KACtB,CAAA,CAA4B,EAAC,CACU,CACvC,GAAM,CAAChvC,CAAAA,CAAOivC,CAAQ,CAAA,CAAIxvC,QAAAA,GAEpByvC,CAAAA,CAASlvC,CAAAA,EAAO,gBAAkBgvC,CAAAA,CAElCG,CAAAA,CAAc,CAAC,CAACnvC,CAAK,IAAyC,CAClEivC,CAAAA,CAASjvC,CAAK,EAChB,CAAA,CAEA,OAAAH,SAAAA,CAAU,IAAM,CACd,IAAMnE,CAAAA,CAAOozC,CAAAA,EAAY,OAAA,CAGzB,GAAI,CAFiB,CAAC,CAAC,MAAA,CAAO,oBAAA,EAETI,GAAU,CAACxzC,CAAAA,CAAM,OAEtC,IAAM0zC,CAAAA,CAAiB,CAAE,SAAA,CAAAn6B,CAAAA,CAAW,KAAA6yB,CAAAA,CAAM,UAAA,CAAAiH,CAAW,CAAA,CAC/ChvC,CAAAA,CAAW,IAAI,oBAAA,CAAqBovC,CAAAA,CAAaC,CAAc,CAAA,CAErE,OAAArvC,EAAS,OAAA,CAAQrE,CAAI,EAEd,IAAMqE,CAAAA,CAAS,YACxB,CAAA,CAAG,CAAC+uC,CAAAA,CAAY75B,CAAAA,CAAW6yB,EAAMiH,CAAAA,CAAYG,CAAM,CAAC,CAAA,CAE7ClvC,CACT,CCLO,SAASqvC,GAAUC,CAAAA,CAAgC,CACxD,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAI/vC,QAAAA,CAA2B6vC,CAAY,CAAA,CAK3DG,CAAAA,CAAWjrC,YAAY,CAC3B4kB,CAAAA,CACAsmB,EACAC,CAAAA,CACAC,CAAAA,GACG,CACHJ,CAAAA,CAAU9rC,CAAAA,EAAS,CACjB,IAAMmsC,CAAAA,CAAensC,EAAK,OAAA,CAAQgsC,CAAc,EAC1CI,CAAAA,CAAapsC,CAAAA,CAAK,QAAQisC,CAAmB,CAAA,CAC7CjzB,EAAOhZ,CAAAA,CAAK,KAAA,CAAM0lB,CAAM,CAAA,CAE9B,GAAI,CAACymB,CAAAA,EAAgB,CAACC,CAAAA,EAAc,CAACpzB,EAAM,OAAOhZ,CAAAA,CAElD,IAAMqsC,CAAAA,CAAa,KAAA,CAAM,KAAKF,CAAAA,CAAa,OAAO,EAClDE,CAAAA,CAAW,MAAA,CAAOA,EAAW,OAAA,CAAQ3mB,CAAM,EAAG,CAAC,CAAA,CAE/C,IAAM4mB,CAAAA,CAAqC,CACzC,GAAGH,CAAAA,CACH,OAAA,CAASE,CACX,CAAA,CAEME,CAAAA,CAAiBP,IAAmBC,CAAAA,CACtCI,CAAAA,CACA,MAAM,IAAA,CAAKD,CAAAA,CAAW,OAAO,CAAA,CAEjCG,CAAAA,CAAe,OAAOL,CAAAA,CAAkB,CAAA,CAAGxmB,CAAM,CAAA,CAEjD,IAAM8mB,CAAAA,CAAmC,CACvC,GAAGJ,CAAAA,CACH,OAAA,CAASG,CACX,CAAA,CAEA,OAAO,CACL,GAAGvsC,CAAAA,CACH,QAAS,CACP,GAAGA,EAAK,OAAA,CACR,CAACgsC,CAAc,EAAGM,CAAAA,CAClB,CAACL,CAAmB,EAAGO,CACzB,CAAA,CACA,KAAA,CAAO,CACL,GAAGxsC,CAAAA,CAAK,MACR,CAAC0lB,CAAM,EAAG,CACR,GAAG1M,EACH,QAAA,CAAUizB,CACZ,CACF,CACF,CACF,CAAC,EACH,CAAA,CAAG,EAAE,CAAA,CAKCQ,CAAAA,CAAa3rC,WAAAA,CAAY,CAACygB,CAAAA,CAAkB2qB,CAAAA,GAA6B,CAC7EJ,CAAAA,CAAU9rC,CAAAA,EAAS,CACjB,IAAM0sC,CAAAA,CAAiB,MAAM,IAAA,CAAK1sC,CAAAA,CAAK,WAAW,CAAA,CAClD,OAAA0sC,EAAe,MAAA,CAAOA,CAAAA,CAAe,QAAQnrB,CAAQ,CAAA,CAAG,CAAC,CAAA,CACzDmrB,CAAAA,CAAe,OAAOR,CAAAA,CAAkB,CAAA,CAAG3qB,CAAQ,CAAA,CAE5C,CACL,GAAGvhB,CAAAA,CACH,WAAA,CAAa0sC,CACf,CACF,CAAC,EACH,CAAA,CAAG,EAAE,CAAA,CAKCC,CAAAA,CAAU7rC,YAAY,CAACygB,CAAAA,CAAkBvI,CAAAA,GAA0B,CACvE8yB,EAAU9rC,CAAAA,EAAS,CACjB,IAAMwa,CAAAA,CAASxa,CAAAA,CAAK,QAAQuhB,CAAQ,CAAA,CACpC,GAAI,CAAC/G,CAAAA,CAAQ,OAAOxa,CAAAA,CAEpB,IAAM4sC,EAA+B,CACnC,GAAGpyB,EACH,OAAA,CAAS,CAAC,GAAGA,CAAAA,CAAO,OAAA,CAASxB,EAAK,EAAE,CACtC,EAEA,OAAO,CACL,GAAGhZ,CAAAA,CACH,KAAA,CAAO,CACL,GAAGA,CAAAA,CAAK,MACR,CAACgZ,CAAAA,CAAK,EAAE,EAAGA,CACb,EACA,OAAA,CAAS,CACP,GAAGhZ,CAAAA,CAAK,QACR,CAACuhB,CAAQ,EAAGqrB,CACd,CACF,CACF,CAAC,EACH,EAAG,EAAE,EAKCC,CAAAA,CAAa/rC,WAAAA,CAAa4kB,GAAmB,CACjDomB,CAAAA,CAAU9rC,GAAS,CACjB,IAAMgZ,EAAOhZ,CAAAA,CAAK,KAAA,CAAM0lB,CAAM,CAAA,CAC9B,GAAI,CAAC1M,CAAAA,CAAM,OAAOhZ,EAElB,IAAMwa,CAAAA,CAASxa,EAAK,OAAA,CAAQgZ,CAAAA,CAAK,QAAQ,CAAA,CACzC,GAAI,CAACwB,CAAAA,CAAQ,OAAOxa,EAEpB,IAAM0nB,CAAAA,CAAW,CAAE,GAAG1nB,EAAK,KAAM,CAAA,CACjC,OAAO0nB,CAAAA,CAAShC,CAAM,EAEtB,IAAMknB,CAAAA,CAA+B,CACnC,GAAGpyB,CAAAA,CACH,QAASA,CAAAA,CAAO,OAAA,CAAQ,OAAQ1c,CAAAA,EAAOA,CAAAA,GAAO4nB,CAAM,CACtD,CAAA,CAEA,OAAO,CACL,GAAG1lB,EACH,KAAA,CAAO0nB,CAAAA,CACP,QAAS,CACP,GAAG1nB,EAAK,OAAA,CACR,CAACgZ,EAAK,QAAQ,EAAG4zB,CACnB,CACF,CACF,CAAC,EACH,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,MAAAf,CAAAA,CACA,QAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CACA,WAAAU,CAAAA,CACA,OAAA,CAAAE,EACA,UAAA,CAAAE,CACF,CACF,CCtJO,SAASC,GAAqBC,CAAAA,CAAwB,CAC3D,IAAMC,CAAAA,CAAen0C,MAAAA,CAAOk0C,CAAS,CAAA,CACrCC,CAAAA,CAAa,QAAUD,CAAAA,CAEvB5wC,SAAAA,CAAU,IAAM,CACd,IAAM4D,EAAiBH,CAAAA,EAAyB,KACxCgwB,CAAAA,CAAO,GACgF,CAEzFhwB,CAAAA,CAAM,SAAWA,CAAAA,CAAM,OAAA,GAEzBgwB,EAAK,IAAA,CAAK,KAAK,EAGbhwB,CAAAA,CAAM,QAAA,EAAUgwB,EAAK,IAAA,CAAK,OAAO,EACjChwB,CAAAA,CAAM,MAAA,EAAQgwB,EAAK,IAAA,CAAK,KAAK,EAEjC,IAAM5a,CAAAA,CAAMpV,EAAM,GAAA,CAAI,WAAA,GACjB,CAAC,SAAA,CAAW,OAAQ,OAAA,CAAS,KAAK,EAAE,QAAA,CAASoV,CAAG,GACnD4a,CAAAA,CAAK,IAAA,CAAK5a,CAAG,CAAA,CAGf,IAAMi4B,CAAAA,CAAcrd,CAAAA,CAAK,KAAK,GAAG,CAAA,CAG3BqX,EAAU+F,CAAAA,CAAa,OAAA,CAAQC,CAAW,CAAA,EAAKD,CAAAA,CAAa,QAAQh4B,CAAG,CAAA,CAEzEiyB,GACFA,CAAAA,CAAQrnC,CAAK,EAEjB,CAAA,CAEA,OAAA,MAAA,CAAO,iBAAiB,SAAA,CAAWG,CAAa,EACzC,IAAM,MAAA,CAAO,oBAAoB,SAAA,CAAWA,CAAa,CAClE,CAAA,CAAG,EAAE,EACP,CCnDO,SAASmtC,EAAAA,CAAWC,CAAAA,CAAoB,CAC7C,IAAMC,CAAAA,CAAcv0C,MAAAA,CAAO,KAAK,EAEhCsD,SAAAA,CAAU,IAAM,CACTixC,CAAAA,CAAY,OAAA,GACfA,EAAY,OAAA,CAAU,IAAA,CACtBD,GAAO,EAEX,CAAA,CAAG,EAAE,EACP,CAKO,SAASE,EAAAA,CAAaF,EAAoB,CAC/ChxC,SAAAA,CAAU,IACD,IAAM,CACXgxC,IACF,CAAA,CACC,EAAE,EACP,CCjBO,SAASG,EAAAA,CAAmBt4B,EAAau4B,CAAAA,CAAiB,CAG/D,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAI1xC,SAAY,IAAM,CACtD,GAAI,OAAO,MAAA,CAAW,IACpB,OAAOwxC,CAAAA,CAET,GAAI,CACF,IAAM/pC,EAAO,MAAA,CAAO,YAAA,CAAa,QAAQwR,CAAG,CAAA,CAC5C,OAAOxR,CAAAA,CAAO,IAAA,CAAK,MAAMA,CAAI,CAAA,CAAI+pC,CACnC,CAAA,MAASrvC,CAAAA,CAAO,CACd,OAAA,OAAA,CAAQ,IAAA,CAAK,mCAAmC8W,CAAG,CAAA,EAAA,CAAA,CAAM9W,CAAK,CAAA,CACvDqvC,CACT,CACF,CAAC,CAAA,CAIKG,EAAW5sC,WAAAA,CAAalH,CAAAA,EAA+B,CAC3D,GAAI,CAEF,IAAM+zC,CAAAA,CAAe/zC,aAAiB,QAAA,CAAWA,CAAAA,CAAM4zC,CAAW,CAAA,CAAI5zC,CAAAA,CACtE6zC,EAAeE,CAAY,CAAA,CACvB,OAAO,MAAA,CAAW,GAAA,EACpB,OAAO,YAAA,CAAa,OAAA,CAAQ34B,EAAK,IAAA,CAAK,SAAA,CAAU24B,CAAY,CAAC,EAEjE,OAASzvC,CAAAA,CAAO,CACd,QAAQ,IAAA,CAAK,CAAA,gCAAA,EAAmC8W,CAAG,CAAA,EAAA,CAAA,CAAM9W,CAAK,EAChE,CACF,CAAA,CAAG,CAAC8W,CAAAA,CAAKw4B,CAAW,CAAC,CAAA,CAErB,OAAO,CAACA,CAAAA,CAAaE,CAAQ,CAC/B,CCzBO,SAASE,GAAiBn2C,CAAAA,CAAmD,CAClF,GAAM,CAACgJ,CAAAA,CAAUC,CAAW,CAAA,CAAI3E,QAAAA,CAAwB,CACtD,CAAA,CAAG,CAAA,CACH,EAAG,CAAA,CACH,QAAA,CAAU,EACV,QAAA,CAAU,CAAA,CACV,YAAa,CAAA,CACb,WAAA,CAAa,CACf,CAAC,CAAA,CAEK8xC,EAAah1C,MAAAA,EAAe,CAC5Bi1C,EAAiBj1C,MAAAA,CAAiC,CAAE,EAAG,CAAA,CAAG,CAAA,CAAG,CAAE,CAAC,CAAA,CAEtE,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAM4I,EAAmBnF,CAAAA,EAAsB,CAC7CkuC,EAAe,OAAA,CAAU,CAAE,EAAGluC,CAAAA,CAAM,OAAA,CAAS,EAAGA,CAAAA,CAAM,OAAQ,EAEzDiuC,CAAAA,CAAW,OAAA,GACdA,EAAW,OAAA,CAAU,qBAAA,CAAsBhtC,CAAc,CAAA,EAE7D,CAAA,CAEMA,EAAiB,IAAM,CAC3B,GAAM,CAAE,CAAA,CAAA3H,EAAG,CAAA,CAAAC,CAAE,EAAI20C,CAAAA,CAAe,OAAA,CAC5BC,EAAW,CAAA,CACXC,CAAAA,CAAW,EACXC,CAAAA,CAAc,CAAA,CACdC,EAAc,CAAA,CAElB,GAAIz2C,GAAK,OAAA,CAAS,CAChB,IAAMwB,CAAAA,CAAOxB,EAAI,OAAA,CAAQ,qBAAA,GACzBs2C,CAAAA,CAAW70C,CAAAA,CAAID,EAAK,IAAA,CACpB+0C,CAAAA,CAAW70C,EAAIF,CAAAA,CAAK,GAAA,CACpBg1C,EAAc,IAAA,CAAK,GAAA,CAAI,EAAG,IAAA,CAAK,GAAA,CAAI,IAAMF,CAAAA,CAAW90C,CAAAA,CAAK,MAAS,GAAG,CAAC,EACtEi1C,CAAAA,CAAc,IAAA,CAAK,IAAI,CAAA,CAAG,IAAA,CAAK,IAAI,GAAA,CAAMF,CAAAA,CAAW/0C,EAAK,MAAA,CAAU,GAAG,CAAC,EACzE,CAEAyH,EAAY,CACV,CAAA,CAAAxH,EACA,CAAA,CAAAC,CAAAA,CACA,QAAA,CAAA40C,CAAAA,CACA,SAAAC,CAAAA,CACA,WAAA,CAAAC,EACA,WAAA,CAAAC,CACF,CAAC,CAAA,CAEDL,CAAAA,CAAW,QAAU,OACvB,CAAA,CAEA,cAAO,gBAAA,CAAiB,WAAA,CAAa9oC,CAAe,CAAA,CAE7C,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,YAAaA,CAAe,CAAA,CACnD8oC,EAAW,OAAA,EAAS,oBAAA,CAAqBA,EAAW,OAAO,EACjE,CACF,CAAA,CAAG,CAACp2C,CAAG,CAAC,CAAA,CAEDgJ,CACT,CC5DO,SAAS0tC,EAAAA,EAA8B,CAC5C,GAAM,CAAC3mC,CAAAA,CAAa4mC,CAAc,CAAA,CAAIryC,QAAAA,CAAsB,CAC1D,KAAA,CAAO,IAAA,CACP,KAAM,IAAA,CACN,KAAA,CAAO,KACP,QAAA,CAAU,KACZ,CAAC,CAAA,CAED,OAAAI,UAAU,IAAM,CACd,IAAMkyC,CAAAA,CAAqBzuC,CAAAA,EAAkC,CAC3DwuC,CAAAA,CAAe,CACb,MAAOxuC,CAAAA,CAAM,KAAA,CACb,KAAMA,CAAAA,CAAM,IAAA,CACZ,MAAOA,CAAAA,CAAM,KAAA,CACb,SAAUA,CAAAA,CAAM,QAClB,CAAC,EACH,CAAA,CAGA,OAAI,OAAO,MAAA,CAAW,GAAA,EAAe,wBAAA,GAA4B,QAC/D,MAAA,CAAO,gBAAA,CAAiB,oBAAqByuC,CAAiB,CAAA,CAGzD,IAAM,CACX,MAAA,CAAO,oBAAoB,mBAAA,CAAqBA,CAAiB,EACnE,CACF,CAAA,CAAG,EAAE,CAAA,CAEE7mC,CACT,CCrCO,SAAS8mC,GAAe10C,CAAAA,CAAyB,CACtD,IAAMnC,CAAAA,CAAMoB,MAAAA,GAEZ,OAAAsD,SAAAA,CAAU,IAAM,CACd1E,CAAAA,CAAI,QAAUmC,EAChB,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEHnC,CAAAA,CAAI,OACb,CCXO,SAAS82C,EAAAA,CAAgBC,EAAqC,CACnE,IAAMnyC,EAAWxD,MAAAA,CAAoC,IAAI,EAEnD41C,CAAAA,CAAkB3tC,WAAAA,CAAY,CAAC9H,CAAAA,CAAwB2tC,CAAAA,CAAmB9K,IAAkB,CAC5F,CAAC7iC,GAAM6iC,CAAAA,EAAQ,CAACx/B,EAAS,OAAA,GAE7BrD,CAAAA,CAAG,QAAQ,SAAA,CAAY2tC,CAAAA,CACvBtqC,EAAS,OAAA,CAAQ,OAAA,CAAQrD,CAAE,CAAA,EAC7B,CAAA,CAAG,EAAE,CAAA,CAEL,OAAAmD,SAAAA,CAAU,KACRE,CAAAA,CAAS,OAAA,CAAU,IAAI,oBAAA,CAAsBkvB,CAAAA,EAAY,CACvDA,CAAAA,CAAQ,OAAA,CAAQjvB,GAAS,CACvB,GAAIA,EAAM,cAAA,CAAgB,CACxB,IAAMqqC,CAAAA,CAAarqC,CAAAA,CAAM,OAAuB,OAAA,CAAQ,SAAA,CACpDqqC,IACF6H,CAAAA,CAAO7H,CAAS,EAChBtqC,CAAAA,CAAS,OAAA,EAAS,UAAUC,CAAAA,CAAM,MAAM,GAE5C,CACF,CAAC,EACH,CAAA,CAAG,CAAE,UAAW,EAAI,CAAC,EAEd,IAAM,CACXD,EAAS,OAAA,EAAS,UAAA,GACpB,CAAA,CAAA,CACC,CAACmyC,CAAM,CAAC,EAEJ,CAAE,eAAA,CAAAC,CAAgB,CAC3B,CCzBO,SAASC,EAAAA,EAA4B,CAC1C,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAI7yC,QAAAA,CAAS,KAAK,CAAA,CAExD,OAAAI,UAAU,IAAM,CACd,IAAMkoC,CAAAA,CAAa,MAAA,CAAO,WAAW,kCAAkC,CAAA,CACvEuK,EAAiBvK,CAAAA,CAAW,OAAO,EAEnC,IAAM4C,CAAAA,CAAWrnC,GAA+B,CAC9CgvC,CAAAA,CAAiBhvC,CAAAA,CAAM,OAAO,EAChC,CAAA,CAEA,OAAAykC,EAAW,gBAAA,CAAiB,QAAA,CAAU4C,CAAO,CAAA,CACtC,IAAM5C,EAAW,mBAAA,CAAoB,QAAA,CAAU4C,CAAO,CAC/D,CAAA,CAAG,EAAE,CAAA,CAEE0H,CACT,CCjBA,IAAME,EAAAA,CAA0C,CAC9C,EAAA,CAAI,GAAA,CACJ,GAAI,GAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,MAAO,IACT,CAAA,CAEO,SAASC,EAAAA,CAAc3rB,CAAAA,CAAwB,CACpD,GAAM,CAAC4rB,CAAAA,CAASC,CAAU,EAAIjzC,QAAAA,CAAS,KAAK,EAE5C,OAAAI,SAAAA,CAAU,IAAM,CACd,IAAM8yC,EAAQ,MAAA,CAAO,UAAA,CAAW9rB,CAAK,CAAA,CACrC6rB,CAAAA,CAAWC,EAAM,OAAO,CAAA,CAExB,IAAM/H,CAAAA,CAAW,IAAM8H,EAAWC,CAAAA,CAAM,OAAO,EAC/C,OAAAA,CAAAA,CAAM,iBAAiB,QAAA,CAAU/H,CAAQ,EAClC,IAAM+H,CAAAA,CAAM,oBAAoB,QAAA,CAAU/H,CAAQ,CAC3D,CAAA,CAAG,CAAC/jB,CAAK,CAAC,CAAA,CAEH4rB,CACT,CAEO,SAASG,EAAAA,CAAcC,CAAAA,CAAiC,CAC7D,OAAOL,EAAAA,CAAc,eAAeD,EAAAA,CAAYM,CAAU,CAAC,CAAA,GAAA,CAAK,CAClE,CAOO,SAASC,EAAAA,CAAkB33C,EAA4C,CAC5E,GAAM,CAACY,CAAAA,CAAMg3C,CAAO,EAAItzC,QAAAA,CAAwB,CAAE,MAAO,CAAA,CAAG,MAAA,CAAQ,CAAE,CAAC,CAAA,CAEvE,OAAAuF,eAAAA,CAAgB,IAAM,CACpB,GAAI,CAAC7J,EAAI,OAAA,CAAS,OAElB,IAAM4E,CAAAA,CAAW,IAAI,eAAgBkvB,CAAAA,EAAY,CAC/C,IAAA,IAAWjvB,CAAAA,IAASivB,EAClB8jB,CAAAA,CAAQ,CACN,MAAO/yC,CAAAA,CAAM,WAAA,CAAY,MACzB,MAAA,CAAQA,CAAAA,CAAM,YAAY,MAC5B,CAAC,EAEL,CAAC,CAAA,CAED,OAAAD,CAAAA,CAAS,OAAA,CAAQ5E,EAAI,OAAO,CAAA,CACrB,IAAM4E,CAAAA,CAAS,UAAA,EACxB,CAAA,CAAG,CAAC5E,CAAG,CAAC,CAAA,CAEDY,CACT,CClDO,SAASi3C,EAAAA,CAAmB/9B,EAAoB,EAAA,CAAqB,CAC1E,GAAM,CAACg+B,EAAiBC,CAAkB,CAAA,CAAIzzC,SAA0B,IAAI,CAAA,CACtE0zC,EAAc52C,MAAAA,CAAO,CAAC,EAE5B,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAMuzC,EAAwB,IAAM,CAClC,IAAMC,CAAAA,CAAU,MAAA,CAAO,QAEvB,GAAI,IAAA,CAAK,IAAIA,CAAAA,CAAUF,CAAAA,CAAY,OAAO,CAAA,CAAIl+B,CAAAA,CAC5C,OAGF,IAAMlW,CAAAA,CAAYs0C,EAAUF,CAAAA,CAAY,OAAA,CAAU,OAAS,IAAA,CAEvDp0C,CAAAA,GAAck0C,IAAoBI,CAAAA,CAAU,CAAA,EAAKt0C,IAAc,MAAA,CAAA,EACjEm0C,CAAAA,CAAmBn0C,CAAS,CAAA,CAG9Bo0C,EAAY,OAAA,CAAUE,CAAAA,CAAU,EAAIA,CAAAA,CAAU,EAChD,EAEMC,CAAAA,CAAW,IAAM,CACrB,MAAA,CAAO,qBAAA,CAAsBF,CAAqB,EACpD,CAAA,CAEA,cAAO,gBAAA,CAAiB,QAAA,CAAUE,CAAQ,CAAA,CAEnC,IAAM,OAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAQ,CAC5D,CAAA,CAAG,CAACL,CAAAA,CAAiBh+B,CAAS,CAAC,CAAA,CAExBg+B,CACT,CC/BO,SAASM,GAAcC,CAAAA,CAAgB,IAAA,CAAM,CAClDxuC,eAAAA,CAAgB,IAAM,CACpB,GAAI,CAACwuC,CAAAA,CAAM,OAGX,IAAMC,CAAAA,CAAgB,MAAA,CAAO,iBAAiB,QAAA,CAAS,IAAI,EAAE,QAAA,CACvDC,CAAAA,CAAuB,OAAO,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA,CAAE,YAAA,CAG9DC,EAAiB,MAAA,CAAO,UAAA,CAAa,SAAS,eAAA,CAAgB,WAAA,CAGpE,gBAAS,IAAA,CAAK,KAAA,CAAM,SAAW,QAAA,CAC3BA,CAAAA,CAAiB,IACnB,QAAA,CAAS,IAAA,CAAK,MAAM,YAAA,CAAe,CAAA,EAAG,WAAWD,CAAoB,CAAA,CAAIC,CAAc,CAAA,EAAA,CAAA,CAAA,CAGlF,IAAM,CACX,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAWF,EAC/B,QAAA,CAAS,IAAA,CAAK,MAAM,YAAA,CAAeC,EACrC,CACF,CAAA,CAAG,CAACF,CAAI,CAAC,EACX,CC1BA,SAASI,EAAAA,CACPt2C,EACAu2C,CAAAA,CACAC,CAAAA,CACQ,CACR,GAAM,CAACC,EAAUC,CAAQ,CAAA,CAAIH,EACvB,CAACI,CAAAA,CAAWC,CAAS,CAAA,CAAIJ,CAAAA,CAEzBr+B,GAAYnY,CAAAA,CAAQy2C,CAAAA,GAAaC,EAAWD,CAAAA,CAAAA,CAC5CI,CAAAA,CAAkB,KAAK,GAAA,CAAI,CAAA,CAAG,KAAK,GAAA,CAAI,CAAA,CAAG1+B,CAAQ,CAAC,CAAA,CAEzD,OAAOw+B,CAAAA,CAAYE,GAAmBD,CAAAA,CAAYD,CAAAA,CACpD,CAMO,SAASG,EAAAA,CACd92C,EACAu2C,CAAAA,CACAC,CAAAA,CACQ,CACR,OAAOF,EAAAA,CAAYt2C,EAAOu2C,CAAAA,CAAYC,CAAW,CACnD,CCrBO,SAASO,EAAAA,EAA4B,CAC1C,GAAM,CAACzI,EAAU0I,CAAW,CAAA,CAAI70C,SAAS,CAAC,CAAA,CACpC0zC,EAAc52C,MAAAA,CAAO,CAAC,EACtBovC,CAAAA,CAAWpvC,MAAAA,CAAO,KAAK,GAAA,EAAK,CAAA,CAC5Bg1C,CAAAA,CAAah1C,QAAe,CAElC,OAAAsD,UAAU,IAAM,CACd,IAAMyU,CAAAA,CAAe,IAAM,CACzB,IAAMigC,CAAAA,CAAiB,OAAO,OAAA,CACxB7U,CAAAA,CAAc,KAAK,GAAA,EAAI,CACvBsM,EAAYtM,CAAAA,CAAciM,CAAAA,CAAS,QAEzC,GAAIK,CAAAA,CAAY,EAAG,CAEjB,IAAMwI,GADWD,CAAAA,CAAiBpB,CAAAA,CAAY,SACXnH,CAAAA,CACnCsI,CAAAA,CAAYE,CAAe,EAC7B,CAEArB,EAAY,OAAA,CAAUoB,CAAAA,CACtB5I,EAAS,OAAA,CAAUjM,CAAAA,CAGf6R,EAAW,OAAA,EAAS,oBAAA,CAAqBA,CAAAA,CAAW,OAAO,EAC/DA,CAAAA,CAAW,OAAA,CAAU,sBAAsBkD,CAAa,EAC1D,EAEMA,CAAAA,CAAgB,IAAM,CAC1BH,CAAAA,CAAY5wC,CAAAA,EACN,KAAK,GAAA,CAAIA,CAAI,EAAI,GAAA,CAAa,CAAA,CAC3BA,EAAO,EACf,CAAA,CACD6tC,EAAW,OAAA,CAAU,qBAAA,CAAsBkD,CAAa,EAC1D,CAAA,CAEA,cAAO,gBAAA,CAAiB,QAAA,CAAUngC,EAAc,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CAE1D,IAAM,CACX,MAAA,CAAO,oBAAoB,QAAA,CAAUA,CAAY,EAC7Ci9B,CAAAA,CAAW,OAAA,EAAS,oBAAA,CAAqBA,CAAAA,CAAW,OAAO,EACjE,CACF,EAAG,EAAE,EAEE3F,CACT,CC5CA,SAAS8I,EAAAA,CAAW7tB,EAAehmB,CAAAA,CAAuB,CACxD,IAAM8zC,CAAAA,CAAI9tB,CAAAA,CAAM,aAAY,CAAE,OAAA,CAAQ,MAAO,EAAE,CAAA,CACzC/U,EAAIjR,CAAAA,CAAK,WAAA,GACX+zC,CAAAA,CAAW,CAAA,CACf,QAASC,CAAAA,CAAU,CAAA,CAAGA,EAAU/iC,CAAAA,CAAE,MAAA,EAAU8iC,EAAWD,CAAAA,CAAE,MAAA,CAAQE,IAC3D/iC,CAAAA,CAAE+iC,CAAO,CAAA,GAAMF,CAAAA,CAAEC,CAAQ,CAAA,EAAGA,CAAAA,EAAAA,CAElC,OAAOA,CAAAA,GAAaD,CAAAA,CAAE,MACxB,CAQO,SAASG,GACd7iC,CAAAA,CACA4U,CAAAA,CACAyM,EACK,CACL,OAAOtsB,QAAQ,IACR6f,CAAAA,CAAM,MAAK,CAET5U,CAAAA,CAAK,OAAQ/K,CAAAA,EAClBosB,CAAAA,CAAK,KAAM5a,CAAAA,EAAQ,CACjB,IAAMpb,CAAAA,CAAQ4J,CAAAA,CAAKwR,CAAG,CAAA,CACtB,OAAIpb,GAAU,IAAA,CAAoC,KAAA,CAC3Co3C,GAAW7tB,CAAAA,CAAO,MAAA,CAAOvpB,CAAK,CAAC,CACxC,CAAC,CACH,CAAA,CAR0B2U,CAAAA,CASzB,CAACA,EAAM4U,CAAAA,CAAOyM,CAAI,CAAC,CACxB,CChCO,SAASyhB,GAAqBr8B,CAAAA,CAAau4B,CAAAA,CAAiB,CACjE,IAAM+D,CAAAA,CAAYxwC,YAAY,IAAS,CACrC,GAAI,OAAO,MAAA,CAAW,IAAa,OAAOysC,CAAAA,CAE1C,GAAI,CACF,IAAM/pC,EAAO,MAAA,CAAO,cAAA,CAAe,QAAQwR,CAAG,CAAA,CAC9C,OAAOxR,CAAAA,CAAQ,IAAA,CAAK,MAAMA,CAAI,CAAA,CAAU+pC,CAC1C,CAAA,MAASrvC,EAAO,CACd,OAAA,OAAA,CAAQ,KAAK,CAAA,kCAAA,EAAqC8W,CAAG,KAAM9W,CAAK,CAAA,CACzDqvC,CACT,CACF,CAAA,CAAG,CAACA,CAAAA,CAAcv4B,CAAG,CAAC,CAAA,CAEhB,CAACw4B,EAAaC,CAAc,CAAA,CAAI1xC,SAAYu1C,CAAS,CAAA,CAErD5D,EAAW5sC,WAAAA,CAAalH,CAAAA,EAA+B,CAC3D,GAAI,CACF,IAAM+zC,CAAAA,CAAe/zC,CAAAA,YAAiB,SAAWA,CAAAA,CAAM4zC,CAAW,EAAI5zC,CAAAA,CACtE6zC,CAAAA,CAAeE,CAAY,CAAA,CACvB,OAAO,OAAW,GAAA,EACpB,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ34B,EAAK,IAAA,CAAK,SAAA,CAAU24B,CAAY,CAAC,EAEnE,OAASzvC,CAAAA,CAAO,CACd,QAAQ,IAAA,CAAK,CAAA,kCAAA,EAAqC8W,CAAG,CAAA,EAAA,CAAA,CAAM9W,CAAK,EAClE,CACF,CAAA,CAAG,CAAC8W,CAAAA,CAAKw4B,CAAW,CAAC,CAAA,CAErB,OAAArxC,UAAU,IAAM,CACdsxC,EAAe6D,CAAAA,EAAW,EAC5B,CAAA,CAAG,CAACA,CAAS,CAAC,CAAA,CAEP,CAAC9D,CAAAA,CAAaE,CAAQ,CAC/B,CCxBO,SAAS6D,GACdC,CAAAA,CACAC,CAAAA,CAAuB,EAAC,CAChB,CACR,GAAM,CACJ,SAAA,CAAAC,EAAY,GAAA,CACZ,OAAA,CAAAC,EAAU,EAAA,CACV,IAAA,CAAAC,EAAO,CAAA,CACP,SAAA,CAAAC,EAAY,GACd,CAAA,CAAIJ,EAEE,CAAClyC,CAAAA,CAAcuyC,CAAe,CAAA,CAAI/1C,QAAAA,CAASy1C,CAAW,CAAA,CACtDO,CAAAA,CAAcl5C,OAAO,CAAC,CAAA,CACtBm5C,EAAan5C,MAAAA,CAAO24C,CAAW,EAC/B3D,CAAAA,CAAah1C,MAAAA,GAEnB,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAMb,CAAAA,CAAU,IAAM,CACpB,IAAM22C,CAAAA,CAAWT,EAAcQ,CAAAA,CAAW,OAAA,CAEpCE,EADQD,CAAAA,CAAWP,CAAAA,CACIE,EAK7B,GAHAG,CAAAA,CAAY,SAAWA,CAAAA,CAAY,OAAA,CAAUG,GAAgBP,CAAAA,CAC7DK,CAAAA,CAAW,SAAWD,CAAAA,CAAY,OAAA,CAE9B,KAAK,GAAA,CAAIE,CAAQ,EAAIJ,CAAAA,EAAa,IAAA,CAAK,IAAIE,CAAAA,CAAY,OAAO,EAAIF,CAAAA,CAAW,CAC/EG,EAAW,OAAA,CAAUR,CAAAA,CACrBM,EAAgBN,CAAW,CAAA,CAC3B3D,EAAW,OAAA,CAAU,MAAA,CACrB,MACF,CAEAiE,EAAgBE,CAAAA,CAAW,OAAO,EAClCnE,CAAAA,CAAW,OAAA,CAAU,sBAAsBvyC,CAAO,EACpD,EAEA,OAAIuyC,CAAAA,CAAW,SAAS,oBAAA,CAAqBA,CAAAA,CAAW,OAAO,CAAA,CAC/DA,CAAAA,CAAW,QAAU,qBAAA,CAAsBvyC,CAAO,EAE3C,IAAM,CACPuyC,EAAW,OAAA,EAAS,oBAAA,CAAqBA,EAAW,OAAO,EACjE,CACF,CAAA,CAAG,CAAC2D,EAAaE,CAAAA,CAAWC,CAAAA,CAASC,EAAMC,CAAS,CAAC,EAE9CtyC,CACT,CCvDO,SAAS4yC,EAAAA,CAAWzyC,CAAAA,CAAe0yC,CAAAA,CAAuB,GAAA,CAAKC,EAAoB,CAAA,CAAG,CAC3F,OAAOA,CAAAA,CAAa3yC,CAAAA,CAAQ0yC,CAC9B,CAKO,SAASE,GAAY35B,CAAAA,CAAegI,CAAAA,CAAmB,IAAK,CAGjE,OAAO,MAAM,IAAA,CAAK,CAAE,OAAQhI,CAAM,CAAA,CAAG,CAACpV,CAAAA,CAAGjG,CAAAA,GAAMA,EAAIqjB,CAAQ,CAC7D,CCZA,IAAM4xB,EAAAA,CAAS,mBAAA,CAKR,SAASC,EAAAA,CAAgBr1C,CAAAA,CAAc1B,EAAW,GAAA,CAAKS,CAAAA,CAAU,IAAA,CAAM,CAC5E,GAAM,CAACu2C,CAAAA,CAAQC,CAAS,CAAA,CAAI32C,QAAAA,CAASoB,CAAI,CAAA,CACnCw1C,CAAAA,CAAW95C,QAAe,CAEhC,OAAAsD,UAAU,IAAM,CACd,GAAI,CAACD,CAAAA,CAAS,CACZw2C,CAAAA,CAAUv1C,CAAI,EACd,MACF,CAEA,IAAMqjC,CAAAA,CAAQ,IAAA,CAAK,KAAI,CAEjBoS,CAAAA,CAAO,IAAM,CACjB,IAAMC,EAAU,IAAA,CAAK,GAAA,GAAQrS,CAAAA,CACvBzuB,CAAAA,CAAW,KAAK,GAAA,CAAI8gC,CAAAA,CAAUp3C,EAAU,CAAC,CAAA,CAEzCq3C,CAAAA,CAAY31C,CAAAA,CAAK,MAAM,EAAE,CAAA,CAAE,IAAI,CAAC0P,CAAAA,CAAMvP,IACtCuP,CAAAA,GAAS,GAAA,CAAY,IAErBkF,CAAAA,CAAYzU,CAAAA,CAAIH,EAAK,MAAA,CAAgB0P,CAAAA,CAElC0lC,GAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,CAAIA,GAAO,MAAM,CAAC,CACxD,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CAEVG,CAAAA,CAAUI,CAAS,CAAA,CAEf/gC,CAAAA,CAAW,IACb4gC,CAAAA,CAAS,OAAA,CAAU,sBAAsBC,CAAI,CAAA,EAEjD,EAEA,OAAAD,CAAAA,CAAS,QAAU,qBAAA,CAAsBC,CAAI,CAAA,CAEtC,IAAM,CACPD,CAAAA,CAAS,OAAA,EAAS,qBAAqBA,CAAAA,CAAS,OAAO,EAC7D,CACF,CAAA,CAAG,CAACx1C,CAAAA,CAAM1B,CAAAA,CAAUS,CAAO,CAAC,CAAA,CAErBu2C,CACT,CCxCO,SAASM,EAAAA,CAAen5C,EAAUgf,CAAAA,CAAkB,CACzD,GAAM,CAACo6B,CAAAA,CAAgBC,CAAiB,CAAA,CAAIl3C,QAAAA,CAAYnC,CAAK,CAAA,CACvDs5C,CAAAA,CAAUr6C,OAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAEjC,OAAAsD,SAAAA,CAAU,IAAM,CACd,IAAM8qC,CAAAA,CAAU,WAAW,IAAM,CAC3B,KAAK,GAAA,EAAI,CAAIiM,EAAQ,OAAA,EAAWt6B,CAAAA,GAClCq6B,EAAkBr5C,CAAK,CAAA,CACvBs5C,EAAQ,OAAA,CAAU,IAAA,CAAK,KAAI,EAE/B,CAAA,CAAGt6B,GAAS,IAAA,CAAK,GAAA,GAAQs6B,CAAAA,CAAQ,OAAA,CAAQ,EAEzC,OAAO,IAAM,CACX,YAAA,CAAajM,CAAO,EACtB,CACF,CAAA,CAAG,CAACrtC,CAAAA,CAAOgf,CAAK,CAAC,CAAA,CAEVo6B,CACT,CCtBO,SAASG,EAAAA,CAAS7yB,CAAAA,CAAyB,EAAG,CACnD,GAAM,CAACE,CAAAA,CAASC,CAAU,EAAI1kB,QAAAA,CAASukB,CAAc,EAC/C,CAAClc,CAAAA,CAAUsc,CAAW,CAAA,CAAI3kB,QAAAA,CAAS,KAAK,CAAA,CACxCq3C,CAAAA,CAAcv6C,OAAY,IAAI,CAAA,CAE9B2nC,EAAQ1/B,WAAAA,CAAY,IAAM,CACzBsD,CAAAA,GACHsc,CAAAA,CAAY,IAAI,CAAA,CAChB0yB,CAAAA,CAAY,QAAU,WAAA,CAAY,IAAM,CACtC3yB,CAAAA,CAAYzgB,CAAAA,EAASA,CAAAA,CAAO,CAAC,EAC/B,CAAA,CAAG,GAAI,GAEX,CAAA,CAAG,CAACoE,CAAQ,CAAC,CAAA,CAEPivC,EAAQvyC,WAAAA,CAAY,IAAM,CAC1BsD,CAAAA,EAAYgvC,CAAAA,CAAY,UAC1B,aAAA,CAAcA,CAAAA,CAAY,OAAO,CAAA,CACjC1yB,CAAAA,CAAY,KAAK,CAAA,EAErB,CAAA,CAAG,CAACtc,CAAQ,CAAC,EAEPkvC,CAAAA,CAAQxyC,WAAAA,CAAY,IAAM,CAC1BsyC,CAAAA,CAAY,SACd,aAAA,CAAcA,CAAAA,CAAY,OAAO,CAAA,CAEnC1yB,CAAAA,CAAY,KAAK,CAAA,CACjBD,CAAAA,CAAW,CAAC,EACd,CAAA,CAAG,EAAE,EAEL,OAAAtkB,SAAAA,CAAU,IACD,IAAM,CACPi3C,EAAY,OAAA,EACd,aAAA,CAAcA,EAAY,OAAO,EAErC,EACC,EAAE,EAYE,CACL,OAAA,CAAA5yB,EACA,QAAA,CAAApc,CAAAA,CACA,MAAAo8B,CAAAA,CACA,KAAA,CAAA6S,EACA,KAAA,CAAAC,CAAAA,CACA,eAhBkBC,CAAAA,EAAyB,CAC3C,IAAM5rC,CAAAA,CAAQ,IAAA,CAAK,MAAM4rC,CAAAA,CAAe,IAAI,EACtC1rC,CAAAA,CAAU,IAAA,CAAK,MAAO0rC,CAAAA,CAAe,IAAA,CAAQ,EAAE,CAAA,CAC/CvyB,CAAAA,CAAOuyB,CAAAA,CAAe,EAAA,CAC5B,OAAO,CAAC5rC,CAAAA,CAAOE,EAASmZ,CAAI,CAAA,CACzB,IAAK3N,CAAAA,EAAOA,CAAAA,CAAI,GAAK,GAAA,CAAMA,CAAAA,CAAIA,CAAE,CAAA,CACjC,MAAA,CAAO,CAACA,CAAAA,CAAG/V,CAAAA,GAAM+V,IAAM,IAAA,EAAQ/V,CAAAA,CAAI,CAAC,CAAA,CACpC,IAAA,CAAK,GAAG,CACb,CAAA,EAQ4BkjB,CAAO,CACnC,CACF,CCtDO,SAASgzB,IAAW,CACzB,IAAMvxC,EAAUC,UAAAA,CAAW2L,EAAY,EACvC,GAAI,CAAC5L,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,8CAA8C,EAEhE,OAAOA,CACT,CCJO,SAASwxC,EAAAA,CAAUlG,EAAwB,KAAA,CAAwD,CACxG,GAAM,CAAC3zC,CAAAA,CAAO8zC,CAAQ,CAAA,CAAI3xC,QAAAA,CAASwxC,CAAY,CAAA,CAEzCmG,CAAAA,CAAS5yC,YAAY,IAAM,CAC/B4sC,EAAUr6B,CAAAA,EAAM,CAACA,CAAC,EACpB,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CAACzZ,CAAAA,CAAO85C,EAAQhG,CAAQ,CACjC,CCXO,SAASiG,EAAAA,CAAmB1hC,CAAAA,CAAU,IAAM,CACjD,GAAM,CAACspB,CAAAA,CAAUiK,CAAW,EAAIzpC,QAAAA,CAAS,KAAK,EACxC63C,CAAAA,CAAW/6C,MAAAA,CAAsB,IAAI,CAAA,CAErCg7C,CAAAA,CAAY/yC,YAAagzC,CAAAA,EAAoB,CACjDtO,EAAYsO,CAAM,CAAA,CAEdF,EAAS,OAAA,EACX,YAAA,CAAaA,EAAS,OAAO,CAAA,CAG3BE,IACFF,CAAAA,CAAS,OAAA,CAAU,OAAO,UAAA,CAAW,IAAM,CACzCpO,CAAAA,CAAY,KAAK,EACnB,CAAA,CAAGvzB,CAAO,CAAA,EAEd,CAAA,CAAG,CAACA,CAAO,CAAC,EAEZ,OAAA9V,SAAAA,CAAU,IACD,IAAM,CACPy3C,EAAS,OAAA,EAAS,YAAA,CAAaA,EAAS,OAAO,EACrD,EACC,EAAE,EAEE,CAAE,QAAA,CAAArY,EAAU,SAAA,CAAAsY,CAAU,CAC/B,CCrBO,SAASthC,EAAAA,EAAoB,CAiBlC,OAAO,CAAE,eAAA,CAhBgBwhC,GAA+B,CAEtD,GAAI,CAAC,QAAA,CAAS,oBAAqB,CACjCA,CAAAA,GACA,MACF,CAEA,SAAS,mBAAA,CAAoB,IAAM,CAGjCC,SAAAA,CAAU,IAAM,CACdD,CAAAA,GACF,CAAC,EACH,CAAC,EACH,CAEyB,CAC3B,CCNO,SAASE,EAAAA,CAAe,CAC7B,SAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CAAa,EAAA,CACb,SAAAC,CAAAA,CAAW,CACb,CAAA,CAA0B,KAClB,CAACxO,CAAAA,CAAWyO,CAAY,CAAA,CAAIt4C,QAAAA,CAAS,CAAC,CAAA,CACtC,CAACu4C,EAAiBC,CAAkB,CAAA,CAAIx4C,SAAS,CAAC,CAAA,CAClDsD,EAAexG,MAAAA,CAAuB,IAAI,EAG7BA,MAAAA,CAA+B,EAAE,EAEpDyI,gBAAgB,IAAM,CACpB,GAAIjC,CAAAA,CAAa,OAAA,CAAS,CACxB,IAAMhD,CAAAA,CAAW,IAAI,cAAA,CAAgBkvB,CAAAA,EAAY,CAC/C,IAAA,IAAWjvB,CAAAA,IAASivB,EAClBgpB,CAAAA,CAAmBj4C,CAAAA,CAAM,YAAY,MAAM,EAE/C,CAAC,CAAA,CACD,OAAAD,CAAAA,CAAS,OAAA,CAAQgD,EAAa,OAAO,CAAA,CAC9B,IAAMhD,CAAAA,CAAS,UAAA,EACxB,CACF,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMuzC,CAAAA,CAAW9uC,WAAAA,CAAa/H,GAAqC,CACjEs7C,CAAAA,CAAat7C,EAAE,aAAA,CAAc,SAAS,EACxC,CAAA,CAAG,EAAE,CAAA,CAEC,CAAE,aAAAsK,CAAAA,CAAc,WAAA,CAAAmxC,EAAa,UAAA,CAAAC,CAAW,EAAInxC,OAAAA,CAAQ,IAAM,CAC9D,IAAMoxC,CAAAA,CAAa,KAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,KAAA,CAAM9O,EAAYuO,CAAU,CAAA,CAAIC,CAAQ,CAAA,CACtEO,CAAAA,CAAW,KAAK,GAAA,CAAIT,CAAAA,CAAW,KAAK,IAAA,CAAA,CAAMtO,CAAAA,CAAY0O,GAAmBH,CAAU,CAAA,CAAIC,CAAQ,CAAA,CAE/FnkC,CAAAA,CAAU,EAAC,CACjB,IAAA,IAAS3S,EAAIo3C,CAAAA,CAAYp3C,CAAAA,CAAIq3C,EAAUr3C,CAAAA,EAAAA,CACrC2S,CAAAA,CAAQ,KAAK,CACX,KAAA,CAAO3S,EACP,SAAA,CAAWA,CAAAA,CAAI62C,CACjB,CAAC,CAAA,CAGH,OAAO,CACL,YAAA,CAAclkC,EACd,WAAA,CAAaikC,CAAAA,CAAYC,EACzB,UAAA,CAAYO,CACd,CACF,CAAA,CAAG,CAAC9O,CAAAA,CAAW0O,CAAAA,CAAiBJ,EAAWC,CAAAA,CAAYC,CAAQ,CAAC,CAAA,CAEhE,OAAO,CACL,YAAA,CAAA/0C,CAAAA,CACA,aAAAgE,CAAAA,CACA,WAAA,CAAAmxC,EACA,UAAA,CAAAC,CAAAA,CACA,SAAA7E,CAAAA,CACA,aAAA,CAAgBlwC,GAAkB,CAC5BL,CAAAA,CAAa,UACfA,CAAAA,CAAa,OAAA,CAAQ,UAAYK,CAAAA,CAAQy0C,CAAAA,EAE7C,CACF,CACF,CC1EO,SAAS/sC,EAAAA,CAAWF,CAAAA,CAA8BtL,EAAsC,CAC7F,KAAA,CAAO,QACP,GAAA,CAAK,SAAA,CACL,KAAM,SACR,CAAA,CAAW,CACT,IAAMyL,EAAI,IAAI,IAAA,CAAKH,CAAI,CAAA,CACvB,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAStL,CAAO,CAAA,CAAE,OAAOyL,CAAC,CAC3D,CAKO,SAASutC,EAAAA,CAAaxsC,EAAqB,CAChD,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA,CAAE,MAAA,CAAOA,CAAG,CAClD,CAKO,SAASysC,EAAAA,CAAeC,CAAAA,CAAgBC,EAAmB,KAAA,CAAe,CAC/E,OAAO,IAAI,IAAA,CAAK,aAAa,OAAA,CAAS,CACpC,MAAO,UAAA,CACP,QAAA,CAAAA,CACF,CAAC,EAAE,MAAA,CAAOD,CAAM,CAClB,CCxBO,SAASE,GAASC,CAAAA,CAAa9oC,CAAAA,CAAwB,CAC5D,OAAI8oC,CAAAA,CAAI,QAAU9oC,CAAAA,CAAe8oC,CAAAA,CAC1BA,EAAI,KAAA,CAAM,CAAA,CAAG9oC,CAAM,CAAA,CAAI,KAChC,CAKO,SAAS+oC,EAAAA,CAAQD,EAAqB,CAC3C,OAAOA,EACJ,WAAA,EAAY,CACZ,MAAK,CACL,OAAA,CAAQ,YAAa,EAAE,CAAA,CACvB,QAAQ,UAAA,CAAY,GAAG,EACvB,OAAA,CAAQ,UAAA,CAAY,EAAE,CAC3B","file":"index.mjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface PrimaryButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n}\r\n\r\nexport const PrimaryButton = React.forwardRef<HTMLButtonElement, PrimaryButtonProps>(\r\n ({ children, className, leftIcon, rightIcon, ...props }, ref) => {\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type ?? 'button'}\r\n className={cn(\r\n 'group relative inline-flex items-center justify-center gap-2 rounded-2xl px-5 py-3',\r\n 'bg-gradient-to-r from-blue-600 via-purple-600 to-blue-600',\r\n 'text-white font-semibold tracking-tight',\r\n 'shadow-[0_12px_40px_rgba(99,102,241,.45)]',\r\n 'transition-all duration-300',\r\n 'hover:scale-[1.03] hover:shadow-[0_18px_60px_rgba(99,102,241,.6)]',\r\n 'active:scale-[0.98]',\r\n 'disabled:opacity-50 disabled:cursor-not-allowed',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/40',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute inset-0 rounded-2xl bg-gradient-to-r from-white/18 via-white/5 to-white/18 opacity-0 blur-lg transition-opacity duration-300 group-hover:opacity-100\" />\r\n <span className=\"relative inline-flex items-center gap-2\">\r\n {leftIcon}\r\n {children}\r\n {rightIcon}\r\n </span>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nPrimaryButton.displayName = 'PrimaryButton';","import * as React from 'react';\r\nimport { cn } from './cn';\r\n\r\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(\r\n ({ children, ...props }, forwardedRef) => {\r\n if (!React.isValidElement(children)) {\r\n return null;\r\n }\r\n\r\n const child = children as React.ReactElement & { ref?: React.Ref<HTMLElement> };\r\n\r\n return React.cloneElement(child, {\r\n ...props,\r\n ...child.props,\r\n ref: (node: HTMLElement | null) => {\r\n // Handle forwardedRef\r\n if (typeof forwardedRef === 'function') {\r\n forwardedRef(node);\r\n } else if (forwardedRef) {\r\n (forwardedRef as React.MutableRefObject<HTMLElement | null>).current = node;\r\n }\r\n\r\n // Handle children's own ref\r\n const { ref } = child;\r\n if (typeof ref === 'function') {\r\n ref(node);\r\n } else if (ref && 'current' in ref) {\r\n (ref as React.MutableRefObject<HTMLElement | null>).current = node;\r\n }\r\n },\r\n className: cn(props.className, child.props.className),\r\n });\r\n }\r\n);\r\n\r\nSlot.displayName = 'Slot';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Slot } from '../../utils/Slot';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst buttonVariants = cva(\r\n \"group relative inline-flex items-center justify-center font-semibold tracking-tight transition-all duration-300 focus:outline-none focus:ring-2 focus:ring-purple-400/40 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100 disabled:active:scale-100 hover:scale-[1.02] active:scale-[0.98]\",\r\n {\r\n variants: {\r\n variant: {\r\n primary: \"bg-gradient-to-r from-blue-600 via-purple-600 to-blue-600 text-white border-transparent\",\r\n secondary: \"bg-zinc-100 text-zinc-900 border border-zinc-200 hover:bg-zinc-200 dark:bg-white/[0.05] dark:text-white dark:border-white/10 dark:hover:bg-white/[0.10] dark:hover:border-white/20\",\r\n outline: \"bg-transparent text-zinc-900 border border-zinc-300 hover:bg-zinc-100 dark:text-white dark:border-white/20 dark:hover:bg-white/[0.05] dark:hover:border-white/30\",\r\n ghost: \"bg-transparent text-zinc-600 hover:text-zinc-900 hover:bg-zinc-100 dark:text-white/80 dark:hover:text-white dark:hover:bg-white/[0.05] border-transparent\",\r\n danger: \"bg-rose-500/10 text-rose-600 border border-rose-500/20 hover:bg-rose-500/20 hover:border-rose-500/30 hover:text-rose-700 dark:text-rose-400 dark:hover:text-rose-300\",\r\n success: \"bg-emerald-500/10 text-emerald-600 border border-emerald-500/20 hover:bg-emerald-500/20 hover:border-emerald-500/30 hover:text-emerald-700 dark:text-emerald-400 dark:hover:text-emerald-300\",\r\n alert: \"bg-amber-500/10 text-amber-600 border border-amber-500/20 hover:bg-amber-500/20 hover:border-amber-500/30 hover:text-amber-700 dark:text-amber-400 dark:hover:text-amber-300\",\r\n },\r\n size: {\r\n sm: \"h-9 px-3 text-xs gap-1.5\",\r\n md: \"h-11 px-5 text-sm gap-2\",\r\n lg: \"h-14 px-8 text-base gap-3\",\r\n icon: \"h-10 w-10 p-0 flex items-center justify-center\",\r\n },\r\n shape: {\r\n default: \"rounded-2xl\",\r\n pill: \"rounded-full\",\r\n square: \"rounded-lg\",\r\n },\r\n shadow: {\r\n true: \"\",\r\n false: \"\",\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: \"primary\",\r\n shadow: true,\r\n class: \"shadow-[0_12px_40px_rgba(99,102,241,.45)] hover:shadow-[0_18px_60px_rgba(99,102,241,.6)]\",\r\n },\r\n {\r\n variant: \"secondary\",\r\n shadow: true,\r\n class: \"shadow-sm\",\r\n }\r\n ],\r\n defaultVariants: {\r\n variant: \"primary\",\r\n size: \"md\",\r\n shape: \"default\",\r\n shadow: true,\r\n },\r\n }\r\n);\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n /** Whether the button should be rendered as a child component using Slot */\r\n asChild?: boolean;\r\n /** Icon to display on the left side of the button text */\r\n leftIcon?: React.ReactNode;\r\n /** Icon to display on the right side of the button text */\r\n rightIcon?: React.ReactNode;\r\n /** Whether the button is in a loading state, showing a spinner and disabling interaction */\r\n isLoading?: boolean;\r\n}\r\n\r\n/**\r\n * A versatile button component with multiple variants, sizes, and states.\r\n * Supports glassmorphism, gradients, and icons.\r\n */\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ \r\n className, \r\n variant, \r\n size, \r\n shape,\r\n shadow,\r\n asChild = false,\r\n leftIcon, \r\n rightIcon, \r\n isLoading,\r\n children,\r\n disabled,\r\n ...props \r\n }, ref) => {\r\n const Comp = asChild ? Slot : \"button\";\r\n \r\n return (\r\n <Comp\r\n ref={ref}\r\n disabled={disabled || isLoading}\r\n className={cn(buttonVariants({ variant, size, shape, shadow, className }))}\r\n {...props}\r\n >\r\n {variant === 'primary' && !asChild && (\r\n <span className=\"pointer-events-none absolute inset-0 rounded-[inherit] bg-gradient-to-r from-white/18 via-white/5 to-white/18 opacity-0 blur-lg transition-opacity duration-300 group-hover:opacity-100\" />\r\n )}\r\n \r\n <span className=\"relative inline-flex items-center justify-center\">\r\n {isLoading && (\r\n <svg className=\"animate-spin -ml-1 mr-2 h-4 w-4 text-current\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\r\n <path className=\"opacity-75\" fill=\"currentColor\" 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\"></path>\r\n </svg>\r\n )}\r\n {!isLoading && leftIcon && <span className={cn(\"mr-2\", size === 'sm' && \"mr-1.5\")}>{leftIcon}</span>}\r\n {children}\r\n {!isLoading && rightIcon && <span className={cn(\"ml-2\", size === 'sm' && \"ml-1.5\")}>{rightIcon}</span>}\r\n </span>\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n","import React, { useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface GlowButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n}\r\n\r\nexport const GlowButton = React.forwardRef<HTMLButtonElement, GlowButtonProps>(\r\n ({ children, className, leftIcon, rightIcon, ...props }, ref) => {\r\n const localRef = useRef<HTMLButtonElement>(null);\r\n\r\n const handleMove = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n const el = localRef.current;\r\n if (!el) return;\r\n const rect = el.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n el.style.setProperty('--mouse-x', `${x}px`);\r\n el.style.setProperty('--mouse-y', `${y}px`);\r\n };\r\n\r\n // Merge refs\r\n React.useImperativeHandle(ref, () => localRef.current as HTMLButtonElement);\r\n\r\n return (\r\n <button\r\n ref={localRef}\r\n onMouseMove={handleMove}\r\n type={props.type ?? 'button'}\r\n className={cn(\r\n 'group relative inline-flex items-center justify-center gap-2 rounded-2xl px-6 py-3',\r\n 'bg-zinc-100 border border-zinc-200 text-zinc-900',\r\n 'dark:bg-white/[0.03] dark:border-white/10 dark:text-white',\r\n 'font-semibold tracking-tight overflow-hidden',\r\n 'transition-all duration-300',\r\n 'hover:bg-zinc-200 dark:hover:bg-white/[0.05] hover:scale-[1.02]',\r\n 'active:scale-[0.98]',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/40',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {/* Mouse follow glow */}\r\n <div \r\n className=\"pointer-events-none absolute -inset-px opacity-0 transition-opacity duration-300 group-hover:opacity-100\"\r\n style={{\r\n background: 'radial-gradient(600px circle at var(--mouse-x) var(--mouse-y), rgba(255,255,255,0.4), transparent 40%)'\r\n }}\r\n />\r\n \r\n {/* Border glow */}\r\n <div \r\n className=\"pointer-events-none absolute -inset-px rounded-2xl opacity-0 transition-opacity duration-300 group-hover:opacity-100\"\r\n style={{\r\n background: 'radial-gradient(300px circle at var(--mouse-x) var(--mouse-y), rgba(255,255,255,0.6), transparent 40%)',\r\n maskImage: 'linear-gradient(#fff, #fff), linear-gradient(#fff, #fff)',\r\n maskClip: 'content-box, border-box',\r\n maskComposite: 'exclude',\r\n WebkitMaskComposite: 'xor',\r\n padding: '1px'\r\n }}\r\n />\r\n\r\n <span className=\"relative inline-flex items-center gap-2 z-10\">\r\n {leftIcon}\r\n {children}\r\n {rightIcon}\r\n </span>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nGlowButton.displayName = 'GlowButton';\r\n","import React, { useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\n// Internal components for MetricCard\r\nfunction TokenBadge({\r\n accent = 'teal',\r\n children,\r\n}: {\r\n accent?: 'teal' | 'amber' | 'violet' | 'blue' | 'rose' | 'emerald' | 'indigo';\r\n children: React.ReactNode;\r\n}) {\r\n const map: Record<string, string> = {\r\n teal: 'bg-teal-500/90',\r\n amber: 'bg-amber-400/95',\r\n violet: 'bg-violet-500/90',\r\n blue: 'bg-blue-500/90',\r\n rose: 'bg-rose-500/90',\r\n emerald: 'bg-emerald-500/90',\r\n indigo: 'bg-indigo-500/90',\r\n };\r\n\r\n return (\r\n <div className={cn('flex h-11 w-11 items-center justify-center rounded-2xl', map[accent] ?? map.teal)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nfunction AccentGlow({ accent = 'teal' }: { accent?: 'teal' | 'amber' | 'violet' | 'blue' | 'rose' | 'emerald' | 'indigo' }) {\r\n const map: Record<string, string> = {\r\n teal: 'from-teal-400/25 via-teal-400/10 to-transparent',\r\n amber: 'from-amber-300/25 via-amber-300/10 to-transparent',\r\n violet: 'from-violet-400/25 via-violet-400/10 to-transparent',\r\n blue: 'from-blue-400/25 via-blue-400/10 to-transparent',\r\n rose: 'from-rose-400/25 via-rose-400/10 to-transparent',\r\n emerald: 'from-emerald-400/25 via-emerald-400/10 to-transparent',\r\n indigo: 'from-indigo-400/25 via-indigo-400/10 to-transparent',\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'pointer-events-none absolute -right-12 top-1/2 h-40 w-48 -translate-y-1/2 rotate-12',\r\n 'bg-gradient-to-l blur-2xl',\r\n map[accent] ?? map.teal\r\n )}\r\n />\r\n );\r\n}\r\n\r\nfunction SparkWave({ color = 'currentColor' }: { color?: string }) {\r\n return (\r\n <svg\r\n viewBox=\"0 0 120 40\"\r\n className=\"h-6 w-16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M2 22c10 0 10-10 20-10s10 10 20 10 10-10 20-10 10 10 20 10 10-10 20-10\"\r\n stroke={color}\r\n strokeWidth=\"4\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n opacity=\"0.95\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport interface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\r\n accent?: 'teal' | 'amber' | 'violet' | 'blue' | 'rose' | 'emerald' | 'indigo';\r\n icon: React.ReactNode;\r\n value: React.ReactNode;\r\n subtext?: React.ReactNode;\r\n showWave?: boolean;\r\n onClick?: () => void;\r\n}\r\n\r\nexport const MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\r\n ({ accent = 'teal', icon, value, subtext, showWave = false, onClick, className, ...props }, ref) => {\r\n const localRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const setCenter = () => {\r\n const el = localRef.current;\r\n if (!el) return;\r\n const r = el.getBoundingClientRect();\r\n el.style.setProperty('--x', `${Math.round(r.width / 2)}px`);\r\n el.style.setProperty('--y', `${Math.round(r.height / 2)}px`);\r\n };\r\n\r\n const handleMove = (e: React.MouseEvent) => {\r\n const el = localRef.current;\r\n if (!el) return;\r\n const r = el.getBoundingClientRect();\r\n el.style.setProperty('--x', `${e.clientX - r.left}px`);\r\n el.style.setProperty('--y', `${e.clientY - r.top}px`);\r\n };\r\n\r\n const waveColors: Record<string, string> = {\r\n teal: 'rgba(45,212,191,.95)',\r\n amber: 'rgba(251,191,36,.95)',\r\n violet: 'rgba(167,139,250,.95)',\r\n blue: 'rgba(96,165,250,.95)',\r\n rose: 'rgba(251,113,133,.95)',\r\n emerald: 'rgba(52,211,153,.95)',\r\n indigo: 'rgba(129,140,248,.95)',\r\n };\r\n\r\n const waveColor = waveColors[accent] ?? waveColors.teal;\r\n\r\n return (\r\n <div\r\n ref={(node) => {\r\n localRef.current = node;\r\n if (typeof ref === 'function') ref(node);\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\r\n }}\r\n onMouseEnter={setCenter}\r\n onMouseMove={handleMove}\r\n onClick={onClick}\r\n className={cn(\r\n 'group relative overflow-hidden rounded-2xl',\r\n 'bg-white border border-gray-200 shadow-sm',\r\n 'dark:bg-transparent dark:bg-gradient-to-b dark:from-white/[0.06] dark:to-white/[0.03]',\r\n 'dark:border-white/[0.10]',\r\n 'dark:shadow-[0_18px_55px_rgba(0,0,0,.55)]',\r\n 'transition-transform duration-300 hover:scale-[1.015]',\r\n onClick && 'cursor-pointer',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className=\"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100\"\r\n style={{\r\n background:\r\n 'radial-gradient(180px at var(--x, 50%) var(--y, 50%), rgba(255,255,255,.16), transparent 60%)',\r\n }}\r\n />\r\n <div className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(220px_140px_at_18%_18%,rgba(255,255,255,.08),transparent_60%)]\" />\r\n <AccentGlow accent={accent} />\r\n\r\n <div className=\"relative p-5\">\r\n <div className=\"flex items-start justify-between gap-4\">\r\n <TokenBadge accent={accent}>{icon}</TokenBadge>\r\n </div>\r\n\r\n <div className=\"mt-4 flex items-end justify-between gap-4\">\r\n <div className=\"min-w-0\">\r\n <div className=\"truncate text-2xl font-semibold tracking-tight text-gray-900 dark:text-white\">{value}</div>\r\n {subtext ? <div className=\"mt-1 text-sm text-gray-500 dark:text-white/45\">{subtext}</div> : null}\r\n </div>\r\n {showWave ? <SparkWave color={waveColor} /> : null}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nMetricCard.displayName = 'MetricCard';","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Slot } from '../utils/Slot';\r\nimport { cn } from '../utils/cn';\r\n\r\nconst surfaceVariants = cva(\r\n \"rounded-2xl backdrop-blur-xl transition-all duration-300 bg-white/70 border border-zinc-200 shadow-sm text-zinc-900 dark:bg-white/[0.03] dark:border-white/10 dark:shadow-[0_18px_55px_rgba(0,0,0,.45)] dark:text-white\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"\",\r\n ghost: \"bg-transparent border-transparent shadow-none\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface SurfaceProps \r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof surfaceVariants> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Surface = React.forwardRef<HTMLDivElement, SurfaceProps>(\r\n ({ className, variant, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : \"div\";\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(surfaceVariants({ variant, className }))}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\n\r\nSurface.displayName = 'Surface';","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\n\r\nexport const Card = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <Surface\r\n ref={ref}\r\n className={className}\r\n {...props}\r\n />\r\n));\r\nCard.displayName = \"Card\";\r\n\r\nexport const CardHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\r\n {...props}\r\n />\r\n));\r\nCardHeader.displayName = \"CardHeader\";\r\n\r\nexport const CardTitle = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLHeadingElement>\r\n>(({ className, ...props }, ref) => (\r\n <h3\r\n ref={ref}\r\n className={cn(\r\n \"text-2xl font-semibold leading-none tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nCardTitle.displayName = \"CardTitle\";\r\n\r\nexport const CardDescription = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, ...props }, ref) => (\r\n <p\r\n ref={ref}\r\n className={cn(\"text-sm text-gray-500 dark:text-white/50\", className)}\r\n {...props}\r\n />\r\n));\r\nCardDescription.displayName = \"CardDescription\";\r\n\r\nexport const CardContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\r\n));\r\nCardContent.displayName = \"CardContent\";\r\n\r\nexport const CardFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex items-center p-6 pt-0\", className)}\r\n {...props}\r\n />\r\n));\r\nCardFooter.displayName = \"CardFooter\";\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface TextProps extends React.HTMLAttributes<HTMLElement> {\r\n as?: 'p' | 'span' | 'div' | 'label' | 'code';\r\n variant?: 'default' | 'muted' | 'subtle' | 'lead' | 'error' | 'success' | 'warning' | 'info';\r\n size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';\r\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\r\n code?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\r\n ({ \r\n as: Component = 'p', \r\n variant = 'default', \r\n size = 'base', \r\n weight = 'normal',\r\n code = false,\r\n className, \r\n children, \r\n ...props \r\n }, ref) => {\r\n return (\r\n <Component\r\n ref={ref as React.Ref<any>}\r\n className={cn(\r\n 'leading-relaxed transition-colors duration-200',\r\n code && 'font-mono bg-zinc-100 dark:bg-white/[0.03] px-1.5 py-0.5 rounded text-[0.9em]',\r\n {\r\n // Variants\r\n 'text-zinc-900 dark:text-white': variant === 'default',\r\n 'text-zinc-500 dark:text-zinc-400': variant === 'muted',\r\n 'text-zinc-400 dark:text-zinc-500': variant === 'subtle',\r\n 'text-lg md:text-xl text-zinc-600 dark:text-zinc-300 font-light': variant === 'lead',\r\n 'text-rose-600 dark:text-rose-400': variant === 'error',\r\n 'text-emerald-600 dark:text-emerald-400': variant === 'success',\r\n 'text-amber-600 dark:text-amber-400': variant === 'warning',\r\n 'text-sky-600 dark:text-sky-400': variant === 'info',\r\n \r\n // Sizes\r\n 'text-xs': size === 'xs',\r\n 'text-sm': size === 'sm',\r\n 'text-base': size === 'base',\r\n 'text-lg': size === 'lg',\r\n 'text-xl': size === 'xl',\r\n 'text-2xl': size === '2xl',\r\n\r\n // Weights\r\n 'font-light': weight === 'light',\r\n 'font-normal': weight === 'normal',\r\n 'font-medium': weight === 'medium',\r\n 'font-semibold': weight === 'semibold',\r\n 'font-bold': weight === 'bold',\r\n },\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nText.displayName = 'Text';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\r\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\r\n weight?: 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold' | 'black';\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(\r\n ({ as: Component = 'h2', weight = 'bold', className, children, ...props }, ref) => {\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cn(\r\n 'tracking-tight text-zinc-900 dark:text-white transition-colors duration-200',\r\n {\r\n 'text-4xl md:text-5xl lg:text-6xl': Component === 'h1',\r\n 'text-3xl md:text-4xl': Component === 'h2',\r\n 'text-2xl md:text-3xl': Component === 'h3',\r\n 'text-xl md:text-2xl': Component === 'h4',\r\n 'text-lg md:text-xl': Component === 'h5',\r\n 'text-base md:text-lg': Component === 'h6',\r\n },\r\n {\r\n 'font-normal': weight === 'normal',\r\n 'font-medium': weight === 'medium',\r\n 'font-semibold': weight === 'semibold',\r\n 'font-bold': weight === 'bold',\r\n 'font-extrabold': weight === 'extrabold',\r\n 'font-black': weight === 'black',\r\n },\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nHeading.displayName = 'Heading';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface TextGradientProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /**\r\n * Starting color (Tailwind class)\r\n * @default 'from-blue-500'\r\n */\r\n from?: string;\r\n /**\r\n * Ending color (Tailwind class)\r\n * @default 'to-purple-500'\r\n */\r\n to?: string;\r\n /**\r\n * Middle color (Tailwind class)\r\n */\r\n via?: string;\r\n /**\r\n * Gradient direction\r\n * @default 'r'\r\n */\r\n direction?: 'r' | 'l' | 't' | 'b' | 'tr' | 'tl' | 'br' | 'bl';\r\n /**\r\n * Enable animated gradient shift\r\n * @default false\r\n */\r\n animate?: boolean;\r\n}\r\n\r\nexport const TextGradient = React.forwardRef<HTMLSpanElement, TextGradientProps>(\r\n ({ \r\n from = 'from-blue-500', \r\n to = 'to-purple-500', \r\n via, \r\n direction = 'r', \r\n animate = false, \r\n className, \r\n children, \r\n ...props \r\n }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(\r\n 'bg-clip-text text-transparent bg-gradient-to-' + direction,\r\n from,\r\n to,\r\n via,\r\n animate && 'animate-gradient bg-[length:200%_auto]',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n );\r\n }\r\n);\r\n\r\nTextGradient.displayName = 'TextGradient';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ShinyTextProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /**\r\n * The color of the shimmer effect\r\n * @default 'rgba(255,255,255,0.3)'\r\n */\r\n shimmerColor?: string;\r\n /**\r\n * Duration of the animation\r\n * @default '2s'\r\n */\r\n duration?: string;\r\n /**\r\n * Base text color\r\n * @default 'currentColor'\r\n */\r\n baseColor?: string;\r\n}\r\n\r\nexport const ShinyText = React.forwardRef<HTMLSpanElement, ShinyTextProps>(\r\n ({ \r\n shimmerColor = 'rgba(255,255,255,0.3)', \r\n duration = '2s', \r\n baseColor = 'currentColor',\r\n className, \r\n children, \r\n ...props \r\n }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(\r\n 'inline-block bg-clip-text text-transparent animate-shimmer will-change-[background-position]',\r\n className\r\n )}\r\n style={{\r\n backgroundImage: `linear-gradient(90deg, ${baseColor} 0%, ${baseColor} 40%, ${shimmerColor} 50%, ${baseColor} 60%, ${baseColor} 100%)`,\r\n backgroundSize: '200% 100%',\r\n animationDuration: duration,\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n }}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n );\r\n }\r\n);\r\n\r\nShinyText.displayName = 'ShinyText';\r\n","import { useEffect, useState, useRef } from 'react';\r\n\r\nexport interface UseInViewOptions {\r\n threshold?: number | number[];\r\n rootMargin?: string;\r\n root?: Element | null;\r\n enabled?: boolean;\r\n}\r\n\r\nexport function useInView(options: UseInViewOptions = { threshold: 0.1, rootMargin: '0px', enabled: true }) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const [isInView, setIsInView] = useState(false);\r\n const [hasAnimated, setHasAnimated] = useState(false);\r\n const { enabled = true } = options;\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n \r\n const element = ref.current;\r\n if (!element) return;\r\n\r\n const observer = new IntersectionObserver(([entry]) => {\r\n if (entry && entry.isIntersecting) {\r\n setIsInView(true);\r\n setHasAnimated(true);\r\n } else {\r\n setIsInView(false);\r\n }\r\n }, options);\r\n\r\n observer.observe(element);\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [options.threshold, options.rootMargin, options.root, enabled]);\r\n\r\n return { ref, isInView, hasAnimated };\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { useInView } from '../../hooks/useInView';\r\n\r\nexport interface RevealProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n direction?: 'up' | 'down' | 'left' | 'right';\r\n duration?: number;\r\n delay?: number;\r\n boxColor?: string;\r\n}\r\n\r\nexport function Reveal({\r\n children,\r\n direction = 'up',\r\n duration = 0.5,\r\n delay = 0,\r\n boxColor = 'bg-blue-500',\r\n className,\r\n ...props\r\n}: RevealProps) {\r\n const { ref, hasAnimated } = useInView({ threshold: 0.2 });\r\n\r\n const directionClasses = {\r\n up: 'translate-y-full',\r\n down: '-translate-y-full',\r\n left: 'translate-x-full',\r\n right: '-translate-x-full',\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"relative overflow-hidden inline-block\", className)}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"transition-all ease-out\",\r\n hasAnimated ? \"translate-x-0 translate-y-0 opacity-100\" : cn(\"opacity-0\", directionClasses[direction])\r\n )}\r\n style={{ \r\n transitionDuration: `${duration}s`,\r\n transitionDelay: `${delay}s`\r\n }}\r\n >\r\n {children}\r\n </div>\r\n \r\n {/* Reveal Box Overlay */}\r\n <div\r\n className={cn(\r\n \"absolute inset-0 z-10 transition-transform ease-in-out\",\r\n boxColor,\r\n hasAnimated ? (direction === 'left' || direction === 'right' ? 'scale-x-0' : 'scale-y-0') : 'scale-100'\r\n )}\r\n style={{ \r\n transitionDuration: `${duration}s`,\r\n transitionDelay: `${delay}s`,\r\n transformOrigin: direction === 'up' ? 'top' : direction === 'down' ? 'bottom' : direction === 'left' ? 'left' : 'right'\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Reveal } from '../feedback/Reveal';\r\n\r\nexport interface HeroTextProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * The main title text\r\n */\r\n title: string;\r\n /**\r\n * Text to be highlighted with a gradient\r\n */\r\n highlight?: string;\r\n /**\r\n * Subtitle text below the main title\r\n */\r\n subtitle?: string;\r\n /**\r\n * Tailwind gradient classes for the highlight\r\n * @default 'from-blue-400 via-indigo-500 to-purple-600'\r\n */\r\n gradient?: string;\r\n /**\r\n * Enable entrance animation\r\n * @default true\r\n */\r\n animate?: boolean;\r\n /**\r\n * Add a subtle glow effect behind the highlighted text\r\n * @default true\r\n */\r\n glow?: boolean;\r\n}\r\n\r\nexport const HeroText = ({\r\n title,\r\n highlight,\r\n subtitle,\r\n gradient = 'from-blue-400 via-indigo-500 to-purple-600',\r\n animate = true,\r\n glow = true,\r\n className,\r\n ...props\r\n}: HeroTextProps) => {\r\n const content = (\r\n <div className={cn(\"flex flex-col items-center text-center space-y-6\", className)} {...props}>\r\n <h1 className=\"text-5xl md:text-7xl font-bold tracking-tight text-white leading-tight\">\r\n {title}{' '}\r\n {highlight && (\r\n <span className=\"relative inline-block\">\r\n <span className={cn(\"bg-clip-text text-transparent bg-gradient-to-r\", gradient)}>\r\n {highlight}\r\n </span>\r\n {glow && (\r\n <span className={cn(\r\n \"absolute inset-0 blur-3xl opacity-40 -z-10 bg-gradient-to-r\",\r\n gradient\r\n )} aria-hidden=\"true\">\r\n {highlight}\r\n </span>\r\n )}\r\n </span>\r\n )}\r\n </h1>\r\n {subtitle && (\r\n <p className=\"text-lg md:text-xl text-white/50 max-w-2xl mx-auto leading-relaxed\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n\r\n if (animate) {\r\n return (\r\n <Reveal direction=\"up\" duration={1}>\r\n {content}\r\n </Reveal>\r\n );\r\n }\r\n\r\n return content;\r\n};\r\n\r\nHeroText.displayName = 'HeroText';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface LetterPullupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * The text to animate\r\n */\r\n text: string;\r\n /**\r\n * Delay between each letter animation in seconds\r\n * @default 0.05\r\n */\r\n delay?: number;\r\n}\r\n\r\nexport const LetterPullup = ({ text, delay = 0.05, className, ...props }: LetterPullupProps) => {\r\n const letters = text.split('');\r\n \r\n return (\r\n <div className={cn('flex flex-wrap justify-center overflow-hidden py-2', className)} {...props}>\r\n {letters.map((letter, i) => (\r\n <span\r\n key={i}\r\n className=\"inline-block animate-pullup opacity-0\"\r\n style={{ \r\n animation: `pullup 0.6s cubic-bezier(0.2, 0.8, 0.2, 1) forwards`,\r\n animationDelay: `${i * delay}s`,\r\n whiteSpace: letter === ' ' ? 'pre' : 'normal'\r\n }}\r\n >\r\n {letter}\r\n </span>\r\n ))}\r\n <style>{`\r\n @keyframes pullup {\r\n from { \r\n opacity: 0; \r\n transform: translateY(100%); \r\n }\r\n to { \r\n opacity: 1; \r\n transform: translateY(0); \r\n }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n};\r\n\r\nLetterPullup.displayName = 'LetterPullup';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\r\n required?: boolean;\r\n}\r\n\r\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\r\n ({ className, children, required, ...props }, ref) => {\r\n return (\r\n <label\r\n ref={ref}\r\n className={cn(\r\n 'text-sm font-medium leading-none text-gray-700 dark:text-white/80 peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {required && <span className=\"ml-1 text-rose-500\">*</span>}\r\n </label>\r\n );\r\n }\r\n);\r\n\r\nLabel.displayName = 'Label';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nconst inputVariants = cva(\r\n \"w-full rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-4 py-3 border border-gray-200 dark:border-white/[0.10] text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-white/30 focus:outline-none focus:ring-2 focus:ring-purple-400/30 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200\",\r\n {\r\n variants: {\r\n hasError: {\r\n true: \"border-rose-400/25 focus:ring-rose-300/25\",\r\n false: \"\",\r\n },\r\n hasLeftIcon: {\r\n true: \"pl-10\",\r\n false: \"\",\r\n },\r\n hasRightIcon: {\r\n true: \"pr-10\",\r\n false: \"\",\r\n },\r\n },\r\n defaultVariants: {\r\n hasError: false,\r\n hasLeftIcon: false,\r\n hasRightIcon: false,\r\n },\r\n }\r\n);\r\n\r\nexport interface TextInputProps \r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\r\n Omit<VariantProps<typeof inputVariants>, 'hasError'> {\r\n /** Label text displayed above the input */\r\n label?: string;\r\n /** Error message displayed below the input. If provided, the input will show an error state. */\r\n error?: string;\r\n /** Icon to display on the left side inside the input */\r\n leftIcon?: React.ReactNode;\r\n /** Icon to display on the right side inside the input */\r\n rightIcon?: React.ReactNode;\r\n /** Additional CSS classes for the container div */\r\n containerClassName?: string;\r\n}\r\n\r\n/**\r\n * A styled text input component with support for labels, error messages, and icons.\r\n * Follows the library's glassmorphic design system.\r\n */\r\nexport const TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\r\n ({ className, containerClassName, label, error: errorMsg, leftIcon, rightIcon, id, ...props }, ref) => {\r\n const inputId = id || React.useId();\r\n const hasError = !!errorMsg;\r\n\r\n return (\r\n <div className={cn('flex flex-col gap-1.5', containerClassName)}>\r\n {label && <Label htmlFor={inputId} required={props.required}>{label}</Label>}\r\n \r\n <div className=\"relative flex items-center\">\r\n {leftIcon && (\r\n <div className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-white/35\">\r\n {leftIcon}\r\n </div>\r\n )}\r\n \r\n <input\r\n ref={ref}\r\n id={inputId}\r\n className={cn(inputVariants({ \r\n hasError: hasError, \r\n hasLeftIcon: !!leftIcon, \r\n hasRightIcon: !!rightIcon, \r\n className \r\n }))}\r\n {...props}\r\n />\r\n\r\n {rightIcon && (\r\n <div className=\"absolute right-2 top-1/2 -translate-y-1/2\">\r\n {rightIcon}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {errorMsg && (\r\n <p className=\"text-xs text-rose-400 animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {errorMsg}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextInput.displayName = 'TextInput';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface CheckboxProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\r\n label?: string;\r\n error?: string;\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (event: { target: { checked: boolean } }) => void;\r\n}\r\n\r\nexport const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\r\n ({ className, label, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {\r\n const inputId = id || React.useId();\r\n const [isChecked, setIsChecked] = React.useState(defaultChecked || checked || false);\r\n\r\n React.useEffect(() => {\r\n if (checked !== undefined) {\r\n setIsChecked(checked);\r\n }\r\n }, [checked]);\r\n\r\n const handleClick = () => {\r\n if (disabled) return;\r\n const newValue = !isChecked;\r\n setIsChecked(newValue);\r\n if (onChange) {\r\n onChange({ target: { checked: newValue } } as any);\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex flex-col gap-1.5\", className)}>\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n id={inputId}\r\n role=\"checkbox\"\r\n aria-checked={isChecked}\r\n aria-label={label}\r\n onClick={handleClick}\r\n disabled={disabled}\r\n className={cn(\r\n 'flex items-center gap-3 rounded-2xl border border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-white/[0.03] px-4 py-3',\r\n 'hover:bg-gray-100 dark:hover:bg-white/[0.04] transition-colors',\r\n disabled && 'opacity-50 cursor-not-allowed'\r\n )}\r\n {...props}\r\n >\r\n <span\r\n aria-hidden=\"true\"\r\n className={cn(\r\n 'grid h-6 w-6 place-items-center rounded-lg border',\r\n isChecked \r\n ? 'border-emerald-400/30 bg-emerald-400/15' \r\n : 'border-gray-300 dark:border-white/10 bg-white dark:bg-white/[0.02]'\r\n )}\r\n >\r\n {isChecked ? (\r\n <svg className=\"h-4 w-4 text-emerald-200\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\r\n </svg>\r\n ) : null}\r\n </span>\r\n {label && (\r\n <span className=\"text-sm text-gray-700 dark:text-white/70\">{label}</span>\r\n )}\r\n </button>\r\n {error && (\r\n <p className=\"text-xs text-rose-500 mt-1 ml-1\">{error}</p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'type'> {\r\n label?: string;\r\n error?: string;\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (event: { target: { checked: boolean } }) => void;\r\n}\r\n\r\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\r\n ({ className, label, error, id, disabled, checked, defaultChecked, onChange, ...props }, ref) => {\r\n const inputId = id || React.useId();\r\n const [isChecked, setIsChecked] = React.useState(defaultChecked || checked || false);\r\n\r\n React.useEffect(() => {\r\n if (checked !== undefined) {\r\n setIsChecked(checked);\r\n }\r\n }, [checked]);\r\n\r\n const handleClick = () => {\r\n if (disabled) return;\r\n const newValue = !isChecked;\r\n setIsChecked(newValue);\r\n if (onChange) {\r\n onChange({ target: { checked: newValue } } as any);\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex flex-col gap-1.5\", className)}>\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n id={inputId}\r\n role=\"switch\"\r\n aria-checked={isChecked}\r\n onClick={handleClick}\r\n disabled={disabled}\r\n className={cn(\r\n 'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-black disabled:cursor-not-allowed disabled:opacity-50',\r\n isChecked ? 'bg-emerald-500' : 'bg-gray-200 dark:bg-white/[0.06]'\r\n )}\r\n {...props}\r\n >\r\n <span\r\n className={cn(\r\n 'pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0 transition-transform',\r\n isChecked ? 'translate-x-5' : 'translate-x-0'\r\n )}\r\n />\r\n </button>\r\n {label && (\r\n <Label \r\n htmlFor={inputId} \r\n className=\"cursor-pointer select-none text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\r\n onClick={handleClick}\r\n >\r\n {label}\r\n </Label>\r\n )}\r\n </div>\r\n {error && (\r\n <p className=\"text-xs text-rose-500 mt-1 ml-1\">{error}</p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nSwitch.displayName = 'Switch';\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface SelectOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface SelectProps {\r\n label?: string;\r\n name?: string;\r\n options: SelectOption[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n error?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>(\r\n ({ label, name, options, value, defaultValue, onChange, placeholder = 'Select an option', error, disabled, className }, ref) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const [activeIndex, setActiveIndex] = useState(-1);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const id = React.useId();\r\n\r\n const isControlled = value !== undefined;\r\n const currentValue = isControlled ? value : internalValue;\r\n const selectedOption = options.find((opt) => opt.value === currentValue);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n const index = options.findIndex(opt => opt.value === currentValue);\r\n setActiveIndex(index !== -1 ? index : 0);\r\n } else {\r\n setActiveIndex(-1);\r\n }\r\n }, [isOpen, currentValue, options]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => document.removeEventListener('mousedown', handleClickOutside);\r\n }, []);\r\n\r\n const handleSelect = (optionValue: string) => {\r\n if (disabled) return;\r\n if (!isControlled) {\r\n setInternalValue(optionValue);\r\n }\r\n onChange?.(optionValue);\r\n setIsOpen(false);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n \r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n if (isOpen && activeIndex !== -1) {\r\n handleSelect(options[activeIndex]!.value);\r\n } else {\r\n setIsOpen(true);\r\n }\r\n } else if (e.key === 'Escape') {\r\n setIsOpen(false);\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n if (!isOpen) {\r\n setIsOpen(true);\r\n } else {\r\n setActiveIndex((prev) => (prev + 1) % options.length);\r\n }\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n if (!isOpen) {\r\n setIsOpen(true);\r\n } else {\r\n setActiveIndex((prev) => (prev - 1 + options.length) % options.length);\r\n }\r\n } else if (e.key === 'Home') {\r\n e.preventDefault();\r\n if (isOpen) setActiveIndex(0);\r\n } else if (e.key === 'End') {\r\n e.preventDefault();\r\n if (isOpen) setActiveIndex(options.length - 1);\r\n }\r\n };\r\n\r\n return (\r\n <div \r\n ref={containerRef} \r\n className={cn(\"flex flex-col gap-1.5 relative\", className)}\r\n >\r\n {label && (\r\n <Label \r\n htmlFor={id}\r\n className={cn(disabled && \"opacity-50 cursor-not-allowed\")}\r\n >\r\n {label}\r\n </Label>\r\n )}\r\n\r\n <div\r\n ref={ref}\r\n id={id}\r\n role=\"combobox\"\r\n aria-expanded={isOpen}\r\n aria-haspopup=\"listbox\"\r\n aria-controls={`${id}-listbox`}\r\n aria-disabled={disabled}\r\n tabIndex={disabled ? -1 : 0}\r\n onClick={() => !disabled && setIsOpen(!isOpen)}\r\n onKeyDown={handleKeyDown}\r\n className={cn(\r\n 'w-full appearance-none rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-4 py-3',\r\n 'border border-gray-200 dark:border-white/[0.10]',\r\n 'text-gray-900 dark:text-white flex items-center',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/30',\r\n 'hover:bg-gray-100 dark:hover:bg-white/[0.05] cursor-pointer',\r\n disabled && 'cursor-not-allowed opacity-50 hover:bg-gray-50 dark:hover:bg-white/[0.04]',\r\n isOpen && 'border-gray-300 dark:border-white/20 ring-2 ring-purple-400/20',\r\n error && 'border-rose-400/25 focus:ring-rose-300/25'\r\n )}\r\n >\r\n <span className={cn(\"block truncate\", !selectedOption && \"text-gray-400 dark:text-white/20\")}>\r\n {selectedOption ? selectedOption.label : placeholder}\r\n </span>\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className={cn(\r\n \"absolute right-4 top-1/2 -translate-y-1/2 text-gray-400 dark:text-white/40 transition-transform duration-200\",\r\n isOpen && \"rotate-180\"\r\n )}\r\n >\r\n <path d=\"m6 9 6 6 6-6\"/>\r\n </svg>\r\n </div>\r\n\r\n {isOpen && (\r\n <div className=\"absolute top-full left-0 z-[110] mt-1 w-full overflow-hidden rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A] p-1 shadow-xl animate-in fade-in zoom-in-95 duration-100\">\r\n <ul\r\n id={`${id}-listbox`}\r\n role=\"listbox\"\r\n aria-activedescendant={activeIndex !== -1 ? `${id}-option-${activeIndex}` : undefined}\r\n className=\"max-h-60 overflow-auto p-1 flex flex-col gap-2\"\r\n >\r\n {options.map((option, index) => (\r\n <li\r\n key={option.value}\r\n id={`${id}-option-${index}`}\r\n role=\"option\"\r\n aria-selected={currentValue === option.value}\r\n onClick={() => handleSelect(option.value)}\r\n onMouseEnter={() => setActiveIndex(index)}\r\n className={cn(\r\n 'w-full rounded-2xl px-3 py-2 text-left text-sm transition-colors cursor-pointer',\r\n 'hover:bg-gray-100 dark:hover:bg-white/[0.06] hover:text-gray-900 dark:hover:text-white',\r\n (currentValue === option.value || activeIndex === index)\r\n ? 'bg-gray-100 dark:bg-white/[0.06] text-gray-900 dark:text-white/90' \r\n : 'text-gray-700 dark:text-white/80'\r\n )}\r\n >\r\n <div className=\"flex items-center justify-between gap-3\">\r\n <span className=\"flex-1 truncate\">{option.label}</span>\r\n {currentValue === option.value && (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"text-gray-900 dark:text-white\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n )}\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {error && (\r\n <p className=\"text-xs text-rose-400 animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {error}\r\n </p>\r\n )}\r\n <input type=\"hidden\" name={name} value={currentValue || ''} />\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n","import type { RefObject } from 'react';\r\nimport { useState, useLayoutEffect, useCallback } from 'react';\r\n\r\nexport type Side = 'top' | 'bottom' | 'left' | 'right';\r\nexport type Align = 'start' | 'center' | 'end';\r\n\r\ninterface UseFloatingOptions {\r\n side?: Side;\r\n align?: Align;\r\n sideOffset?: number;\r\n alignOffset?: number;\r\n isOpen?: boolean;\r\n}\r\n\r\ninterface Position {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nexport function useFloating(\r\n triggerRef: RefObject<HTMLElement>,\r\n contentRef: RefObject<HTMLElement>,\r\n options: UseFloatingOptions = {}\r\n) {\r\n const {\r\n side = 'bottom',\r\n align = 'center',\r\n sideOffset = 4,\r\n alignOffset = 0,\r\n isOpen = false,\r\n } = options;\r\n\r\n const [position, setPosition] = useState<Position>({ top: 0, left: 0 });\r\n const [isPositioned, setIsPositioned] = useState(false);\r\n\r\n const updatePosition = useCallback(() => {\r\n if (!triggerRef.current || !contentRef.current || !isOpen) return;\r\n\r\n const triggerRect = triggerRef.current.getBoundingClientRect();\r\n const contentRect = contentRef.current.getBoundingClientRect();\r\n \r\n let top = 0;\r\n let left = 0;\r\n\r\n // Calculate base position based on side\r\n switch (side) {\r\n case 'top':\r\n top = triggerRect.top - contentRect.height - sideOffset;\r\n break;\r\n case 'bottom':\r\n top = triggerRect.bottom + sideOffset;\r\n break;\r\n case 'left':\r\n left = triggerRect.left - contentRect.width - sideOffset;\r\n break;\r\n case 'right':\r\n left = triggerRect.right + sideOffset;\r\n break;\r\n }\r\n\r\n // Calculate alignment\r\n if (side === 'top' || side === 'bottom') {\r\n switch (align) {\r\n case 'start':\r\n left = triggerRect.left + alignOffset;\r\n break;\r\n case 'center':\r\n left = triggerRect.left + (triggerRect.width / 2) - (contentRect.width / 2) + alignOffset;\r\n break;\r\n case 'end':\r\n left = triggerRect.right - contentRect.width + alignOffset;\r\n break;\r\n }\r\n } else {\r\n switch (align) {\r\n case 'start':\r\n top = triggerRect.top + alignOffset;\r\n break;\r\n case 'center':\r\n top = triggerRect.top + (triggerRect.height / 2) - (contentRect.height / 2) + alignOffset;\r\n break;\r\n case 'end':\r\n top = triggerRect.bottom - contentRect.height + alignOffset;\r\n break;\r\n }\r\n }\r\n\r\n // Boundary checks (simple viewport containment)\r\n const padding = 8;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n if (left < padding) left = padding;\r\n if (left + contentRect.width > viewportWidth - padding) {\r\n left = viewportWidth - contentRect.width - padding;\r\n }\r\n if (top < padding) top = padding;\r\n if (top + contentRect.height > viewportHeight - padding) {\r\n top = viewportHeight - contentRect.height - padding;\r\n }\r\n\r\n setPosition({ top, left });\r\n setIsPositioned(true);\r\n }, [triggerRef, contentRef, side, align, sideOffset, alignOffset, isOpen]);\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen) {\r\n if (isPositioned) setIsPositioned(false);\r\n return;\r\n }\r\n\r\n updatePosition();\r\n\r\n // Use ResizeObserver for more robust updates\r\n const resizeObserver = new ResizeObserver(() => updatePosition());\r\n if (triggerRef.current) resizeObserver.observe(triggerRef.current);\r\n if (contentRef.current) resizeObserver.observe(contentRef.current);\r\n\r\n window.addEventListener('resize', updatePosition);\r\n window.addEventListener('scroll', updatePosition, true);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n window.removeEventListener('resize', updatePosition);\r\n window.removeEventListener('scroll', updatePosition, true);\r\n };\r\n }, [isOpen, updatePosition, triggerRef, contentRef]);\r\n\r\n return {\r\n position,\r\n isPositioned,\r\n updatePosition,\r\n };\r\n}\r\n","import React, { createContext, useContext, useState, useRef, useEffect, useLayoutEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { useFloating } from '../../hooks/useFloating';\r\n\r\ninterface PopoverContextValue {\r\n isOpen: boolean;\r\n setIsOpen: (isOpen: boolean) => void;\r\n triggerRef: React.RefObject<HTMLElement>;\r\n}\r\n\r\nconst PopoverContext = createContext<PopoverContextValue | undefined>(undefined);\r\n\r\nexport interface PopoverProps {\r\n children: React.ReactNode;\r\n open?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n}\r\n\r\nexport function Popover({ children, open, onOpenChange }: PopoverProps) {\r\n const [internalOpen, setInternalOpen] = useState(false);\r\n const triggerRef = useRef<HTMLElement>(null);\r\n\r\n const isControlled = open !== undefined;\r\n const isOpen = isControlled ? open : internalOpen;\r\n const setIsOpen = (newOpen: boolean) => {\r\n if (!isControlled) {\r\n setInternalOpen(newOpen);\r\n }\r\n onOpenChange?.(newOpen);\r\n };\r\n\r\n return (\r\n <PopoverContext.Provider value={{ isOpen, setIsOpen, triggerRef }}>\r\n <div className=\"relative inline-block\">\r\n {children}\r\n </div>\r\n </PopoverContext.Provider>\r\n );\r\n}\r\n\r\nexport interface PopoverTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function PopoverTrigger({ className, children, ...props }: PopoverTriggerProps) {\r\n const context = useContext(PopoverContext);\r\n if (!context) throw new Error('PopoverTrigger must be used within Popover');\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n context.setIsOpen(!context.isOpen);\r\n props.onClick?.(e as any);\r\n };\r\n\r\n return (\r\n <button\r\n ref={context.triggerRef as any}\r\n type=\"button\"\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={context.isOpen ? \"true\" : \"false\"}\r\n onClick={handleClick}\r\n className={cn(\"inline-flex items-center justify-center\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n align?: 'start' | 'end' | 'center';\r\n sideOffset?: number;\r\n}\r\n\r\nexport function PopoverContent({ className, children, align = 'center', sideOffset = 4, ...props }: PopoverContentProps) {\r\n const context = useContext(PopoverContext);\r\n if (!context) throw new Error('PopoverContent must be used within Popover');\r\n\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const { position, isPositioned } = useFloating(context.triggerRef, contentRef, {\r\n side: 'bottom',\r\n align,\r\n sideOffset,\r\n isOpen: context.isOpen,\r\n });\r\n\r\n useEffect(() => {\r\n if (context.isOpen) {\r\n const handleOutsideClick = (e: MouseEvent) => {\r\n if (\r\n contentRef.current &&\r\n !contentRef.current.contains(e.target as Node) &&\r\n context.triggerRef.current &&\r\n !context.triggerRef.current.contains(e.target as Node)\r\n ) {\r\n context.setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleOutsideClick);\r\n return () => {\r\n document.removeEventListener('mousedown', handleOutsideClick);\r\n };\r\n }\r\n }, [context.isOpen, context.setIsOpen, context.triggerRef]);\r\n\r\n if (!context.isOpen) return null;\r\n\r\n const getTransformOrigin = () => {\r\n // Popover currently only supports top/bottom in its logic, but let's make it robust\r\n const side = position.top > (context.triggerRef.current?.getBoundingClientRect().top || 0) ? 'bottom' : 'top';\r\n \r\n if (side === 'bottom') {\r\n if (align === 'start') return 'top left';\r\n if (align === 'end') return 'top right';\r\n return 'top center';\r\n }\r\n if (side === 'top') {\r\n if (align === 'start') return 'bottom left';\r\n if (align === 'end') return 'bottom right';\r\n return 'bottom center';\r\n }\r\n return 'center center';\r\n };\r\n\r\n return createPortal(\r\n <div\r\n ref={contentRef}\r\n style={{ \r\n top: position.top, \r\n left: position.left,\r\n transformOrigin: getTransformOrigin(),\r\n }}\r\n className={cn(\r\n \"fixed z-[110] min-w-[12rem] rounded-2xl border border-gray-200 dark:border-white/10 bg-white/80 dark:bg-white/[0.03] backdrop-blur-xl p-4 shadow-xl outline-none duration-200\",\r\n isPositioned ? \"animate-in fade-in zoom-in-95 opacity-100\" : \"opacity-0\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>,\r\n document.body\r\n );\r\n}\r\n","import React, { createContext, useContext, useState, useMemo, useEffect } from 'react';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ComboboxContextValue {\r\n value: string;\r\n onValueChange: (value: string) => void;\r\n searchTerm: string;\r\n setSearchTerm: (term: string) => void;\r\n isOpen: boolean;\r\n setIsOpen: (isOpen: boolean) => void;\r\n registerItem: (id: string, text: string, value: string) => () => void;\r\n isItemVisible: (id: string, text: string) => boolean;\r\n hasVisibleItems: boolean;\r\n activeIndex: number;\r\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\r\n visibleItems: { id: string, value: string }[];\r\n}\r\n\r\nconst ComboboxContext = createContext<ComboboxContextValue | undefined>(undefined);\r\n\r\nexport interface ComboboxProps {\r\n children: React.ReactNode;\r\n value?: string;\r\n defaultValue?: string;\r\n onValueChange?: (value: string) => void;\r\n filter?: (value: string, search: string) => boolean;\r\n usePopover?: boolean;\r\n}\r\n\r\nexport function Combobox({ \r\n children, \r\n value: controlledValue, \r\n defaultValue = '', \r\n onValueChange,\r\n filter = (text, search) => text.toLowerCase().includes(search.toLowerCase()),\r\n usePopover = true\r\n}: ComboboxProps) {\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [items, setItems] = useState<Map<string, { text: string, value: string }>>(new Map());\r\n const [activeIndex, setActiveIndex] = useState(-1);\r\n\r\n const isControlled = controlledValue !== undefined;\r\n const value = isControlled ? controlledValue : internalValue;\r\n\r\n const handleValueChange = (newValue: string) => {\r\n if (!isControlled) setInternalValue(newValue);\r\n onValueChange?.(newValue);\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n };\r\n\r\n const registerItem = React.useCallback((id: string, text: string, value: string) => {\r\n setItems(prev => {\r\n const next = new Map(prev);\r\n next.set(id, { text, value });\r\n return next;\r\n });\r\n return () => {\r\n setItems(prev => {\r\n const next = new Map(prev);\r\n next.delete(id);\r\n return next;\r\n });\r\n };\r\n }, []);\r\n\r\n const visibleItems = useMemo(() => {\r\n return Array.from(items.entries())\r\n .filter(([_, item]) => filter(item.text, searchTerm))\r\n .map(([id, item]) => ({ id, value: item.value }));\r\n }, [items, searchTerm, filter]);\r\n\r\n const hasVisibleItems = visibleItems.length > 0;\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setActiveIndex(0);\r\n } else {\r\n setActiveIndex(-1);\r\n }\r\n }, [isOpen]);\r\n\r\n return (\r\n <ComboboxContext.Provider value={{ \r\n value, \r\n onValueChange: handleValueChange, \r\n searchTerm, \r\n setSearchTerm, \r\n isOpen, \r\n setIsOpen,\r\n registerItem,\r\n isItemVisible: (id, text) => filter(text, searchTerm),\r\n hasVisibleItems,\r\n activeIndex,\r\n setActiveIndex,\r\n visibleItems\r\n }}>\r\n {usePopover ? (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n {children}\r\n </Popover>\r\n ) : (\r\n children\r\n )}\r\n </ComboboxContext.Provider>\r\n );\r\n}\r\n\r\nexport function ComboboxTrigger({ className, children, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement>) {\r\n const context = useContext(ComboboxContext);\r\n return (\r\n <PopoverTrigger\r\n role=\"combobox\"\r\n aria-expanded={context?.isOpen}\r\n aria-haspopup=\"listbox\"\r\n className={cn(\r\n \"flex h-10 w-full items-center justify-between rounded-2xl border border-gray-200 bg-gray-50 px-3 py-2 text-sm text-gray-900 placeholder:text-gray-500 focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 disabled:cursor-not-allowed disabled:opacity-50 dark:border-white/10 dark:bg-white/[0.03] dark:text-white dark:placeholder:text-white/40 dark:focus:border-white/20 dark:focus:ring-white/10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"ml-2 opacity-50\"\r\n >\r\n <path d=\"m6 9 6 6 6-6\"/>\r\n </svg>\r\n </PopoverTrigger>\r\n );\r\n}\r\n\r\nexport function ComboboxContent({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <PopoverContent className={cn(\"p-0 w-[200px]\", className)} align=\"start\" {...props}>\r\n {children}\r\n </PopoverContent>\r\n );\r\n}\r\n\r\nexport function ComboboxInput({ className, placeholder = \"Search...\", ...props }: React.InputHTMLAttributes<HTMLInputElement>) {\r\n const context = useContext(ComboboxContext);\r\n if (!context) throw new Error('ComboboxInput must be used within Combobox');\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n context.setActiveIndex((prev) => (prev + 1) % context.visibleItems.length);\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n context.setActiveIndex((prev) => (prev - 1 + context.visibleItems.length) % context.visibleItems.length);\r\n } else if (e.key === 'Enter') {\r\n e.preventDefault();\r\n if (context.activeIndex !== -1 && context.visibleItems[context.activeIndex]) {\r\n context.onValueChange(context.visibleItems[context.activeIndex]!.value);\r\n }\r\n } else if (e.key === 'Escape') {\r\n context.setIsOpen(false);\r\n }\r\n props.onKeyDown?.(e);\r\n };\r\n\r\n return (\r\n <div className=\"flex items-center border-b border-gray-200 dark:border-white/10 px-3\">\r\n <svg\r\n className=\"mr-2 h-4 w-4 shrink-0 opacity-50\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <path d=\"m21 21-4.3-4.3\" />\r\n </svg>\r\n <input\r\n className={cn(\r\n \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm text-gray-900 dark:text-white outline-none placeholder:text-gray-400 dark:placeholder:text-white/40 disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n placeholder={placeholder}\r\n value={context.searchTerm}\r\n onChange={(e) => context.setSearchTerm(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n aria-autocomplete=\"list\"\r\n aria-activedescendant={context.activeIndex !== -1 ? context.visibleItems[context.activeIndex]?.id : undefined}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport function ComboboxList({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div \r\n role=\"listbox\"\r\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden p-1\", className)} \r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function ComboboxEmpty({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n const context = useContext(ComboboxContext);\r\n if (!context) throw new Error('ComboboxEmpty must be used within Combobox');\r\n\r\n if (context.hasVisibleItems) return null;\r\n\r\n return (\r\n <div className={cn(\"py-6 text-center text-sm text-gray-500 dark:text-white/40\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface ComboboxItemProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n textValue?: string;\r\n}\r\n\r\nexport function ComboboxItem({ className, value, children, textValue, ...props }: ComboboxItemProps) {\r\n const context = useContext(ComboboxContext);\r\n if (!context) throw new Error('ComboboxItem must be used within Combobox');\r\n\r\n const id = React.useId();\r\n const text = textValue || (typeof children === 'string' ? children : value);\r\n const isVisible = context.isItemVisible(id, text);\r\n const isSelected = context.value === value;\r\n \r\n const itemIndex = context.visibleItems.findIndex(item => item.id === id);\r\n const isActive = context.activeIndex === itemIndex;\r\n\r\n useEffect(() => {\r\n return context.registerItem(id, text, value);\r\n }, [id, text, value, context.registerItem]);\r\n\r\n if (!isVisible) return null;\r\n\r\n return (\r\n <div\r\n id={id}\r\n role=\"option\"\r\n aria-selected={isSelected}\r\n onClick={() => context.onValueChange(value)}\r\n onMouseEnter={() => context.setActiveIndex(itemIndex)}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-2xl px-3 py-2 text-sm outline-none transition-colors\",\r\n \"text-gray-700 dark:text-white/80\",\r\n \"aria-selected:bg-gray-100 aria-selected:text-gray-900 dark:aria-selected:bg-white/[0.06] dark:aria-selected:text-white\",\r\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-white/[0.06] dark:hover:text-white\",\r\n (isSelected || isActive) && \"bg-gray-100 text-gray-900 dark:bg-white/[0.06] dark:text-white\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <svg\r\n className={cn(\r\n \"mr-2 h-4 w-4\",\r\n isSelected ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\r\n value?: number;\r\n defaultValue?: number;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n onChange?: (value: number) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\r\n ({ className, value: controlledValue, defaultValue = 0, min = 0, max = 100, step = 1, onChange, disabled, ...props }, ref) => {\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n const isControlled = controlledValue !== undefined;\r\n const value = isControlled ? controlledValue : internalValue;\r\n const trackRef = useRef<HTMLDivElement>(null);\r\n\r\n const percentage = ((value - min) / (max - min)) * 100;\r\n\r\n const handleMove = useCallback((clientX: number) => {\r\n if (disabled || !trackRef.current) return;\r\n\r\n const rect = trackRef.current.getBoundingClientRect();\r\n const width = rect.width;\r\n const left = rect.left;\r\n \r\n let newValue = ((clientX - left) / width) * (max - min) + min;\r\n \r\n // Clamp\r\n newValue = Math.min(Math.max(newValue, min), max);\r\n \r\n // Step\r\n const steps = Math.round((newValue - min) / step);\r\n newValue = min + steps * step;\r\n\r\n // Precision fix\r\n newValue = Number(newValue.toFixed(10)); // Avoid floating point errors\r\n\r\n if (!isControlled) {\r\n setInternalValue(newValue);\r\n }\r\n onChange?.(newValue);\r\n }, [disabled, isControlled, max, min, onChange, step]);\r\n\r\n const handleMouseDown = (e: React.MouseEvent) => {\r\n if (disabled) return;\r\n handleMove(e.clientX);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n handleMove(e.clientX);\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener('mousemove', handleMouseMove);\r\n document.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMouseMove);\r\n document.addEventListener('mouseup', handleMouseUp);\r\n };\r\n\r\n const handleTouchStart = (e: React.TouchEvent) => {\r\n if (disabled) return;\r\n const startTouch = e.touches[0];\r\n if (startTouch) {\r\n handleMove(startTouch.clientX);\r\n }\r\n\r\n const handleTouchMove = (e: TouchEvent) => {\r\n const moveTouch = e.touches[0];\r\n if (moveTouch) {\r\n handleMove(moveTouch.clientX);\r\n }\r\n };\r\n\r\n const handleTouchEnd = () => {\r\n document.removeEventListener('touchmove', handleTouchMove);\r\n document.removeEventListener('touchend', handleTouchEnd);\r\n };\r\n\r\n document.addEventListener('touchmove', handleTouchMove, { passive: false });\r\n document.addEventListener('touchend', handleTouchEnd);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n\r\n let newValue = value;\r\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\r\n newValue = Math.min(value + step, max);\r\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\r\n newValue = Math.max(value - step, min);\r\n } else if (e.key === 'Home') {\r\n newValue = min;\r\n } else if (e.key === 'End') {\r\n newValue = max;\r\n } else {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n if (newValue !== value) {\r\n if (!isControlled) {\r\n setInternalValue(newValue);\r\n }\r\n onChange?.(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"slider\"\r\n aria-valuemin={min}\r\n aria-valuemax={max}\r\n aria-valuenow={value}\r\n aria-disabled={disabled}\r\n tabIndex={disabled ? -1 : 0}\r\n onKeyDown={handleKeyDown}\r\n className={cn(\r\n \"relative flex w-full touch-none select-none items-center py-4 group\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n className\r\n )}\r\n onMouseDown={handleMouseDown}\r\n onTouchStart={handleTouchStart}\r\n {...props}\r\n >\r\n <div\r\n ref={trackRef}\r\n className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-gray-200 dark:bg-white/[0.06] backdrop-blur-sm border border-gray-200 dark:border-white/5\"\r\n >\r\n <div\r\n className=\"absolute h-full bg-gray-900 dark:bg-white transition-none dark:shadow-[0_0_10px_rgba(255,255,255,0.5)]\"\r\n style={{ width: `${percentage}%` }}\r\n />\r\n </div>\r\n <div\r\n className=\"absolute h-5 w-5 rounded-full border-2 border-gray-900 dark:border-white bg-white dark:bg-black shadow-md dark:shadow-[0_0_15px_rgba(255,255,255,0.5)] transition-transform hover:scale-110 focus:scale-110\"\r\n style={{ left: `calc(${percentage}% - 10px)` }}\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\r\n\r\nexport interface CalendarProps {\r\n className?: string;\r\n value?: Date;\r\n onChange?: (date: Date) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\nconst MONTHS = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n];\r\n\r\nexport function Calendar({ className, value, onChange, minDate, maxDate }: CalendarProps) {\r\n const [currentDate, setCurrentDate] = useState(value || new Date());\r\n const [viewDate, setViewDate] = useState(value || new Date());\r\n\r\n const getDaysInMonth = (year: number, month: number) => {\r\n return new Date(year, month + 1, 0).getDate();\r\n };\r\n\r\n const getFirstDayOfMonth = (year: number, month: number) => {\r\n return new Date(year, month, 1).getDay();\r\n };\r\n\r\n const handlePrevMonth = () => {\r\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1));\r\n };\r\n\r\n const handleNextMonth = () => {\r\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1));\r\n };\r\n\r\n const handleDateClick = (day: number) => {\r\n const newDate = new Date(viewDate.getFullYear(), viewDate.getMonth(), day);\r\n if (onChange) {\r\n onChange(newDate);\r\n }\r\n setCurrentDate(newDate);\r\n };\r\n\r\n const isSelected = (day: number) => {\r\n return value && \r\n value.getDate() === day &&\r\n value.getMonth() === viewDate.getMonth() &&\r\n value.getFullYear() === viewDate.getFullYear();\r\n };\r\n\r\n const isToday = (day: number) => {\r\n const today = new Date();\r\n return today.getDate() === day &&\r\n today.getMonth() === viewDate.getMonth() &&\r\n today.getFullYear() === viewDate.getFullYear();\r\n };\r\n\r\n const renderDays = () => {\r\n const daysInMonth = getDaysInMonth(viewDate.getFullYear(), viewDate.getMonth());\r\n const firstDay = getFirstDayOfMonth(viewDate.getFullYear(), viewDate.getMonth());\r\n const days = [];\r\n\r\n // Empty cells for previous month\r\n for (let i = 0; i < firstDay; i++) {\r\n days.push(<div key={`empty-${i}`} className=\"h-9 w-9\" />);\r\n }\r\n\r\n // Days of current month\r\n for (let day = 1; day <= daysInMonth; day++) {\r\n const selected = isSelected(day);\r\n const today = isToday(day);\r\n \r\n days.push(\r\n <button\r\n key={day}\r\n onClick={() => handleDateClick(day)}\r\n type=\"button\"\r\n className={cn(\r\n \"h-9 w-9 rounded-2xl text-sm font-medium transition-all duration-200\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.06] focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/20\",\r\n selected && \"bg-gray-900 text-white dark:bg-white dark:text-black shadow-md dark:shadow-[0_0_15px_rgba(255,255,255,0.3)] hover:bg-gray-800 dark:hover:bg-white/90\",\r\n !selected && today && \"bg-gray-100 dark:bg-white/[0.03] text-gray-900 dark:text-white border border-gray-200 dark:border-white/10\",\r\n !selected && !today && \"text-gray-700 dark:text-white/70 hover:text-gray-900 dark:hover:text-white\"\r\n )}\r\n >\r\n {day}\r\n </button>\r\n );\r\n }\r\n\r\n return days;\r\n };\r\n\r\n return (\r\n <div className={cn(\"p-4 bg-white dark:bg-black/40 backdrop-blur-xl border border-gray-200 dark:border-white/10 rounded-2xl w-fit\", className)}>\r\n <div className=\"flex items-center justify-between mb-4 px-1\">\r\n <div className=\"font-semibold text-gray-900 dark:text-white\">\r\n {MONTHS[viewDate.getMonth()]} <span className=\"text-gray-500 dark:text-white/50\">{viewDate.getFullYear()}</span>\r\n </div>\r\n <div className=\"flex gap-1\">\r\n <button\r\n onClick={handlePrevMonth}\r\n type=\"button\"\r\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/70 hover:text-gray-900 dark:hover:text-white transition-colors\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n <button\r\n onClick={handleNextMonth}\r\n type=\"button\"\r\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/70 hover:text-gray-900 dark:hover:text-white transition-colors\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div className=\"grid grid-cols-7 gap-1 mb-2 text-center\">\r\n {DAYS.map(day => (\r\n <div key={day} className=\"h-9 w-9 flex items-center justify-center text-xs font-medium text-gray-400 dark:text-white/40\">\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n \r\n <div className=\"grid grid-cols-7 gap-1\">\r\n {renderDays()}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\r\nimport { Calendar } from '../data-display/Calendar';\r\nimport { cn } from '../../utils/cn';\r\nimport { Calendar as CalendarIcon } from 'lucide-react';\r\n\r\nexport interface DatePickerProps {\r\n value?: Date;\r\n onChange?: (date: Date) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport function DatePicker({ value, onChange, placeholder = \"Pick a date\", className }: DatePickerProps) {\r\n const [date, setDate] = useState<Date | undefined>(value);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleSelect = (newDate: Date) => {\r\n setDate(newDate);\r\n onChange?.(newDate);\r\n setIsOpen(false);\r\n };\r\n\r\n const formatDate = (d: Date) => {\r\n return d.toLocaleDateString('en-US', {\r\n month: 'long',\r\n day: 'numeric',\r\n year: 'numeric',\r\n });\r\n };\r\n\r\n const handleMouseMove = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n e.currentTarget.style.setProperty('--x', `${x}px`);\r\n e.currentTarget.style.setProperty('--y', `${y}px`);\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onMouseMove={handleMouseMove}\r\n className={cn(\r\n \"group relative flex h-11 w-full items-center justify-between rounded-2xl border border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-white/[0.03] px-4 py-2 text-sm text-gray-900 dark:text-white transition-all duration-200 overflow-hidden\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.06] focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/15\",\r\n !date && \"text-gray-400 dark:text-white/40\",\r\n className\r\n )}\r\n >\r\n <div className=\"absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none\"\r\n style={{\r\n background: `radial-gradient(600px circle at var(--x) var(--y), rgba(255,255,255,0.06), transparent 40%)`\r\n }}\r\n />\r\n <span className=\"relative z-10\">{date ? formatDate(date) : placeholder}</span>\r\n <CalendarIcon className=\"relative z-10 h-4 w-4 text-white/40\" />\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0 border-none bg-transparent shadow-none\" align=\"start\">\r\n <Calendar\r\n value={date}\r\n onChange={handleSelect}\r\n className=\"shadow-2xl shadow-black/50\"\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {\r\n orientation?: 'vertical' | 'horizontal' | 'both';\r\n scrollbarSize?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nexport const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\r\n ({ className, children, orientation = 'vertical', scrollbarSize = 'sm', ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'overflow-auto',\r\n // Scrollbar base styles\r\n '[&::-webkit-scrollbar]:bg-transparent',\r\n '[&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-thumb]:bg-white/[0.06]',\r\n '[&::-webkit-scrollbar-thumb]:rounded-full',\r\n 'hover:[&::-webkit-scrollbar-thumb]:bg-gray-400 dark:hover:[&::-webkit-scrollbar-thumb]:bg-white/20',\r\n '[&::-webkit-scrollbar-track]:bg-transparent',\r\n \r\n // Firefox support\r\n '[scrollbar-width:thin] [scrollbar-color:rgba(0,0,0,0.2)_transparent] dark:[scrollbar-color:rgba(255,255,255,0.1)_transparent]',\r\n \r\n // Orientation specific\r\n orientation === 'vertical' && 'overflow-y-auto overflow-x-hidden',\r\n orientation === 'horizontal' && 'overflow-x-auto overflow-y-hidden',\r\n orientation === 'both' && 'overflow-auto',\r\n\r\n // Size specific\r\n scrollbarSize === 'sm' && '[&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar]:h-1.5',\r\n scrollbarSize === 'md' && '[&::-webkit-scrollbar]:w-2.5 [&::-webkit-scrollbar]:h-2.5',\r\n scrollbarSize === 'lg' && '[&::-webkit-scrollbar]:w-4 [&::-webkit-scrollbar]:h-4',\r\n \r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nScrollArea.displayName = 'ScrollArea';\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\r\nimport { Calendar } from '../data-display/Calendar';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\nimport { cn } from '../../utils/cn';\r\nimport { Calendar as CalendarIcon, Clock } from 'lucide-react';\r\n\r\nexport interface DateTimePickerProps {\r\n value?: Date;\r\n onChange?: (date: Date) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport function DateTimePicker({ value, onChange, placeholder = \"Pick date & time\", className }: DateTimePickerProps) {\r\n const [date, setDate] = useState<Date | undefined>(value);\r\n const [isOpen, setIsOpen] = useState(false);\r\n \r\n // Time state\r\n const [hours, setHours] = useState(value ? value.getHours() : 12);\r\n const [minutes, setMinutes] = useState(value ? value.getMinutes() : 0);\r\n\r\n useEffect(() => {\r\n if (value) {\r\n setDate(value);\r\n setHours(value.getHours());\r\n setMinutes(value.getMinutes());\r\n }\r\n }, [value]);\r\n\r\n const handleDateSelect = (newDate: Date) => {\r\n const updatedDate = new Date(newDate);\r\n updatedDate.setHours(hours);\r\n updatedDate.setMinutes(minutes);\r\n setDate(updatedDate);\r\n onChange?.(updatedDate);\r\n };\r\n\r\n const handleTimeChange = (type: 'hours' | 'minutes', val: string) => {\r\n let num = parseInt(val, 10);\r\n if (isNaN(num)) return;\r\n\r\n let newHours = hours;\r\n let newMinutes = minutes;\r\n\r\n if (type === 'hours') {\r\n num = Math.max(0, Math.min(23, num));\r\n setHours(num);\r\n newHours = num;\r\n } else {\r\n num = Math.max(0, Math.min(59, num));\r\n setMinutes(num);\r\n newMinutes = num;\r\n }\r\n\r\n const baseDate = date || new Date();\r\n const updatedDate = new Date(baseDate);\r\n updatedDate.setHours(newHours);\r\n updatedDate.setMinutes(newMinutes);\r\n setDate(updatedDate);\r\n onChange?.(updatedDate);\r\n };\r\n\r\n const formatDateTime = (d: Date) => {\r\n return d.toLocaleDateString('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n });\r\n };\r\n\r\n const handleMouseMove = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n const rect = e.currentTarget.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n e.currentTarget.style.setProperty('--x', `${x}px`);\r\n e.currentTarget.style.setProperty('--y', `${y}px`);\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onMouseMove={handleMouseMove}\r\n className={cn(\r\n \"group relative flex h-11 w-full items-center justify-between rounded-2xl border border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-white/[0.03] px-4 py-2 text-sm text-gray-900 dark:text-white transition-all duration-200 overflow-hidden\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.06] focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/15\",\r\n !date && \"text-gray-400 dark:text-white/40\",\r\n className\r\n )}\r\n >\r\n <div className=\"absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none\"\r\n style={{\r\n background: `radial-gradient(600px circle at var(--x) var(--y), rgba(0,0,0,0.06), transparent 40%)`\r\n }}\r\n />\r\n <span className=\"relative z-10\">{date ? formatDateTime(date) : placeholder}</span>\r\n <div className=\"flex items-center gap-2 text-gray-400 dark:text-white/40\">\r\n <CalendarIcon className=\"h-4 w-4\" />\r\n <Clock className=\"h-4 w-4\" />\r\n </div>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0 border-none bg-transparent shadow-none\" align=\"start\">\r\n <div className=\"flex flex-col rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-black/40 backdrop-blur-xl shadow-2xl dark:shadow-black/50\">\r\n <div className=\"flex\">\r\n <div className=\"p-4 border-r border-gray-200 dark:border-white/10\">\r\n <Calendar\r\n value={date}\r\n onChange={handleDateSelect}\r\n className=\"border-0 p-0 bg-transparent backdrop-blur-none shadow-none rounded-none\"\r\n />\r\n </div>\r\n \r\n <div className=\"flex flex-col p-4 w-[160px] h-[340px]\">\r\n <div className=\"mb-3 text-sm font-medium text-gray-700 dark:text-white/70\">Time</div>\r\n <div className=\"flex flex-1 gap-2 min-h-0 overflow-hidden\">\r\n <ScrollArea className=\"flex-1 flex flex-col gap-1\" scrollbarSize=\"sm\">\r\n <div className=\"text-xs text-gray-400 dark:text-white/40 text-center mb-1 sticky top-0 bg-white dark:bg-[#0A0A0A] py-1 z-10\">Hr</div>\r\n <div className=\"flex flex-col gap-1\">\r\n {Array.from({ length: 24 }).map((_, i) => (\r\n <button\r\n key={i}\r\n onClick={() => handleTimeChange('hours', i.toString())}\r\n className={cn(\r\n \"w-full rounded-lg px-1 py-1.5 text-sm transition-colors text-center shrink-0\",\r\n hours === i \r\n ? \"bg-emerald-500 dark:bg-emerald-600/80 text-white font-medium\" \r\n : \"text-gray-700 dark:text-white/70 hover:bg-gray-100 dark:hover:bg-white/[0.06] hover:text-gray-900 dark:hover:text-white\"\r\n )}\r\n >\r\n {i.toString().padStart(2, '0')}\r\n </button>\r\n ))}\r\n </div>\r\n </ScrollArea>\r\n <div className=\"w-[1px] bg-gray-200 dark:bg-white/[0.06]\" />\r\n <ScrollArea className=\"flex-1 flex flex-col gap-1\" scrollbarSize=\"sm\">\r\n <div className=\"text-xs text-gray-400 dark:text-white/40 text-center mb-1 sticky top-0 bg-white dark:bg-[#0A0A0A] py-1 z-10\">Min</div>\r\n <div className=\"flex flex-col gap-1\">\r\n {Array.from({ length: 60 }).map((_, i) => (\r\n <button\r\n key={i}\r\n onClick={() => handleTimeChange('minutes', i.toString())}\r\n className={cn(\r\n \"w-full rounded-lg px-1 py-1.5 text-sm transition-colors text-center shrink-0\",\r\n minutes === i \r\n ? \"bg-emerald-500 dark:bg-emerald-600/80 text-white font-medium\" \r\n : \"text-gray-700 dark:text-white/70 hover:bg-gray-100 dark:hover:bg-white/[0.06] hover:text-gray-900 dark:hover:text-white\"\r\n )}\r\n >\r\n {i.toString().padStart(2, '0')}\r\n </button>\r\n ))}\r\n </div>\r\n </ScrollArea>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label?: string;\r\n error?: string;\r\n}\r\n\r\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\r\n ({ className, label, error, id, disabled, ...props }, ref) => {\r\n const generatedId = React.useId();\r\n const inputId = id || generatedId;\r\n\r\n return (\r\n <div className=\"flex flex-col gap-1.5\">\r\n {label && (\r\n <Label \r\n htmlFor={inputId}\r\n className={cn(disabled && \"opacity-50 cursor-not-allowed\")}\r\n >\r\n {label}\r\n </Label>\r\n )}\r\n \r\n <textarea\r\n ref={ref}\r\n id={inputId}\r\n disabled={disabled}\r\n className={cn(\r\n 'w-full rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-4 py-3',\r\n 'border border-gray-200 dark:border-white/[0.10]',\r\n 'text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-white/30',\r\n 'focus:outline-none focus:ring-2 focus:ring-purple-400/30',\r\n 'resize-none',\r\n 'disabled:cursor-not-allowed disabled:opacity-50',\r\n error && 'border-rose-400/25 focus:ring-rose-300/25',\r\n className\r\n )}\r\n {...props}\r\n />\r\n\r\n {error && (\r\n <p className=\"text-xs text-rose-400 animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextarea.displayName = 'Textarea';\r\n","import React, { useState } from 'react';\r\nimport { TextInput, type TextInputProps } from './TextInput';\r\nimport { Eye, EyeOff } from 'lucide-react';\r\nimport { Button } from '../button/Button';\r\n\r\nexport interface PasswordInputProps extends Omit<TextInputProps, 'type' | 'rightIcon'> {}\r\n\r\n/**\r\n * A specialized input for passwords with a built-in visibility toggle.\r\n */\r\nexport const PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\r\n (props, ref) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n return (\r\n <TextInput\r\n {...props}\r\n ref={ref}\r\n type={showPassword ? 'text' : 'password'}\r\n rightIcon={\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-8 w-8 p-0 hover:bg-white/10\"\r\n onClick={() => setShowPassword(!showPassword)}\r\n aria-label={showPassword ? 'Hide password' : 'Show password'}\r\n >\r\n {showPassword ? (\r\n <EyeOff className=\"h-4 w-4 text-gray-400 dark:text-white/35\" />\r\n ) : (\r\n <Eye className=\"h-4 w-4 text-gray-400 dark:text-white/35\" />\r\n )}\r\n </Button>\r\n }\r\n />\r\n );\r\n }\r\n);\r\n\r\nPasswordInput.displayName = 'PasswordInput';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils/cn';\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex items-center gap-1 rounded-full border px-2.5 py-1 text-xs font-medium whitespace-nowrap transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-gray-100 text-gray-700 border-gray-200 dark:bg-white/[0.06] dark:text-white/70 dark:border-white/10\",\r\n neutral: \"bg-gray-100 text-gray-700 border-gray-200 dark:bg-white/[0.06] dark:text-white/70 dark:border-white/10\",\r\n success: \"bg-emerald-100 text-emerald-700 border-emerald-200 dark:bg-emerald-400/15 dark:text-emerald-200 dark:border-emerald-400/20\",\r\n warning: \"bg-amber-100 text-amber-700 border-amber-200 dark:bg-amber-400/15 dark:text-amber-200 dark:border-amber-400/20\",\r\n danger: \"bg-rose-100 text-rose-700 border-rose-200 dark:bg-rose-400/15 dark:text-rose-200 dark:border-rose-400/20\",\r\n info: \"bg-sky-100 text-sky-700 border-sky-200 dark:bg-sky-400/15 dark:text-sky-200 dark:border-sky-400/20\",\r\n outline: \"bg-transparent text-white/60 border-white/10 hover:bg-white/[0.06]\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface BadgeProps \r\n extends React.HTMLAttributes<HTMLSpanElement>,\r\n VariantProps<typeof badgeVariants> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\r\n ({ className, variant, ...props }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(badgeVariants({ variant }), className)}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\n\r\nBadge.displayName = 'Badge';\r\n","import React, { useState, KeyboardEvent } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { X } from 'lucide-react';\r\nimport { Badge } from '../../primitives/Badge';\r\nimport { Label } from './Label';\r\n\r\nexport interface TagInputProps {\r\n label?: string;\r\n placeholder?: string;\r\n tags: string[];\r\n onChange: (tags: string[]) => void;\r\n error?: string;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * An input component for managing a list of tags.\r\n */\r\nexport function TagInput({\r\n label,\r\n placeholder = 'Add tag...',\r\n tags,\r\n onChange,\r\n error,\r\n className,\r\n}: TagInputProps) {\r\n const [inputValue, setInputValue] = useState('');\r\n\r\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === 'Enter' && inputValue.trim()) {\r\n e.preventDefault();\r\n if (!tags.includes(inputValue.trim())) {\r\n onChange([...tags, inputValue.trim()]);\r\n }\r\n setInputValue('');\r\n } else if (e.key === 'Backspace' && !inputValue && tags.length > 0) {\r\n onChange(tags.slice(0, -1));\r\n }\r\n };\r\n\r\n const removeTag = (tagToRemove: string) => {\r\n onChange(tags.filter((tag) => tag !== tagToRemove));\r\n };\r\n\r\n return (\r\n <div className={cn('flex flex-col gap-1.5', className)}>\r\n {label && <Label>{label}</Label>}\r\n \r\n <div className={cn(\r\n \"flex flex-wrap gap-2 rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-3 py-2 border border-gray-200 dark:border-white/[0.10] focus-within:ring-2 focus-within:ring-purple-400/30 transition-all duration-200\",\r\n error && \"border-rose-400/25\"\r\n )}>\r\n {tags.map((tag) => (\r\n <Badge key={tag} variant=\"default\" className=\"gap-1 pr-1\">\r\n {tag}\r\n <button\r\n type=\"button\"\r\n onClick={() => removeTag(tag)}\r\n className=\"rounded-full p-0.5 hover:bg-black/10 dark:hover:bg-white/10 transition-colors\"\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n </Badge>\r\n ))}\r\n \r\n <input\r\n type=\"text\"\r\n value={inputValue}\r\n onChange={(e) => setInputValue(e.target.value)}\r\n onKeyDown={handleKeyDown}\r\n placeholder={tags.length === 0 ? placeholder : ''}\r\n className=\"flex-1 bg-transparent py-1 text-sm outline-none placeholder:text-gray-400 dark:placeholder:text-white/30 min-w-[120px]\"\r\n />\r\n </div>\r\n\r\n {error && (\r\n <p className=\"text-xs text-rose-400 animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\nexport interface ColorPickerProps {\r\n label?: string;\r\n value: string;\r\n onChange: (value: string) => void;\r\n error?: string;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * A styled color picker component.\r\n */\r\nexport function ColorPicker({\r\n label,\r\n value,\r\n onChange,\r\n error,\r\n className,\r\n}: ColorPickerProps) {\r\n return (\r\n <div className={cn('flex flex-col gap-1.5', className)}>\r\n {label && <Label>{label}</Label>}\r\n \r\n <div className=\"flex items-center gap-3\">\r\n <div \r\n className=\"h-10 w-10 rounded-xl border border-gray-200 dark:border-white/10 overflow-hidden relative\"\r\n style={{ backgroundColor: value }}\r\n >\r\n <input\r\n type=\"color\"\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n className=\"absolute inset-0 opacity-0 cursor-pointer w-full h-full\"\r\n />\r\n </div>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n className=\"flex-1 rounded-2xl bg-gray-50 dark:bg-white/[0.04] px-4 py-2 border border-gray-200 dark:border-white/[0.10] text-sm focus:outline-none focus:ring-2 focus:ring-purple-400/30 transition-all\"\r\n />\r\n </div>\r\n\r\n {error && (\r\n <p className=\"text-xs text-rose-400\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React, { createContext, useContext } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\ninterface RadioGroupContextValue {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nconst RadioGroupContext = createContext<RadioGroupContextValue>({});\r\n\r\nexport interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name?: string;\r\n disabled?: boolean;\r\n label?: string;\r\n}\r\n\r\nexport const RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(\r\n ({ className, value, onChange, name, disabled, label, children, ...props }, ref) => {\r\n const id = React.useId();\r\n \r\n return (\r\n <div ref={ref} className={cn(\"flex flex-col gap-2\", className)} {...props}>\r\n {label && (\r\n <Label className={cn(disabled && \"opacity-50 cursor-not-allowed\")}>\r\n {label}\r\n </Label>\r\n )}\r\n <div className=\"flex flex-col gap-2\" role=\"radiogroup\">\r\n <RadioGroupContext.Provider value={{ value, onChange, name: name || id, disabled }}>\r\n {children}\r\n </RadioGroupContext.Provider>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nRadioGroup.displayName = 'RadioGroup';\r\n\r\nexport interface RadioGroupItemProps extends React.InputHTMLAttributes<HTMLInputElement> {\r\n value: string;\r\n label?: string;\r\n}\r\n\r\nexport const RadioGroupItem = React.forwardRef<HTMLInputElement, RadioGroupItemProps>(\r\n ({ className, value, label, disabled, ...props }, ref) => {\r\n const context = useContext(RadioGroupContext);\r\n const isChecked = context.value === value;\r\n const isDisabled = context.disabled || disabled;\r\n const id = React.useId();\r\n\r\n return (\r\n <label\r\n htmlFor={id}\r\n className={cn(\r\n \"flex items-center gap-3 cursor-pointer group\",\r\n isDisabled && \"cursor-not-allowed opacity-50\",\r\n className\r\n )}\r\n >\r\n <div className=\"relative flex items-center justify-center\">\r\n <input\r\n ref={ref}\r\n id={id}\r\n type=\"radio\"\r\n name={context.name}\r\n value={value}\r\n checked={isChecked}\r\n disabled={isDisabled}\r\n onChange={(e) => {\r\n if (e.target.checked) {\r\n context.onChange?.(value);\r\n }\r\n }}\r\n className=\"peer sr-only\"\r\n {...props}\r\n />\r\n <div\r\n className={cn(\r\n \"h-5 w-5 rounded-full border border-gray-300 dark:border-white/20 bg-gray-50 dark:bg-white/[0.03] transition-all duration-200\",\r\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-gray-400 dark:peer-focus-visible:ring-white/20 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-white dark:peer-focus-visible:ring-offset-[#0A0A0A]\",\r\n \"group-hover:bg-gray-100 dark:group-hover:bg-white/[0.05]\",\r\n isChecked && \"border-gray-900 bg-gray-900 dark:border-white dark:bg-white\"\r\n )}\r\n >\r\n {isChecked && (\r\n <div className=\"absolute inset-0 flex items-center justify-center\">\r\n <div className=\"h-2 w-2 rounded-full bg-white dark:bg-black\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n {label && (\r\n <span className=\"text-sm text-gray-900 dark:text-white/90 select-none font-medium\">\r\n {label}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n }\r\n);\r\n\r\nRadioGroupItem.displayName = 'RadioGroupItem';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './Label';\r\n\r\ntype FormItemContextValue = {\r\n id: string;\r\n};\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\r\n\r\nexport const FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, ...props }, ref) => {\r\n const id = React.useId();\r\n return (\r\n <FormItemContext.Provider value={{ id }}>\r\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\r\n </FormItemContext.Provider>\r\n );\r\n }\r\n);\r\nFormItem.displayName = \"FormItem\";\r\n\r\nexport const FormLabel = React.forwardRef<React.ElementRef<typeof Label>, React.ComponentPropsWithoutRef<typeof Label>>(\r\n ({ className, ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n return (\r\n <Label\r\n ref={ref}\r\n className={cn(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", className)}\r\n htmlFor={id}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nFormLabel.displayName = \"FormLabel\";\r\n\r\nexport const FormControl = React.forwardRef<React.ElementRef<\"div\">, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n const { children, ...rest } = props;\r\n \r\n if (React.isValidElement(children)) {\r\n return React.cloneElement(children as React.ReactElement, {\r\n id,\r\n \"aria-describedby\": `${id}-description ${id}-message`,\r\n ...rest,\r\n ...(children.props as any)\r\n });\r\n }\r\n return <div ref={ref} {...props} />;\r\n }\r\n);\r\nFormControl.displayName = \"FormControl\";\r\n\r\nexport const FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({ className, ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n return (\r\n <p\r\n ref={ref}\r\n id={`${id}-description`}\r\n className={cn(\"text-xs text-white/50\", className)}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nFormDescription.displayName = \"FormDescription\";\r\n\r\nexport const FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n const { id } = React.useContext(FormItemContext);\r\n \r\n if (!children) {\r\n return null;\r\n }\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={`${id}-message`}\r\n className={cn(\"text-xs font-medium text-rose-500\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </p>\r\n );\r\n }\r\n);\r\nFormMessage.displayName = \"FormMessage\";\r\n","import React, { useState } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Upload, X, File as FileIcon } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst dropzoneVariants = cva(\r\n \"relative flex flex-col items-center justify-center rounded-2xl border-2 border-dashed transition-all duration-200 text-center\",\r\n {\r\n variants: {\r\n isDragActive: {\r\n true: \"border-blue-500 bg-blue-50 dark:bg-blue-500/10\",\r\n false: \"border-gray-200 bg-gray-50 hover:bg-gray-100 dark:border-white/10 dark:bg-white/[0.02] dark:hover:bg-white/[0.05]\",\r\n },\r\n error: {\r\n true: \"border-rose-500 bg-rose-50 dark:bg-rose-500/10\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n isDragActive: false,\r\n error: false,\r\n },\r\n }\r\n);\r\n\r\nexport interface FileDropzoneProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onDrop'> {\r\n onDrop?: (files: File[]) => void;\r\n accept?: Record<string, string[]>; // e.g. { 'image/*': ['.png', '.jpg'] }\r\n maxFiles?: number;\r\n maxSize?: number; // in bytes\r\n label?: string;\r\n description?: string;\r\n}\r\n\r\nexport const FileDropzone = React.forwardRef<HTMLDivElement, FileDropzoneProps>(\r\n ({ className, onDrop, maxFiles = 1, maxSize, label = \"Upload files\", description = \"Drag & drop or click to upload\", ...props }, ref) => {\r\n const [isDragActive, setIsDragActive] = useState(false);\r\n const [files, setFiles] = useState<File[]>([]);\r\n const [error, setError] = useState<string | null>(null);\r\n const inputRef = React.useRef<HTMLInputElement>(null);\r\n\r\n const handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setIsDragActive(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setIsDragActive(false);\r\n };\r\n\r\n const validateFiles = (fileList: File[]) => {\r\n if (maxFiles && fileList.length > maxFiles) {\r\n setError(`Max ${maxFiles} files allowed`);\r\n return false;\r\n }\r\n if (maxSize) {\r\n const oversized = fileList.some(f => f.size > maxSize);\r\n if (oversized) {\r\n setError(`File too large (max ${maxSize / 1024 / 1024}MB)`);\r\n return false;\r\n }\r\n }\r\n setError(null);\r\n return true;\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n setIsDragActive(false);\r\n \r\n const droppedFiles = Array.from(e.dataTransfer.files);\r\n if (validateFiles(droppedFiles)) {\r\n setFiles(droppedFiles);\r\n onDrop?.(droppedFiles);\r\n }\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files) {\r\n const selectedFiles = Array.from(e.target.files);\r\n if (validateFiles(selectedFiles)) {\r\n setFiles(selectedFiles);\r\n onDrop?.(selectedFiles);\r\n }\r\n }\r\n };\r\n\r\n const removeFile = (index: number, e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n const newFiles = files.filter((_, i) => i !== index);\r\n setFiles(newFiles);\r\n onDrop?.(newFiles);\r\n };\r\n\r\n return (\r\n <div className=\"w-full space-y-4\">\r\n <div\r\n ref={ref}\r\n className={cn(dropzoneVariants({ isDragActive, error: !!error, className }), \"p-8 cursor-pointer\")}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n onClick={() => inputRef.current?.click()}\r\n {...props}\r\n >\r\n <input \r\n ref={inputRef}\r\n type=\"file\" \r\n className=\"hidden\" \r\n multiple={maxFiles > 1} \r\n onChange={handleChange} \r\n />\r\n \r\n <div className=\"mb-4 rounded-full bg-gray-100 p-3 dark:bg-white/[0.06]\">\r\n <Upload className=\"h-6 w-6 text-gray-500 dark:text-white/70\" />\r\n </div>\r\n <div className=\"text-sm font-medium text-gray-900 dark:text-white\">\r\n {label}\r\n </div>\r\n <div className=\"mt-1 text-xs text-gray-500 dark:text-white/50\">\r\n {description}\r\n </div>\r\n {error && (\r\n <div className=\"mt-2 text-xs font-medium text-rose-500\">\r\n {error}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {files.length > 0 && (\r\n <div className=\"grid gap-2\">\r\n {files.map((file, i) => (\r\n <div key={i} className=\"flex items-center justify-between rounded-xl border border-gray-200 bg-white p-3 dark:border-white/10 dark:bg-white/[0.03]\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-gray-100 dark:bg-white/[0.06]\">\r\n <FileIcon className=\"h-4 w-4 text-gray-500 dark:text-white/70\" />\r\n </div>\r\n <div className=\"flex flex-col\">\r\n <span className=\"text-sm font-medium text-gray-900 dark:text-white truncate max-w-[200px]\">{file.name}</span>\r\n <span className=\"text-xs text-gray-500 dark:text-white/50\">{(file.size / 1024).toFixed(1)} KB</span>\r\n </div>\r\n </div>\r\n <button \r\n onClick={(e) => removeFile(i, e)}\r\n className=\"rounded-full p-1 hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-500 dark:text-white/50\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\nFileDropzone.displayName = 'FileDropzone';\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst otpInputVariants = cva(\r\n \"flex items-center gap-2\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"[&>input]:h-8 [&>input]:w-8 [&>input]:text-sm\",\r\n md: \"[&>input]:h-10 [&>input]:w-10 [&>input]:text-base\",\r\n lg: \"[&>input]:h-12 [&>input]:w-12 [&>input]:text-lg\",\r\n }\r\n },\r\n defaultVariants: {\r\n size: \"md\"\r\n }\r\n }\r\n);\r\n\r\nexport interface OTPInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>, VariantProps<typeof otpInputVariants> {\r\n length?: number;\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n onComplete?: (value: string) => void;\r\n disabled?: boolean;\r\n error?: boolean;\r\n}\r\n\r\nexport const OTPInput = React.forwardRef<HTMLDivElement, OTPInputProps>(\r\n ({ className, size, length = 6, value = \"\", onChange, onComplete, disabled, error, ...props }, ref) => {\r\n const [localValue, setLocalValue] = useState<string[]>(new Array(length).fill(\"\"));\r\n const inputsRef = useRef<(HTMLInputElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n const val = value.split(\"\").slice(0, length);\r\n const newVal = [...val, ...new Array(length - val.length).fill(\"\")];\r\n setLocalValue(newVal);\r\n }, [value, length]);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>, index: number) => {\r\n const val = e.target.value;\r\n if (isNaN(Number(val))) return;\r\n\r\n const newLocalValue = [...localValue];\r\n // Take the last character if multiple (paste scenario handled separately usually, but simple here)\r\n newLocalValue[index] = val.substring(val.length - 1);\r\n \r\n setLocalValue(newLocalValue);\r\n const stringValue = newLocalValue.join(\"\");\r\n onChange?.(stringValue);\r\n\r\n if (val && index < length - 1) {\r\n inputsRef.current[index + 1]?.focus();\r\n }\r\n\r\n if (stringValue.length === length) {\r\n onComplete?.(stringValue);\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>, index: number) => {\r\n if (e.key === \"Backspace\" && !localValue[index] && index > 0) {\r\n inputsRef.current[index - 1]?.focus();\r\n }\r\n };\r\n\r\n const handlePaste = (e: React.ClipboardEvent) => {\r\n e.preventDefault();\r\n const pastedData = e.clipboardData.getData(\"text/plain\").slice(0, length);\r\n if (!/^\\d+$/.test(pastedData)) return;\r\n\r\n const newLocalValue = [...localValue];\r\n pastedData.split(\"\").forEach((char, i) => {\r\n newLocalValue[i] = char;\r\n });\r\n setLocalValue(newLocalValue);\r\n const stringValue = newLocalValue.join(\"\");\r\n onChange?.(stringValue);\r\n if (stringValue.length === length) onComplete?.(stringValue);\r\n inputsRef.current[Math.min(pastedData.length, length - 1)]?.focus();\r\n };\r\n\r\n return (\r\n <div ref={ref} className={cn(otpInputVariants({ size, className }))} {...props}>\r\n {localValue.map((digit, index) => (\r\n <input\r\n key={index}\r\n ref={el => inputsRef.current[index] = el}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n maxLength={1}\r\n value={digit}\r\n disabled={disabled}\r\n onChange={(e) => handleChange(e, index)}\r\n onKeyDown={(e) => handleKeyDown(e, index)}\r\n onPaste={handlePaste}\r\n className={cn(\r\n \"rounded-2xl border bg-gray-50 text-center font-semibold transition-all duration-200\",\r\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 focus:outline-none\",\r\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\r\n \"dark:bg-white/[0.03] dark:text-white\",\r\n error \r\n ? \"border-rose-500 text-rose-500 focus:border-rose-500 focus:ring-rose-500/20\" \r\n : \"border-gray-200 dark:border-white/10\"\r\n )}\r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n);\r\nOTPInput.displayName = \"OTPInput\";\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Minus, Plus } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Button } from '../button/Button';\r\n\r\nconst numberInputVariants = cva(\r\n \"flex items-center rounded-2xl border bg-gray-50 dark:bg-white/[0.03] dark:border-white/10\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"h-8\",\r\n md: \"h-10\",\r\n lg: \"h-12\",\r\n },\r\n error: {\r\n true: \"border-rose-500\",\r\n false: \"border-gray-200\",\r\n }\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n error: false\r\n }\r\n }\r\n);\r\n\r\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'>, VariantProps<typeof numberInputVariants> {\r\n value?: number;\r\n onChange?: (value: number) => void;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n}\r\n\r\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\r\n ({ className, size, error, value = 0, onChange, min = -Infinity, max = Infinity, step = 1, disabled, ...props }, ref) => {\r\n \r\n const handleDecrement = () => {\r\n if (value - step >= min) {\r\n onChange?.(value - step);\r\n }\r\n };\r\n\r\n const handleIncrement = () => {\r\n if (value + step <= max) {\r\n onChange?.(value + step);\r\n }\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const val = parseFloat(e.target.value);\r\n if (!isNaN(val)) {\r\n onChange?.(val);\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(numberInputVariants({ size, error, className }))}>\r\n <button\r\n type=\"button\"\r\n onClick={handleDecrement}\r\n disabled={disabled || value <= min}\r\n className=\"flex h-full items-center justify-center px-3 text-gray-500 hover:text-gray-900 disabled:opacity-50 dark:text-white/50 dark:hover:text-white\"\r\n >\r\n <Minus className=\"h-3.5 w-3.5\" />\r\n </button>\r\n \r\n <div className=\"h-full w-px bg-gray-200 dark:bg-white/[0.06]\" />\r\n \r\n <input\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n className=\"h-full w-full min-w-[3rem] bg-transparent text-center text-sm font-medium text-gray-900 focus:outline-none dark:text-white\"\r\n {...props}\r\n />\r\n \r\n <div className=\"h-full w-px bg-gray-200 dark:bg-white/[0.06]\" />\r\n \r\n <button\r\n type=\"button\"\r\n onClick={handleIncrement}\r\n disabled={disabled || value >= max}\r\n className=\"flex h-full items-center justify-center px-3 text-gray-500 hover:text-gray-900 disabled:opacity-50 dark:text-white/50 dark:hover:text-white\"\r\n >\r\n <Plus className=\"h-3.5 w-3.5\" />\r\n </button>\r\n </div>\r\n );\r\n }\r\n);\r\nNumberInput.displayName = \"NumberInput\";\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst toggleGroupVariants = cva(\r\n \"inline-flex items-center rounded-2xl border border-gray-200 bg-gray-50 p-1 dark:border-white/10 dark:bg-white/[0.03]\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"h-8\",\r\n md: \"h-10\",\r\n lg: \"h-12\",\r\n },\r\n fullWidth: {\r\n true: \"w-full flex\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n fullWidth: false\r\n }\r\n }\r\n);\r\n\r\nconst toggleItemVariants = cva(\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-2xl px-3 py-1.5 text-sm font-medium ring-offset-white transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-gray-950 dark:focus-visible:ring-gray-300\",\r\n {\r\n variants: {\r\n selected: {\r\n true: \"bg-white text-gray-950 shadow-sm dark:bg-gray-800 dark:text-gray-50\",\r\n false: \"text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-50\",\r\n },\r\n fullWidth: {\r\n true: \"flex-1\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n selected: false,\r\n fullWidth: false\r\n }\r\n }\r\n);\r\n\r\nexport interface ToggleGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>, VariantProps<typeof toggleGroupVariants> {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n options: { label: string; value: string; icon?: React.ReactNode }[];\r\n}\r\n\r\nexport const ToggleGroup = React.forwardRef<HTMLDivElement, ToggleGroupProps>(\r\n ({ className, size, fullWidth, value, onChange, options, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(toggleGroupVariants({ size, fullWidth, className }))} {...props}>\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => onChange?.(option.value)}\r\n className={cn(toggleItemVariants({ selected: value === option.value, fullWidth }))}\r\n >\r\n {option.icon && <span className=\"mr-2\">{option.icon}</span>}\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n );\r\n }\r\n);\r\nToggleGroup.displayName = \"ToggleGroup\";\r\n","import React, { useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type ToastVariant = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading';\r\n\r\nexport interface ToastProps {\r\n id: string;\r\n title?: string;\r\n description?: React.ReactNode;\r\n variant?: ToastVariant;\r\n duration?: number;\r\n onDismiss: (id: string) => void;\r\n}\r\n\r\nconst Icons = {\r\n loading: (\r\n <svg className=\"animate-spin text-blue-500\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\r\n </svg>\r\n ),\r\n success: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-emerald-400\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\r\n <polyline points=\"22 4 12 14.01 9 11.01\" />\r\n </svg>\r\n ),\r\n error: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-rose-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n ),\r\n warning: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-amber-400\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\r\n </svg>\r\n ),\r\n info: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-blue-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\r\n </svg>\r\n ),\r\n};\r\n\r\nexport const Toast = ({\r\n id,\r\n title,\r\n description,\r\n variant = 'default',\r\n duration = 5000,\r\n onDismiss,\r\n}: ToastProps) => {\r\n useEffect(() => {\r\n if (duration === Infinity) return;\r\n\r\n const timer = setTimeout(() => {\r\n onDismiss(id);\r\n }, duration);\r\n\r\n return () => clearTimeout(timer);\r\n }, [duration, id, onDismiss]);\r\n\r\n return (\r\n <div\r\n role=\"alert\"\r\n className={cn(\r\n \"pointer-events-auto relative flex w-full max-w-sm items-start gap-4 overflow-hidden rounded-2xl border p-4 shadow-lg transition-all\",\r\n \"animate-in slide-in-from-right-full fade-in duration-300\",\r\n \"bg-white dark:bg-[#0A0A0A]/90 backdrop-blur-md border-gray-200 dark:border-white/10\",\r\n variant === 'error' && \"border-rose-200 dark:border-rose-500/30 bg-rose-50 dark:bg-rose-500/10\",\r\n variant === 'success' && \"border-emerald-200 dark:border-emerald-500/20 bg-emerald-50 dark:bg-emerald-950/10\",\r\n variant === 'warning' && \"border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-950/10\",\r\n variant === 'info' && \"border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-950/10\",\r\n variant === 'loading' && \"border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-950/10\"\r\n )}\r\n >\r\n {variant !== 'default' && Icons[variant] && (\r\n <div className=\"shrink-0 pt-0.5\">\r\n {Icons[variant]}\r\n </div>\r\n )}\r\n \r\n <div className=\"flex-1 gap-1\">\r\n {title && <div className=\"text-sm font-semibold text-gray-900 dark:text-white\">{title}</div>}\r\n {description && <div className=\"text-sm text-gray-600 dark:text-white/80\">{description}</div>}\r\n </div>\r\n\r\n <button\r\n onClick={() => onDismiss(id)}\r\n className=\"shrink-0 rounded-md p-1 text-gray-400 dark:text-white/50 opacity-0 transition-opacity hover:text-gray-900 dark:hover:text-white group-hover:opacity-100 focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-400 dark:focus:ring-white/20\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n );\r\n};\r\n","import React, { createContext, useState, useCallback, useContext } from 'react';\r\nimport type { ToastProps} from './Toast';\r\nimport { Toast, ToastVariant } from './Toast';\r\n\r\nexport type ToastOptions = Omit<ToastProps, 'id' | 'onDismiss'>;\r\n\r\nexport interface ToastContextType {\r\n toast: (options: ToastOptions) => string;\r\n dismiss: (id: string) => void;\r\n promise: <T>(\r\n promise: Promise<T>,\r\n options: {\r\n loading: string | ToastOptions;\r\n success: string | ((data: T) => ToastOptions);\r\n error: string | ((error: any) => ToastOptions);\r\n }\r\n ) => Promise<T>;\r\n}\r\n\r\nexport const ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\r\n const [toasts, setToasts] = useState<ToastProps[]>([]);\r\n\r\n const dismiss = useCallback((id: string) => {\r\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\r\n }, []);\r\n\r\n const toast = useCallback((options: ToastOptions) => {\r\n const id = Math.random().toString(36).substring(2, 9);\r\n setToasts((prev) => [...prev, { ...options, id, onDismiss: dismiss }]);\r\n return id;\r\n }, [dismiss]);\r\n\r\n const updateToast = useCallback((id: string, options: Partial<ToastOptions>) => {\r\n setToasts((prev) =>\r\n prev.map((t) => (t.id === id ? { ...t, ...options } : t))\r\n );\r\n }, []);\r\n\r\n const promise = useCallback(\r\n async <T,>(\r\n promise: Promise<T>,\r\n options: {\r\n loading: string | ToastOptions;\r\n success: string | ((data: T) => ToastOptions);\r\n error: string | ((error: any) => ToastOptions);\r\n }\r\n ) => {\r\n const loadingOptions = typeof options.loading === 'string' \r\n ? { title: options.loading, variant: 'loading' as const } \r\n : { variant: 'loading' as const, ...options.loading };\r\n \r\n const id = toast({ ...loadingOptions, duration: Infinity });\r\n\r\n try {\r\n const data = await promise;\r\n const successOptions = typeof options.success === 'function'\r\n ? options.success(data)\r\n : typeof options.success === 'string'\r\n ? { title: options.success, variant: 'success' as const }\r\n : options.success;\r\n\r\n updateToast(id, { ...successOptions, duration: 5000 });\r\n return data;\r\n } catch (err) {\r\n const errorOptions = typeof options.error === 'function'\r\n ? options.error(err)\r\n : typeof options.error === 'string'\r\n ? { title: options.error, variant: 'error' as const }\r\n : options.error;\r\n\r\n updateToast(id, { ...errorOptions, duration: 5000 });\r\n throw err;\r\n }\r\n },\r\n [toast, updateToast]\r\n );\r\n\r\n return (\r\n <ToastContext.Provider value={{ toast, dismiss, promise }}>\r\n {children}\r\n <div className=\"fixed bottom-0 right-0 z-[150] flex max-h-screen w-full flex-col-reverse gap-2 p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\">\r\n {toasts.map((toast) => (\r\n <Toast key={toast.id} {...toast} />\r\n ))}\r\n </div>\r\n </ToastContext.Provider>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type AlertVariant = 'default' | 'success' | 'error' | 'warning' | 'info';\r\n\r\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\r\n variant?: AlertVariant;\r\n icon?: React.ReactNode;\r\n title?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nconst Icons = {\r\n success: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-emerald-400\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\r\n <polyline points=\"22 4 12 14.01 9 11.01\" />\r\n </svg>\r\n ),\r\n error: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-rose-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n ),\r\n warning: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-amber-400\">\r\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\r\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\r\n </svg>\r\n ),\r\n info: (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-blue-400\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\r\n </svg>\r\n ),\r\n};\r\n\r\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\r\n ({ className, variant = 'default', icon, title, children, ...props }, ref) => {\r\n const Icon = icon || (variant !== 'default' ? Icons[variant] : null);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"alert\"\r\n className={cn(\r\n \"relative w-full rounded-2xl border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-gray-900 dark:[&>svg]:text-white\",\r\n \"bg-white dark:bg-[#0A0A0A]/50 backdrop-blur-md border-gray-200 dark:border-white/10 text-gray-900 dark:text-white\",\r\n variant === 'error' && \"border-rose-200 dark:border-rose-500/20 bg-rose-50 dark:bg-rose-950/10 text-rose-900 dark:text-rose-50 [&>svg]:text-rose-600 dark:[&>svg]:text-rose-400\",\r\n variant === 'success' && \"border-emerald-200 dark:border-emerald-500/20 bg-emerald-50 dark:bg-emerald-950/10 text-emerald-900 dark:text-emerald-50 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-400\",\r\n variant === 'warning' && \"border-amber-200 dark:border-amber-500/20 bg-amber-50 dark:bg-amber-950/10 text-amber-900 dark:text-amber-50 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-400\",\r\n variant === 'info' && \"border-blue-200 dark:border-blue-500/20 bg-blue-50 dark:bg-blue-950/10 text-blue-900 dark:text-blue-50 [&>svg]:text-blue-600 dark:[&>svg]:text-blue-400\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {Icon}\r\n <div className=\"flex flex-col gap-1\">\r\n {title && (\r\n <h5 className=\"mb-1 font-medium leading-none tracking-tight\">\r\n {title}\r\n </h5>\r\n )}\r\n {children && (\r\n <div className=\"text-sm opacity-90 [&_p]:leading-relaxed\">\r\n {children}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAlert.displayName = 'Alert';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'danger' | 'gradient';\r\nexport type ProgressSize = 'sm' | 'md' | 'lg';\r\n\r\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value?: number;\r\n max?: number;\r\n variant?: ProgressVariant;\r\n size?: ProgressSize;\r\n isIndeterminate?: boolean;\r\n hasStripe?: boolean;\r\n indicatorClassName?: string;\r\n}\r\n\r\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\r\n ({ \r\n className, \r\n value = 0, \r\n max = 100, \r\n variant = 'default',\r\n size = 'md',\r\n isIndeterminate = false,\r\n hasStripe = false,\r\n indicatorClassName, \r\n ...props \r\n }, ref) => {\r\n const percentage = isIndeterminate ? 0 : Math.min(Math.max((value || 0) / max, 0), 1) * 100;\r\n\r\n const variants = {\r\n default: 'bg-gray-900 dark:bg-white dark:shadow-[0_0_10px_rgba(255,255,255,0.5)]',\r\n success: 'bg-emerald-500 shadow-sm dark:shadow-[0_0_10px_rgba(16,185,129,0.5)]',\r\n warning: 'bg-amber-500 shadow-sm dark:shadow-[0_0_10px_rgba(245,158,11,0.5)]',\r\n danger: 'bg-rose-500 shadow-sm dark:shadow-[0_0_10px_rgba(244,63,94,0.5)]',\r\n gradient: 'bg-gradient-to-r from-blue-600 via-purple-600 to-blue-600 shadow-sm dark:shadow-[0_0_15px_rgba(99,102,241,0.5)]'\r\n };\r\n\r\n const sizes = {\r\n sm: 'h-1',\r\n md: 'h-2',\r\n lg: 'h-4'\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"progressbar\"\r\n aria-valuemin={0}\r\n aria-valuemax={max}\r\n aria-valuenow={isIndeterminate ? undefined : value}\r\n className={cn(\r\n \"relative w-full overflow-hidden rounded-full bg-gray-200 dark:bg-white/[0.03] border border-gray-200 dark:border-white/5 backdrop-blur-sm\",\r\n sizes[size],\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"h-full w-full flex-1 transition-all duration-500 ease-in-out relative overflow-hidden\",\r\n variants[variant],\r\n isIndeterminate && \"absolute inset-0 w-full origin-left animate-indeterminate-progress\",\r\n indicatorClassName\r\n )}\r\n style={{ \r\n transform: isIndeterminate ? undefined : `translateX(-${100 - percentage}%)` \r\n }}\r\n >\r\n {hasStripe && !isIndeterminate && (\r\n <div className=\"absolute inset-0 w-full h-full animate-progress-stripe\" \r\n style={{\r\n backgroundImage: 'linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)',\r\n backgroundSize: '1rem 1rem'\r\n }} \r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nProgress.displayName = \"Progress\";\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Info } from 'lucide-react';\r\n\r\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\r\n icon?: React.ReactNode;\r\n title: string;\r\n description?: string;\r\n action?: React.ReactNode;\r\n}\r\n\r\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\r\n ({ icon, title, description, action, className, ...props }, ref) => {\r\n return (\r\n <Surface\r\n ref={ref}\r\n className={cn('p-8 text-center', className)}\r\n {...props}\r\n >\r\n <div className=\"mx-auto w-full max-w-md space-y-3\">\r\n <div className=\"mx-auto grid h-12 w-12 place-items-center rounded-2xl border border-white/10 bg-white/[0.03] text-white/70\">\r\n {icon ?? <Info className=\"h-5 w-5\" />}\r\n </div>\r\n <div className=\"text-lg font-semibold text-white\">{title}</div>\r\n {description ? <div className=\"text-sm text-white/55\">{description}</div> : null}\r\n {action ? <div className=\"pt-2 flex justify-center\">{action}</div> : null}\r\n </div>\r\n </Surface>\r\n );\r\n }\r\n);\r\n\r\nEmptyState.displayName = 'EmptyState';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\r\n variant?: 'default' | 'circle' | 'text';\r\n}\r\n\r\nexport function Skeleton({ className, variant = 'default', ...props }: SkeletonProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"animate-pulse bg-gray-200 dark:bg-white/[0.03]\",\r\n variant === 'circle' && \"rounded-full\",\r\n variant === 'default' && \"rounded-2xl\",\r\n variant === 'text' && \"rounded h-4 w-full\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Star } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\r\n max?: number;\r\n value?: number;\r\n onChange?: (value: number) => void;\r\n readOnly?: boolean;\r\n size?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nexport const Rating = React.forwardRef<HTMLDivElement, RatingProps>(\r\n ({ className, max = 5, value = 0, onChange, readOnly = false, size = 'md', ...props }, ref) => {\r\n const [hoverValue, setHoverValue] = useState<number | null>(null);\r\n\r\n const sizes = {\r\n sm: \"h-4 w-4\",\r\n md: \"h-5 w-5\",\r\n lg: \"h-6 w-6\",\r\n };\r\n\r\n return (\r\n <div ref={ref} className={cn(\"flex items-center gap-1\", className)} {...props}>\r\n {Array.from({ length: max }).map((_, i) => {\r\n const index = i + 1;\r\n const isFilled = (hoverValue !== null ? hoverValue : value) >= index;\r\n \r\n return (\r\n <button\r\n key={i}\r\n type=\"button\"\r\n disabled={readOnly}\r\n onClick={() => onChange?.(index)}\r\n onMouseEnter={() => !readOnly && setHoverValue(index)}\r\n onMouseLeave={() => !readOnly && setHoverValue(null)}\r\n className={cn(\r\n \"transition-transform hover:scale-110 focus:outline-none\",\r\n readOnly && \"cursor-default hover:scale-100\"\r\n )}\r\n >\r\n <Star\r\n className={cn(\r\n sizes[size],\r\n \"transition-colors duration-200\",\r\n isFilled \r\n ? \"fill-amber-400 text-amber-400\" \r\n : \"fill-transparent text-gray-300 dark:text-white/20\"\r\n )}\r\n />\r\n </button>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n);\r\nRating.displayName = \"Rating\";\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Slot } from '../../utils/Slot';\r\nimport { cn } from '../../utils/cn';\r\nimport { useInView } from '../../hooks/useInView';\r\n\r\nconst motionVariants = cva(\r\n 'transition-all duration-700 ease-out', \r\n {\r\n variants: {\r\n preset: {\r\n 'fade': 'opacity-0 translate-y-4',\r\n 'spring': 'opacity-0 scale-95 translate-y-4',\r\n 'slide-right': 'opacity-0 -translate-x-8',\r\n 'slide-left': 'opacity-0 translate-x-8',\r\n 'blur': 'opacity-0 blur-sm scale-105',\r\n '3d-flip': 'opacity-0 rotate-x-90',\r\n },\r\n visibleState: {\r\n 'fade': 'opacity-100 translate-y-0',\r\n 'spring': 'opacity-100 scale-100 translate-y-0 animate-enter-spring',\r\n 'slide-right': 'opacity-100 translate-x-0',\r\n 'slide-left': 'opacity-100 translate-x-0',\r\n 'blur': 'opacity-100 blur-0 scale-100',\r\n '3d-flip': 'opacity-100 rotate-x-0',\r\n }\r\n },\r\n defaultVariants: {\r\n preset: 'spring',\r\n },\r\n }\r\n);\r\n\r\nexport interface MotionProps extends React.HTMLAttributes<HTMLDivElement>, Omit<VariantProps<typeof motionVariants>, 'visibleState'> {\r\n asChild?: boolean;\r\n viewport?: boolean; // If true, animates only when entering the viewport\r\n visible?: boolean; // Manual control override\r\n delay?: number; // Delay in ms\r\n once?: boolean; // If true, animates only once\r\n}\r\n\r\nexport function Motion({ \r\n className, \r\n preset = 'spring', \r\n viewport = true, \r\n visible,\r\n delay = 0,\r\n once = true,\r\n asChild = false,\r\n children, \r\n style,\r\n ...props \r\n}: MotionProps) {\r\n const { ref, isInView, hasAnimated } = useInView({ threshold: 0.1, enabled: viewport && visible === undefined });\r\n \r\n // Determine if we should show the final state\r\n const internalShow = viewport ? (once ? hasAnimated : isInView) : true;\r\n const shouldShow = visible !== undefined ? visible : internalShow;\r\n\r\n // We manually construct the class string to ensure the correct preset is applied in the visible state\r\n // This is a bit of a hack because CVA doesn't support \"conditional variants\" based on external state easily\r\n // without defining a new variant like \"state: visible\".\r\n // But here we want to map 'preset' to 'visible' styles when shouldShow is true.\r\n \r\n // Let's simplify:\r\n // If shouldShow is true, we want the styles from `visible: [preset]`.\r\n // If shouldShow is false, we want the styles from `preset: [preset]`.\r\n \r\n // However, CVA `visible` variant keys match `preset` keys.\r\n // So we can just pass `visible: shouldShow ? preset : null`? No, that would remove the base styles.\r\n \r\n // Correct approach with the current CVA definition:\r\n // The `preset` variant defines the INITIAL state (hidden).\r\n // The `visible` variant defines the FINAL state (shown).\r\n // We need to apply `preset` ALWAYS (as base), and then override with `visible` when shown?\r\n // No, `preset` has opacity-0. If we keep it, we need `visible` to have opacity-100 and override it.\r\n // Tailwind classes override based on order in CSS, but here they are utility classes.\r\n // `opacity-100` usually overrides `opacity-0` if generated later, but `cn` merges them.\r\n \r\n // Let's try to be cleaner:\r\n // We will use the `preset` prop to get the initial state classes.\r\n // And we will manually append the visible classes if `shouldShow` is true.\r\n \r\n const initialClasses = motionVariants({ preset });\r\n const visibleClasses = shouldShow ? motionVariants({ visibleState: preset as any }) : '';\r\n \r\n // If visibleClasses is applied, we want it to win over initialClasses.\r\n // `cn` (tailwind-merge) handles this conflict resolution perfectly.\r\n \r\n const Comp = asChild ? Slot : 'div';\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(\r\n initialClasses,\r\n visibleClasses,\r\n className\r\n )}\r\n style={{ \r\n transitionDelay: `${delay}ms`,\r\n willChange: 'transform, opacity',\r\n ...style \r\n }}\r\n {...props}\r\n >\r\n {children}\r\n </Comp>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { useInView } from '../../hooks/useInView';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface MotionGroupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n stagger?: number; // Delay between items in ms\r\n delay?: number; // Initial delay in ms\r\n}\r\n\r\nexport function MotionGroup({ \r\n children, \r\n stagger = 100, \r\n delay = 0, \r\n className, \r\n ...props \r\n}: MotionGroupProps) {\r\n const { ref, hasAnimated } = useInView({ threshold: 0.1 });\r\n\r\n return (\r\n <div ref={ref} className={cn('relative', className)} {...props}>\r\n {React.Children.map(children, (child, index) => {\r\n if (React.isValidElement(child)) {\r\n return React.cloneElement(child as React.ReactElement<any>, {\r\n // Force child to wait for group\r\n visible: hasAnimated,\r\n // Disable child's internal observer to save resources\r\n viewport: false,\r\n // Calculate stagger delay\r\n delay: delay + (index * stagger),\r\n });\r\n }\r\n return child;\r\n })}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { useInView } from '../../hooks/useInView';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface TextMotionProps extends React.HTMLAttributes<HTMLDivElement> {\r\n text: string;\r\n type?: 'char' | 'word';\r\n stagger?: number;\r\n delay?: number;\r\n}\r\n\r\nexport function TextMotion({ \r\n text, \r\n type = 'char', \r\n stagger = 30, \r\n delay = 0,\r\n className,\r\n ...props \r\n}: TextMotionProps) {\r\n const { ref, hasAnimated } = useInView({ threshold: 0.2 });\r\n \r\n const items = type === 'char' ? text.split('') : text.split(' ');\r\n\r\n return (\r\n <div \r\n ref={ref} \r\n className={cn('flex flex-wrap', className)} \r\n aria-label={text}\r\n {...props}\r\n >\r\n {items.map((item, i) => (\r\n <span\r\n key={i}\r\n className={cn(\r\n 'inline-block whitespace-pre transition-all duration-500 ease-out will-change-transform',\r\n hasAnimated \r\n ? 'opacity-100 translate-y-0 blur-0' \r\n : 'opacity-0 translate-y-4 blur-sm'\r\n )}\r\n style={{ \r\n transitionDelay: `${delay + (i * stagger)}ms` \r\n }}\r\n >\r\n {item}{type === 'word' && i !== items.length - 1 ? ' ' : ''}\r\n </span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ParallaxProps extends React.HTMLAttributes<HTMLDivElement> {\r\n speed?: number; // -1 to 1. Positive = moves slower (depth), Negative = moves faster.\r\n direction?: 'vertical' | 'horizontal';\r\n}\r\n\r\nexport function Parallax({ \r\n children, \r\n speed = 0.1, \r\n direction = 'vertical',\r\n className,\r\n ...props \r\n}: ParallaxProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const element = ref.current;\r\n if (!element) return;\r\n\r\n const handleScroll = () => {\r\n const rect = element.getBoundingClientRect();\r\n const windowHeight = window.innerHeight;\r\n \r\n // Optimization: Only animate if roughly in view\r\n if (rect.top > windowHeight || rect.bottom < 0) return;\r\n\r\n // Calculate distance from center of viewport\r\n // 0 = center, -val = above center, +val = below center\r\n const centerOffset = (windowHeight / 2) - (rect.top + rect.height / 2);\r\n \r\n const translate = centerOffset * speed;\r\n\r\n if (direction === 'vertical') {\r\n element.style.transform = `translate3d(0, ${translate}px, 0)`;\r\n } else {\r\n element.style.transform = `translate3d(${translate}px, 0, 0)`;\r\n }\r\n };\r\n\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n handleScroll(); // Initial calculation\r\n\r\n return () => window.removeEventListener('scroll', handleScroll);\r\n }, [speed, direction]);\r\n\r\n return (\r\n <div \r\n ref={ref} \r\n className={cn('will-change-transform', className)} \r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { useRef, useState, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface MagneticProps {\r\n children: React.ReactElement;\r\n strength?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Magnetic({ children, strength = 0.5, className }: MagneticProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const el = ref.current;\r\n if (!el) return;\r\n \r\n const { clientX, clientY } = e;\r\n const { left, top, width, height } = el.getBoundingClientRect();\r\n \r\n const centerX = left + width / 2;\r\n const centerY = top + height / 2;\r\n \r\n const distanceX = clientX - centerX;\r\n const distanceY = clientY - centerY;\r\n \r\n // Only apply if mouse is relatively close\r\n const threshold = Math.max(width, height) * 1.5;\r\n if (Math.abs(distanceX) < threshold && Math.abs(distanceY) < threshold) {\r\n el.style.setProperty('--mag-x', `${distanceX * strength}px`);\r\n el.style.setProperty('--mag-y', `${distanceY * strength}px`);\r\n } else {\r\n el.style.setProperty('--mag-x', '0px');\r\n el.style.setProperty('--mag-y', '0px');\r\n }\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n const el = ref.current;\r\n if (el) {\r\n el.style.setProperty('--mag-x', '0px');\r\n el.style.setProperty('--mag-y', '0px');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('mousemove', handleMouseMove);\r\n return () => window.removeEventListener('mousemove', handleMouseMove);\r\n }, [strength]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"inline-block transition-transform duration-300 ease-out will-change-transform\", className)}\r\n onMouseLeave={handleMouseLeave}\r\n style={{\r\n transform: `translate3d(var(--mag-x, 0px), var(--mag-y, 0px), 0)`,\r\n }}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { useInView } from '../../hooks/useInView';\r\n\r\nexport interface NumberTickerProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n value: number;\r\n duration?: number;\r\n delay?: number;\r\n decimalPlaces?: number;\r\n}\r\n\r\nexport function NumberTicker({\r\n value,\r\n duration = 2000,\r\n delay = 0,\r\n decimalPlaces = 0,\r\n className,\r\n ...props\r\n}: NumberTickerProps) {\r\n const [displayValue, setDisplayValue] = useState(0);\r\n const { ref, hasAnimated } = useInView({ threshold: 0.1 });\r\n const startTimeRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n if (!hasAnimated) return;\r\n\r\n const animate = (timestamp: number) => {\r\n if (!startTimeRef.current) startTimeRef.current = timestamp;\r\n const progress = Math.min((timestamp - startTimeRef.current - delay) / duration, 1);\r\n \r\n if (progress >= 0) {\r\n const current = progress * value;\r\n setDisplayValue(current);\r\n }\r\n\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n const timeout = setTimeout(() => {\r\n requestAnimationFrame(animate);\r\n }, delay);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [hasAnimated, value, duration, delay]);\r\n\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(\"tabular-nums tracking-tighter\", className)}\r\n {...props}\r\n >\r\n {displayValue.toFixed(decimalPlaces)}\r\n </span>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Loader2 } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface PageLoaderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n variant?: 'spinner' | 'bar' | 'dots' | 'logo' | 'glass';\r\n text?: string;\r\n fullscreen?: boolean;\r\n}\r\n\r\nexport function PageLoader({\r\n variant = 'spinner',\r\n text,\r\n fullscreen = true,\r\n className,\r\n ...props\r\n}: PageLoaderProps) {\r\n const baseStyles = fullscreen\r\n ? 'fixed inset-0 z-[200] flex items-center justify-center bg-white/80 dark:bg-black/80 backdrop-blur-sm'\r\n : 'flex items-center justify-center p-8 w-full h-full min-h-[200px]';\r\n\r\n if (variant === 'bar') {\r\n return (\r\n <div className={cn('fixed top-0 left-0 right-0 z-[200] h-1 bg-transparent', className)} {...props}>\r\n <div className=\"h-full bg-blue-500 animate-indeterminate-progress origin-left\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (variant === 'dots') {\r\n return (\r\n <div className={cn(baseStyles, className)} {...props}>\r\n <div className=\"flex space-x-2\">\r\n <div className=\"h-3 w-3 rounded-full bg-blue-500 animate-bounce [animation-delay:-0.3s]\" />\r\n <div className=\"h-3 w-3 rounded-full bg-blue-500 animate-bounce [animation-delay:-0.15s]\" />\r\n <div className=\"h-3 w-3 rounded-full bg-blue-500 animate-bounce\" />\r\n </div>\r\n {text && <span className=\"ml-4 text-sm font-medium text-gray-500 dark:text-white/70\">{text}</span>}\r\n </div>\r\n );\r\n }\r\n\r\n if (variant === 'logo') {\r\n return (\r\n <div className={cn(baseStyles, className)} {...props}>\r\n <div className=\"flex flex-col items-center gap-4\">\r\n <div className=\"relative flex h-16 w-16 items-center justify-center rounded-full bg-white dark:bg-white/[0.06] shadow-lg ring-1 ring-black/5\">\r\n <div className=\"absolute inset-0 rounded-full animate-ping bg-blue-500/20\" />\r\n <div className=\"h-8 w-8 rounded bg-blue-500\" />\r\n </div>\r\n {text && <span className=\"text-sm font-medium text-gray-500 dark:text-white/70 animate-pulse\">{text}</span>}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (variant === 'glass') {\r\n return (\r\n <div className={cn(baseStyles, 'bg-white/30 dark:bg-black/30 backdrop-blur-md', className)} {...props}>\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-white\" />\r\n {text && <span className=\"text-sm font-medium text-white tracking-wider\">{text}</span>}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Default: spinner\r\n return (\r\n <div className={cn(baseStyles, className)} {...props}>\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-blue-500\" />\r\n {text && <span className=\"text-sm font-medium text-gray-500 dark:text-white/70\">{text}</span>}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface PageTransitionProps extends React.HTMLAttributes<HTMLDivElement> {\r\n preset?: 'fade' | 'slide-up' | 'scale' | 'blur' | 'none';\r\n duration?: number;\r\n useViewTransition?: boolean;\r\n}\r\n\r\nexport function PageTransition({\r\n preset = 'fade',\r\n duration = 300,\r\n useViewTransition = false,\r\n className,\r\n children,\r\n ...props\r\n}: PageTransitionProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n if (useViewTransition && (document as any).startViewTransition) {\r\n (document as any).startViewTransition(() => {\r\n setIsVisible(true);\r\n });\r\n } else {\r\n const timer = requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n });\r\n return () => cancelAnimationFrame(timer);\r\n }\r\n }, [useViewTransition]);\r\n\r\n const presets = {\r\n fade: {\r\n initial: 'opacity-0',\r\n animate: 'opacity-100',\r\n },\r\n 'slide-up': {\r\n initial: 'opacity-0 translate-y-8',\r\n animate: 'opacity-100 translate-y-0',\r\n },\r\n scale: {\r\n initial: 'opacity-0 scale-95',\r\n animate: 'opacity-100 scale-100',\r\n },\r\n blur: {\r\n initial: 'opacity-0 blur-sm',\r\n animate: 'opacity-100 blur-0',\r\n },\r\n none: {\r\n initial: '',\r\n animate: '',\r\n }\r\n };\r\n\r\n const currentPreset = presets[preset];\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'transition-all ease-out',\r\n isVisible ? currentPreset.animate : currentPreset.initial,\r\n className\r\n )}\r\n style={{ \r\n transitionDuration: `${duration}ms`,\r\n viewTransitionName: useViewTransition ? 'page-content' : undefined\r\n } as any}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\r\n src?: string;\r\n alt?: string;\r\n fallback?: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg' | 'xl';\r\n}\r\n\r\nconst sizeClasses = {\r\n sm: 'h-8 w-8 text-xs',\r\n md: 'h-10 w-10 text-sm',\r\n lg: 'h-14 w-14 text-base',\r\n xl: 'h-20 w-20 text-xl',\r\n};\r\n\r\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\r\n ({ className, src, alt, fallback, size = 'md', ...props }, ref) => {\r\n const [imageError, setImageError] = useState(false);\r\n\r\n useEffect(() => {\r\n setImageError(false);\r\n }, [src]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"relative flex shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-white/[0.06]\",\r\n sizeClasses[size],\r\n className\r\n )}\r\n {...props}\r\n >\r\n {src && !imageError ? (\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"aspect-square h-full w-full object-cover\"\r\n onError={() => setImageError(true)}\r\n />\r\n ) : (\r\n <div className=\"flex h-full w-full items-center justify-center bg-gray-100 dark:bg-white/5 text-gray-600 dark:text-white/70 font-medium\">\r\n {fallback || (alt ? alt.charAt(0).toUpperCase() : '?')}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAvatar.displayName = 'Avatar';\r\n","import React, { createContext, useContext, useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronDown } from 'lucide-react';\r\n\r\ninterface AccordionContextValue {\r\n value: string | string[];\r\n onValueChange: (value: string) => void;\r\n type: 'single' | 'multiple';\r\n}\r\n\r\nconst AccordionContext = createContext<AccordionContextValue | undefined>(undefined);\r\n\r\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type?: 'single' | 'multiple';\r\n defaultValue?: string | string[];\r\n value?: string | string[];\r\n onValueChange?: (value: string | string[]) => void;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function Accordion({\r\n type = 'single',\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n className,\r\n children,\r\n ...props\r\n}: AccordionProps) {\r\n const [internalValue, setInternalValue] = useState<string | string[]>(\r\n defaultValue || (type === 'multiple' ? [] : '')\r\n );\r\n\r\n const currentValue = value !== undefined ? value : internalValue;\r\n\r\n const handleValueChange = (itemValue: string) => {\r\n let newValue: string | string[];\r\n\r\n if (type === 'multiple') {\r\n const arrayValue = Array.isArray(currentValue) ? currentValue : [];\r\n if (arrayValue.includes(itemValue)) {\r\n newValue = arrayValue.filter((v) => v !== itemValue);\r\n } else {\r\n newValue = [...arrayValue, itemValue];\r\n }\r\n } else {\r\n newValue = currentValue === itemValue ? '' : itemValue;\r\n }\r\n\r\n if (value === undefined) {\r\n setInternalValue(newValue);\r\n }\r\n \r\n onValueChange?.(newValue as any);\r\n };\r\n\r\n return (\r\n <AccordionContext.Provider\r\n value={{ value: currentValue, onValueChange: handleValueChange, type }}\r\n >\r\n <div className={cn(\"space-y-2\", className)} {...props}>\r\n {children}\r\n </div>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\n// Helper context for Item\r\nconst AccordionItemContext = createContext<{ value: string; isOpen: boolean }>({ value: '', isOpen: false });\r\n\r\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function AccordionItem({ className, value, children, ...props }: AccordionItemProps) {\r\n const context = useContext(AccordionContext);\r\n const isOpen = Array.isArray(context?.value)\r\n ? context?.value.includes(value)\r\n : context?.value === value;\r\n\r\n return (\r\n <AccordionItemContext.Provider value={{ value, isOpen: !!isOpen }}>\r\n <div\r\n className={cn(\r\n \"overflow-hidden rounded-2xl border border-gray-200 dark:border-white/5 bg-gray-50 dark:bg-white/[0.03] transition-all duration-200\",\r\n isOpen && \"bg-white dark:bg-white/[0.04] border-gray-300 dark:border-white/10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </AccordionItemContext.Provider>\r\n );\r\n}\r\n\r\nexport interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function AccordionTrigger({ className, children, ...props }: AccordionTriggerProps) {\r\n const context = useContext(AccordionContext);\r\n const { value, isOpen } = useContext(AccordionItemContext);\r\n \r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={() => context?.onValueChange(value)}\r\n aria-expanded={isOpen}\r\n aria-controls={`accordion-content-${value}`}\r\n id={`accordion-trigger-${value}`}\r\n className={cn(\r\n \"flex w-full items-center justify-between px-4 py-3 text-sm font-medium text-gray-900 dark:text-white transition-all hover:text-gray-700 dark:hover:text-white/90 focus:outline-none\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronDown\r\n className={cn(\r\n \"h-4 w-4 shrink-0 text-gray-400 dark:text-white/50 transition-transform duration-200\",\r\n isOpen && \"rotate-180 text-gray-900 dark:text-white\"\r\n )}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function AccordionContent({ className, children, ...props }: AccordionContentProps) {\r\n const { isOpen, value } = useContext(AccordionItemContext);\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div\r\n id={`accordion-content-${value}`}\r\n role=\"region\"\r\n aria-labelledby={`accordion-trigger-${value}`}\r\n className={cn(\r\n \"px-4 pb-3 pt-0 text-sm text-gray-600 dark:text-white/70 animate-in slide-in-from-top-1 fade-in duration-200\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ScrollArea } from './ScrollArea';\r\n\r\ninterface TableContextValue {\r\n // Add context values if needed in the future\r\n}\r\n\r\nconst TableContext = React.createContext<TableContextValue | null>(null);\r\n\r\nexport interface TableProps extends React.HTMLAttributes<HTMLTableElement> {\r\n wrapperClassName?: string;\r\n rounded?: boolean;\r\n maxHeight?: string | number;\r\n}\r\n\r\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\r\n ({ className, wrapperClassName, rounded = false, maxHeight, ...props }, ref) => (\r\n <ScrollArea \r\n className={cn(\"w-full\", rounded && \"rounded-2xl border border-white/10\", wrapperClassName)}\r\n style={{ maxHeight }}\r\n orientation={maxHeight ? \"both\" : \"horizontal\"}\r\n scrollbarSize=\"sm\"\r\n >\r\n <table\r\n ref={ref}\r\n className={cn('w-full caption-bottom text-sm text-left', className)}\r\n {...props}\r\n />\r\n </ScrollArea>\r\n )\r\n);\r\nTable.displayName = 'Table';\r\n\r\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\r\n ({ className, ...props }, ref) => (\r\n <thead ref={ref} className={cn('bg-white/[0.02] text-white/55', className)} {...props} />\r\n )\r\n);\r\nTableHeader.displayName = 'TableHeader';\r\n\r\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\r\n ({ className, ...props }, ref) => (\r\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\r\n )\r\n);\r\nTableBody.displayName = 'TableBody';\r\n\r\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\r\n hoverable?: boolean;\r\n optimized?: boolean;\r\n}\r\n\r\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\r\n ({ className, hoverable = true, optimized = false, ...props }, ref) => (\r\n <tr\r\n ref={ref}\r\n className={cn(\r\n 'border-t border-white/10 transition-colors data-[state=selected]:bg-white/[0.04]',\r\n hoverable && 'hover:bg-white/[0.02]',\r\n className\r\n )}\r\n style={optimized ? {\r\n contentVisibility: 'auto',\r\n containIntrinsicSize: '0 56px', // Estimated row height\r\n } : undefined}\r\n {...props}\r\n />\r\n )\r\n);\r\nTableRow.displayName = 'TableRow';\r\n\r\nexport const TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\r\n ({ className, ...props }, ref) => (\r\n <th\r\n ref={ref}\r\n className={cn(\r\n 'h-10 px-5 py-3 text-left align-middle font-semibold text-white/55 [&:has([role=checkbox])]:pr-0 whitespace-nowrap',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n);\r\nTableHead.displayName = 'TableHead';\r\n\r\nexport const TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\r\n ({ className, ...props }, ref) => (\r\n <td\r\n ref={ref}\r\n className={cn('p-5 align-middle [&:has([role=checkbox])]:pr-0 text-white/85 whitespace-nowrap', className)}\r\n {...props}\r\n />\r\n )\r\n);\r\nTableCell.displayName = 'TableCell';\r\n","import React, { useState, useMemo } from 'react';\r\nimport { Search, ArrowUpDown, ArrowUp, ArrowDown } from 'lucide-react';\r\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from './Table';\r\nimport { TextInput } from '../form/TextInput';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface Column<T> {\r\n key: keyof T | string;\r\n header: string;\r\n sortable?: boolean;\r\n render?: (item: T) => React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface DataTableProps<T> {\r\n data: T[];\r\n columns: Column<T>[];\r\n searchPlaceholder?: string;\r\n searchKeys?: (keyof T)[];\r\n onRowClick?: (item: T) => void;\r\n className?: string;\r\n maxHeight?: number;\r\n rounded?: boolean;\r\n}\r\n\r\nexport function DataTable<T extends Record<string, unknown>>({\r\n data,\r\n columns,\r\n searchPlaceholder = \"Search...\",\r\n searchKeys,\r\n onRowClick,\r\n className,\r\n maxHeight,\r\n rounded = true\r\n}: DataTableProps<T>) {\r\n const [search, setSearch] = useState('');\r\n const [sortConfig, setSortConfig] = useState<{ key: keyof T | string; direction: 'asc' | 'desc' | null }>({\r\n key: '',\r\n direction: null\r\n });\r\n\r\n // Optimized search and sort logic with useMemo\r\n const processedData = useMemo(() => {\r\n let filtered = [...data];\r\n\r\n // Search\r\n if (search && searchKeys) {\r\n filtered = filtered.filter(item =>\r\n searchKeys.some(key => \r\n String(item[key] ?? '').toLowerCase().includes(search.toLowerCase())\r\n )\r\n );\r\n }\r\n\r\n // Sort\r\n if (sortConfig.key && sortConfig.direction) {\r\n filtered.sort((a, b) => {\r\n const aValue = a[sortConfig.key as keyof T];\r\n const bValue = b[sortConfig.key as keyof T];\r\n \r\n if (aValue === undefined || aValue === null || bValue === undefined || bValue === null) return 0;\r\n if (aValue < bValue) return sortConfig.direction === 'asc' ? -1 : 1;\r\n if (aValue > bValue) return sortConfig.direction === 'asc' ? 1 : -1;\r\n return 0;\r\n });\r\n }\r\n\r\n return filtered;\r\n }, [data, search, searchKeys, sortConfig]);\r\n\r\n const handleSort = (key: keyof T | string) => {\r\n setSortConfig(prev => ({\r\n key,\r\n direction: prev.key === key && prev.direction === 'asc' ? 'desc' : 'asc'\r\n }));\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-4\", className)}>\r\n {searchKeys && (\r\n <div className=\"relative max-w-sm\">\r\n <TextInput\r\n placeholder={searchPlaceholder}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n leftIcon={<Search className=\"w-4 h-4 text-white/40\" />}\r\n />\r\n </div>\r\n )}\r\n\r\n <Table rounded={rounded} maxHeight={maxHeight}>\r\n <TableHeader>\r\n <TableRow>\r\n {columns.map((col) => (\r\n <TableHead \r\n key={String(col.key)} \r\n className={cn(col.sortable && \"cursor-pointer select-none hover:text-cyan-500 transition-colors\", col.className)}\r\n onClick={() => col.sortable && handleSort(col.key)}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {col.header}\r\n {col.sortable && (\r\n <span className=\"text-white/30\">\r\n {sortConfig.key === col.key ? (\r\n sortConfig.direction === 'asc' ? <ArrowUp className=\"w-3 h-3 text-cyan-500\" /> : <ArrowDown className=\"w-3 h-3 text-cyan-500\" />\r\n ) : (\r\n <ArrowUpDown className=\"w-3 h-3\" />\r\n )}\r\n </span>\r\n )}\r\n </div>\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {processedData.map((item, idx) => (\r\n <TableRow \r\n key={idx} \r\n onClick={() => onRowClick?.(item)}\r\n className={cn(onRowClick && \"cursor-pointer hover:bg-white/[0.03] transition-colors group\")}\r\n >\r\n {columns.map((col) => (\r\n <TableCell key={String(col.key)} className={col.className}>\r\n {col.render ? col.render(item) : (item[col.key as keyof T] as React.ReactNode)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))}\r\n {processedData.length === 0 && (\r\n <TableRow>\r\n <TableCell colSpan={columns.length} className=\"h-32 text-center text-white/40\">\r\n No results found for \"{search}\"\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Skeleton } from '../feedback/Skeleton';\r\n\r\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\r\n fallback?: React.ReactNode;\r\n containerClassName?: string;\r\n}\r\n\r\nexport const Image = React.forwardRef<HTMLImageElement, ImageProps>(\r\n ({ className, containerClassName, alt, src, fallback, onLoad, onError, ...props }, ref) => {\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [hasError, setHasError] = useState(false);\r\n\r\n const handleLoad = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\r\n setIsLoading(false);\r\n onLoad?.(e);\r\n };\r\n\r\n const handleError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\r\n setIsLoading(false);\r\n setHasError(true);\r\n onError?.(e);\r\n };\r\n\r\n if (hasError && fallback) {\r\n return <>{fallback}</>;\r\n }\r\n\r\n return (\r\n <div className={cn(\"relative overflow-hidden rounded-2xl bg-gray-100 dark:bg-white/[0.02] border border-gray-200 dark:border-white/10\", containerClassName)}>\r\n {isLoading && (\r\n <Skeleton className=\"absolute inset-0 h-full w-full\" />\r\n )}\r\n <img\r\n ref={ref}\r\n src={src}\r\n alt={alt}\r\n onLoad={handleLoad}\r\n onError={handleError}\r\n className={cn(\r\n \"h-full w-full object-cover transition-opacity duration-300\",\r\n isLoading ? \"opacity-0\" : \"opacity-100\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nImage.displayName = \"Image\";\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Avatar } from './Avatar';\r\nimport { Button } from '../button/Button';\r\n\r\nconst userPreviewVariants = cva(\r\n \"flex flex-col gap-4 rounded-2xl border p-4 transition-all duration-200\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-white border-gray-200 dark:bg-white/[0.03] dark:border-white/10\",\r\n glass: \"backdrop-blur-md bg-white/80 border-white/20 dark:bg-black/40 dark:border-white/10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface UserPreviewProps \r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof userPreviewVariants> {\r\n user: {\r\n name: string;\r\n email?: string;\r\n avatarSrc?: string;\r\n role?: string;\r\n bio?: string;\r\n stats?: { label: string; value: string | number }[];\r\n };\r\n onFollow?: () => void;\r\n onMessage?: () => void;\r\n}\r\n\r\nexport const UserPreview = React.forwardRef<HTMLDivElement, UserPreviewProps>(\r\n ({ className, variant, user, onFollow, onMessage, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(userPreviewVariants({ variant, className }))} {...props}>\r\n <div className=\"flex items-start justify-between\">\r\n <div className=\"flex gap-3\">\r\n <Avatar src={user.avatarSrc} alt={user.name} size=\"lg\" />\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{user.name}</h4>\r\n {user.role && (\r\n <span className=\"text-xs text-gray-500 dark:text-white/50\">{user.role}</span>\r\n )}\r\n {user.email && (\r\n <div className=\"text-xs text-gray-400 dark:text-white/40 mt-0.5\">{user.email}</div>\r\n )}\r\n </div>\r\n </div>\r\n {onFollow && (\r\n <Button size=\"sm\" variant=\"outline\" onClick={onFollow}>Follow</Button>\r\n )}\r\n </div>\r\n \r\n {user.bio && (\r\n <p className=\"text-sm text-gray-600 dark:text-gray-300 line-clamp-2\">\r\n {user.bio}\r\n </p>\r\n )}\r\n\r\n {user.stats && (\r\n <div className=\"flex gap-4 border-t border-gray-100 pt-3 dark:border-white/5\">\r\n {user.stats.map((stat, i) => (\r\n <div key={i} className=\"flex flex-col\">\r\n <span className=\"text-xs font-medium text-gray-900 dark:text-white\">{stat.value}</span>\r\n <span className=\"text-[10px] text-gray-500 dark:text-white/40\">{stat.label}</span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n \r\n {onMessage && (\r\n <Button className=\"w-full mt-2\" onClick={onMessage}>Message</Button>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\nUserPreview.displayName = 'UserPreview';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst timelineItemVariants = cva(\r\n \"relative pl-8 pb-8 last:pb-0\",\r\n {\r\n variants: {\r\n status: {\r\n default: \"[&>div:first-child]:bg-gray-200 dark:[&>div:first-child]:bg-white/20\",\r\n active: \"[&>div:first-child]:bg-blue-500\",\r\n success: \"[&>div:first-child]:bg-emerald-500\",\r\n error: \"[&>div:first-child]:bg-rose-500\",\r\n }\r\n },\r\n defaultVariants: {\r\n status: \"default\"\r\n }\r\n }\r\n);\r\n\r\nexport interface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof timelineItemVariants> {\r\n title: string;\r\n date?: string;\r\n description?: React.ReactNode;\r\n icon?: React.ReactNode;\r\n isLast?: boolean;\r\n}\r\n\r\nexport const TimelineItem = React.forwardRef<HTMLDivElement, TimelineItemProps>(\r\n ({ className, status, title, date, description, icon, isLast, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(timelineItemVariants({ status, className }))} {...props}>\r\n {/* Line */}\r\n {!isLast && (\r\n <div className=\"absolute left-[11px] top-[24px] bottom-0 w-px bg-gray-200 dark:bg-white/[0.06]\" />\r\n )}\r\n \r\n {/* Dot / Icon */}\r\n <div className={cn(\r\n \"absolute left-0 top-1.5 flex h-6 w-6 items-center justify-center rounded-full border-2 border-white dark:border-black ring-1 ring-transparent transition-colors\",\r\n status === 'active' ? \"bg-blue-500 ring-blue-500/30\" : \r\n status === 'success' ? \"bg-emerald-500 ring-emerald-500/30\" :\r\n status === 'error' ? \"bg-rose-500 ring-rose-500/30\" :\r\n \"bg-gray-200 dark:bg-white/20\"\r\n )}>\r\n {icon && <span className=\"text-white text-[10px]\">{icon}</span>}\r\n </div>\r\n\r\n <div className=\"flex flex-col gap-1\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-medium text-gray-900 dark:text-white\">{title}</span>\r\n {date && <span className=\"text-xs text-gray-500 dark:text-white/40\">{date}</span>}\r\n </div>\r\n {description && (\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n {description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\nTimelineItem.displayName = 'TimelineItem';\r\n\r\nexport const Timeline = ({ children, className }: { children: React.ReactNode, className?: string }) => {\r\n return <div className={cn(\"flex flex-col\", className)}>{children}</div>;\r\n};\r\n","import React, { useState } from 'react';\r\nimport { ChevronRight, ChevronDown, Folder, File, FolderOpen } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface TreeNode {\r\n id: string;\r\n label: string;\r\n icon?: React.ReactNode;\r\n children?: TreeNode[];\r\n}\r\n\r\nexport interface TreeProps {\r\n data: TreeNode[];\r\n className?: string;\r\n onSelect?: (node: TreeNode) => void;\r\n}\r\n\r\nconst TreeNodeItem = ({ node, depth = 0, onSelect }: { node: TreeNode; depth?: number; onSelect?: (node: TreeNode) => void }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const hasChildren = node.children && node.children.length > 0;\r\n\r\n const handleToggle = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (hasChildren) {\r\n setIsOpen(!isOpen);\r\n }\r\n onSelect?.(node);\r\n };\r\n\r\n return (\r\n <div>\r\n <div\r\n className={cn(\r\n \"flex items-center gap-2 rounded-lg px-2 py-1.5 text-sm text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-white/[0.03] cursor-pointer\",\r\n )}\r\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\r\n onClick={handleToggle}\r\n >\r\n {hasChildren ? (\r\n <span className=\"text-gray-400 dark:text-white/40\">\r\n {isOpen ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronRight className=\"h-4 w-4\" />}\r\n </span>\r\n ) : (\r\n <span className=\"w-4\" /> \r\n )}\r\n \r\n {node.icon ? (\r\n <span className=\"text-gray-500 dark:text-white/50\">{node.icon}</span>\r\n ) : (\r\n <span className=\"text-blue-500 dark:text-blue-400\">\r\n {hasChildren ? (isOpen ? <FolderOpen className=\"h-4 w-4\" /> : <Folder className=\"h-4 w-4\" />) : <File className=\"h-4 w-4\" />}\r\n </span>\r\n )}\r\n \r\n <span className=\"truncate\">{node.label}</span>\r\n </div>\r\n \r\n {isOpen && hasChildren && (\r\n <div className=\"animate-in slide-in-from-top-1 fade-in duration-200\">\r\n {node.children!.map((child) => (\r\n <TreeNodeItem key={child.id} node={child} depth={depth + 1} onSelect={onSelect} />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport const Tree = ({ data, className, onSelect }: TreeProps) => {\r\n return (\r\n <div className={cn(\"w-full select-none\", className)}>\r\n {data.map((node) => (\r\n <TreeNodeItem key={node.id} node={node} onSelect={onSelect} />\r\n ))}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { Layout, List, Calendar, Clock, Filter, SortAsc, MoreHorizontal, Plus, Undo2, Redo2 } from 'lucide-react';\r\nimport { Button } from '../../button/Button';\r\n\r\ninterface KanbanHeaderProps {\r\n title: string;\r\n view?: string;\r\n onViewChange?: (view: string) => void;\r\n onFilter?: () => void;\r\n onSort?: () => void;\r\n onAddColumn?: () => void;\r\n canUndo?: boolean;\r\n canRedo?: boolean;\r\n onUndo?: () => void;\r\n onRedo?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanHeader({ \r\n title, \r\n view = 'board', \r\n onViewChange, \r\n onFilter, \r\n onSort, \r\n onAddColumn,\r\n canUndo,\r\n canRedo,\r\n onUndo,\r\n onRedo,\r\n className \r\n}: KanbanHeaderProps) {\r\n const views = [\r\n { id: 'board', icon: Layout, label: 'Board' },\r\n { id: 'list', icon: List, label: 'List' },\r\n { id: 'calendar', icon: Calendar, label: 'Calendar' },\r\n { id: 'timeline', icon: Clock, label: 'Timeline' },\r\n ];\r\n\r\n return (\r\n <div className={cn(\"flex items-center justify-between mb-8\", className)}>\r\n <div className=\"flex items-center gap-6\">\r\n <h1 className=\"text-2xl font-bold text-white tracking-tight\">{title}</h1>\r\n \r\n <div className=\"flex items-center bg-white/5 rounded-xl p-1\">\r\n {views.map((v) => (\r\n <button\r\n key={v.id}\r\n onClick={() => onViewChange?.(v.id)}\r\n className={cn(\r\n \"flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all\",\r\n view === v.id \r\n ? \"bg-white/10 text-white shadow-lg\" \r\n : \"text-white/40 hover:text-white/60\"\r\n )}\r\n >\r\n <v.icon className=\"h-3.5 w-3.5\" />\r\n {v.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n <div className=\"flex items-center gap-1 mr-2\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n onClick={onUndo} \r\n disabled={!canUndo}\r\n className=\"h-8 w-8 text-white/40 disabled:opacity-20\"\r\n >\r\n <Undo2 className=\"h-4 w-4\" />\r\n </Button>\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n onClick={onRedo} \r\n disabled={!canRedo}\r\n className=\"h-8 w-8 text-white/40 disabled:opacity-20\"\r\n >\r\n <Redo2 className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n\r\n <Button variant=\"ghost\" size=\"sm\" onClick={onFilter} className=\"gap-2 text-white/60\">\r\n <Filter className=\"h-4 w-4\" />\r\n Filter\r\n </Button>\r\n <Button variant=\"ghost\" size=\"sm\" onClick={onSort} className=\"gap-2 text-white/60\">\r\n <SortAsc className=\"h-4 w-4\" />\r\n Sort\r\n </Button>\r\n <div className=\"w-px h-4 bg-white/10 mx-2\" />\r\n <Button size=\"sm\" onClick={onAddColumn} className=\"gap-2\">\r\n <Plus className=\"h-4 w-4\" />\r\n Add Column\r\n </Button>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"h-9 w-9 text-white/40\">\r\n <MoreHorizontal className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { AlertCircle } from 'lucide-react';\r\n\r\ninterface ColumnLimitProps {\r\n count: number;\r\n limit?: number;\r\n className?: string;\r\n}\r\n\r\nexport function ColumnLimit({ count, limit, className }: ColumnLimitProps) {\r\n if (!limit) return null;\r\n\r\n const isOverLimit = count > limit;\r\n const percentage = Math.min((count / limit) * 100, 100);\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-3\", className)}>\r\n <div className=\"flex-1 h-1 bg-white/5 rounded-full overflow-hidden\">\r\n <div \r\n className={cn(\r\n \"h-full transition-all duration-500\",\r\n isOverLimit ? \"bg-red-500\" : percentage > 80 ? \"bg-orange-500\" : \"bg-blue-500\"\r\n )}\r\n style={{ width: `${percentage}%` }}\r\n />\r\n </div>\r\n <div className={cn(\r\n \"flex items-center gap-1.5 text-[10px] font-bold px-2 py-0.5 rounded-full\",\r\n isOverLimit ? \"bg-red-500/20 text-red-400\" : \"bg-white/5 text-white/40\"\r\n )}>\r\n {isOverLimit && <AlertCircle className=\"h-3 w-3\" />}\r\n {count}/{limit}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Lock, Trash2, GripVertical, MessageSquare, Paperclip, Clock, Play, Pause } from 'lucide-react';\r\nimport { Surface } from '../../../primitives/Surface';\r\nimport { Badge } from '../../../primitives/Badge';\r\nimport { Text } from '../../typography/Text';\r\nimport { Checkbox } from '../../form/Checkbox';\r\nimport { cn } from '../../../utils/cn';\r\nimport type { KanbanTask } from './types';\r\n\r\ninterface KanbanCardProps {\r\n task: KanbanTask;\r\n isSelected?: boolean;\r\n showTimer?: boolean;\r\n onEdit?: (task: KanbanTask) => void;\r\n onDelete?: (taskId: string) => void;\r\n draggable?: boolean;\r\n activeTimerTaskId?: string | null;\r\n selectable?: boolean;\r\n cardClassName?: string;\r\n onTaskClick?: (e: React.MouseEvent, task: KanbanTask) => void;\r\n onTaskSelectionChange?: (selectedIds: string[]) => void;\r\n onTaskTimerToggle?: (taskId: string) => void;\r\n onDragStart?: (e: React.DragEvent) => void;\r\n onDragOver?: (e: React.DragEvent) => void;\r\n onDrop?: (e: React.DragEvent) => void;\r\n renderCard?: (task: KanbanTask) => React.ReactNode;\r\n}\r\n\r\nexport const KanbanCard = React.memo(({\r\n task,\r\n isSelected,\r\n showTimer,\r\n onEdit,\r\n onDelete,\r\n draggable = true,\r\n activeTimerTaskId,\r\n selectable,\r\n cardClassName,\r\n onTaskClick,\r\n onTaskSelectionChange,\r\n onTaskTimerToggle,\r\n onDragStart,\r\n onDragOver,\r\n onDrop,\r\n renderCard\r\n}: KanbanCardProps) => {\r\n if (renderCard) return <>{renderCard(task)}</>;\r\n\r\n const getPriorityColor = (priority?: string) => {\r\n switch (priority) {\r\n case 'urgent': return 'danger';\r\n case 'high': return 'warning';\r\n case 'medium': return 'info';\r\n case 'low': return 'success';\r\n default: return 'neutral';\r\n }\r\n };\r\n\r\n return (\r\n <Surface \r\n onClick={(e) => onTaskClick?.(e, task)}\r\n draggable={draggable}\r\n onDragStart={onDragStart}\r\n onDragOver={onDragOver}\r\n onDrop={onDrop}\r\n className={cn(\r\n \"p-6 border border-white/10 bg-white/[0.03] hover:bg-white/[0.06] transition-all duration-200 rounded-2xl group cursor-grab active:cursor-grabbing\",\r\n task.blockedBy && task.blockedBy.length > 0 && \"border-red-500/30 bg-red-500/[0.02]\",\r\n isSelected && \"ring-2 ring-cyan-500/50 bg-cyan-500/[0.02]\",\r\n cardClassName\r\n )}\r\n >\r\n <div className=\"flex flex-col gap-3\">\r\n <div className=\"flex items-start justify-between gap-2\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {selectable && (\r\n <Checkbox \r\n checked={isSelected}\r\n onChange={(e) => {\r\n // This should be handled by the parent now or via onTaskSelectionChange\r\n onTaskSelectionChange?.(isSelected ? [] : [task.id]);\r\n }}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"mr-1\"\r\n />\r\n )}\r\n {task.blockedBy && task.blockedBy.length > 0 && (\r\n <Lock className=\"h-3.5 w-3.5 text-red-500 flex-shrink-0\" />\r\n )}\r\n <Text className={cn(\r\n \"font-medium text-sm leading-tight group-hover:text-cyan-400 transition-colors truncate\",\r\n task.blockedBy && task.blockedBy.length > 0 && \"text-red-400/80\"\r\n )}>\r\n {task.title}\r\n </Text>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n {onDelete && (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onDelete(task.id);\r\n }}\r\n className=\"p-1 rounded-md hover:bg-red-500/20 text-white/20 hover:text-red-400 transition-colors\"\r\n >\r\n <Trash2 className=\"h-3.5 w-3.5\" />\r\n </button>\r\n )}\r\n {draggable && <GripVertical className=\"h-4 w-4 text-white/20 opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0\" />}\r\n </div>\r\n </div>\r\n\r\n {task.description && (\r\n <Text className=\"text-xs text-white/50 line-clamp-2\">\r\n {task.description}\r\n </Text>\r\n )}\r\n\r\n {task.progress !== undefined && (\r\n <div className=\"space-y-1.5\">\r\n <div className=\"flex items-center justify-between text-[10px]\">\r\n <span className=\"text-white/30 uppercase font-bold tracking-wider\">Progress</span>\r\n <span className=\"text-white/50\">{task.progress}%</span>\r\n </div>\r\n <div className=\"h-1 w-full bg-white/[0.03] rounded-full overflow-hidden\">\r\n <div \r\n className=\"h-full bg-cyan-500 transition-all duration-500\" \r\n style={{ width: `${task.progress}%` }}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-1\">\r\n {task.priority && (\r\n <Badge variant={getPriorityColor(task.priority)} className=\"text-[10px] px-1.5 py-0 uppercase font-bold\">\r\n {task.priority}\r\n </Badge>\r\n )}\r\n {task.tags?.map(tag => (\r\n <Badge key={tag} variant=\"neutral\" className=\"text-[10px] px-1.5 py-0 bg-white/[0.03] border-white/5\">\r\n {tag}\r\n </Badge>\r\n ))}\r\n </div>\r\n\r\n <div className=\"flex items-center justify-between mt-2 pt-3 border-t border-white/5\">\r\n <div className=\"flex items-center gap-3 text-[10px] text-white/30\">\r\n {task.timeSpent !== undefined && (\r\n <div className={cn(\r\n \"flex items-center gap-1 px-1.5 py-0.5 rounded-md transition-colors\",\r\n activeTimerTaskId === task.id ? \"bg-cyan-500/20 text-cyan-400\" : \"bg-white/[0.03]\"\r\n )}>\r\n {activeTimerTaskId === task.id ? (\r\n <Pause \r\n className=\"h-2.5 w-2.5 cursor-pointer hover:scale-110 transition-transform\" \r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onTaskTimerToggle?.(task.id);\r\n }}\r\n />\r\n ) : (\r\n <Play \r\n className=\"h-2.5 w-2.5 cursor-pointer hover:scale-110 transition-transform\" \r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onTaskTimerToggle?.(task.id);\r\n }}\r\n />\r\n )}\r\n <span className=\"font-mono\">\r\n {Math.floor(task.timeSpent / 3600)}h {Math.floor((task.timeSpent % 3600) / 60)}m\r\n </span>\r\n </div>\r\n )}\r\n {task.comments !== undefined && (\r\n <div className=\"flex items-center gap-1\">\r\n <MessageSquare className=\"h-3 w-3\" />\r\n {task.comments}\r\n </div>\r\n )}\r\n {task.attachments !== undefined && (\r\n <div className=\"flex items-center gap-1\">\r\n <Paperclip className=\"h-3 w-3\" />\r\n {task.attachments}\r\n </div>\r\n )}\r\n {task.dueDate && (\r\n <div className=\"flex items-center gap-1\">\r\n <Clock className=\"h-3 w-3\" />\r\n {task.dueDate}\r\n </div>\r\n )}\r\n </div>\r\n \r\n {task.assignee && (\r\n <div className=\"flex -space-x-2\">\r\n <div className=\"h-6 w-6 rounded-full border-2 border-[#0a0a0a] bg-white/[0.06] flex items-center justify-center text-[10px] font-bold overflow-hidden\">\r\n {task.assignee.avatar ? (\r\n <img src={task.assignee.avatar} alt={task.assignee.name} className=\"h-full w-full object-cover\" />\r\n ) : (\r\n task.assignee.name[0]\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </Surface>\r\n );\r\n});\r\n\r\nKanbanCard.displayName = 'KanbanCard';\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { Plus, MoreVertical, ChevronDown, ChevronRight } from 'lucide-react';\r\nimport { Button } from '../../button/Button';\r\nimport { ColumnLimit } from './components/ColumnLimit';\r\nimport { KanbanCard } from './KanbanCard';\r\nimport type { KanbanColumnDef, KanbanTask } from './types';\r\n\r\ninterface KanbanColumnProps {\r\n column: KanbanColumnDef;\r\n tasks: KanbanTask[];\r\n onAddTask?: (columnId: string) => void;\r\n onCollapse?: (columnId: string) => void;\r\n onTaskClick?: (task: KanbanTask) => void;\r\n onAction?: (action: string) => void;\r\n onDragStart?: (e: React.DragEvent, id: string, type: 'task' | 'column') => void;\r\n onDragOver?: (e: React.DragEvent, taskId?: string) => void;\r\n onDrop?: (e: React.DragEvent, taskId?: string) => void;\r\n isCollapsed?: boolean;\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanColumn({ \r\n column, \r\n tasks, \r\n onAddTask, \r\n onCollapse, \r\n onTaskClick,\r\n onAction,\r\n onDragStart,\r\n onDragOver, \r\n onDrop, \r\n isCollapsed, \r\n children,\r\n className \r\n}: KanbanColumnProps) {\r\n return (\r\n <div \r\n className={cn(\r\n \"flex flex-col h-full transition-all duration-300\",\r\n isCollapsed ? \"w-12\" : \"w-80\",\r\n className\r\n )}\r\n onDragOver={(e) => onDragOver?.(e)}\r\n onDrop={(e) => onDrop?.(e)}\r\n onDragStart={(e) => onDragStart?.(e, column.id, 'column')}\r\n draggable={!isCollapsed}\r\n >\r\n {/* Header */}\r\n <div className={cn(\r\n \"flex items-center justify-between mb-4 px-2\",\r\n isCollapsed && \"flex-col gap-4\"\r\n )}>\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n <button \r\n onClick={() => onCollapse?.(column.id)}\r\n className=\"p-1 rounded hover:bg-white/5 text-white/40\"\r\n >\r\n {isCollapsed ? <ChevronRight className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\r\n </button>\r\n \r\n {!isCollapsed && (\r\n <>\r\n <div \r\n className=\"h-2 w-2 rounded-full\" \r\n style={{ backgroundColor: column.color || '#3b82f6' }} \r\n />\r\n <h3 className=\"font-bold text-sm text-white truncate\">{column.title}</h3>\r\n <span className=\"text-[10px] font-bold px-1.5 py-0.5 rounded-md bg-white/5 text-white/40\">\r\n {tasks.length}\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n\r\n {!isCollapsed && (\r\n <div className=\"flex items-center gap-1\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-8 w-8 text-white/40 hover:text-white\"\r\n onClick={() => onAddTask?.(column.id)}\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n </Button>\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-8 w-8 text-white/40 hover:text-white\"\r\n onClick={() => onAction?.('more')}\r\n >\r\n <MoreVertical className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* WIP Limit */}\r\n {!isCollapsed && column.limit && (\r\n <div className=\"px-2 mb-4\">\r\n <ColumnLimit count={tasks.length} limit={column.limit} />\r\n </div>\r\n )}\r\n\r\n {/* Content */}\r\n <div className={cn(\r\n \"flex-1 overflow-y-auto min-h-0 px-2 space-y-3 custom-scrollbar\",\r\n isCollapsed && \"hidden\"\r\n )}>\r\n {children || tasks.map(task => (\r\n <KanbanCard \r\n key={task.id} \r\n task={task} \r\n onTaskClick={(_, t) => onTaskClick?.(t)}\r\n onDragStart={(e) => onDragStart?.(e, task.id, 'task')}\r\n onDragOver={(e) => onDragOver?.(e, task.id)}\r\n onDrop={(e) => onDrop?.(e, task.id)}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Collapsed Label */}\r\n {isCollapsed && (\r\n <div className=\"flex-1 flex items-center justify-center\">\r\n <span className=\"rotate-90 whitespace-nowrap text-[10px] font-bold uppercase tracking-widest text-white/20\">\r\n {column.title}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '../Table';\r\nimport { Badge } from '../../../primitives/Badge';\r\nimport { Avatar } from '../Avatar';\r\nimport type { KanbanTask, KanbanColumnDef } from './types';\r\n\r\ninterface KanbanListViewProps {\r\n tasks: KanbanTask[];\r\n columns: KanbanColumnDef[];\r\n onTaskClick?: (task: KanbanTask) => void;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanListView({ tasks, columns, onTaskClick, className }: KanbanListViewProps) {\r\n const getColumn = (id: string) => columns.find(c => c.id === id);\r\n\r\n return (\r\n <div className={cn(\"bg-white/[0.02] border border-white/5 rounded-2xl overflow-hidden\", className)}>\r\n <Table>\r\n <TableHeader>\r\n <TableRow className=\"hover:bg-transparent border-white/5\">\r\n <TableHead className=\"text-white/40 uppercase text-[10px] font-bold\">Task</TableHead>\r\n <TableHead className=\"text-white/40 uppercase text-[10px] font-bold\">Status</TableHead>\r\n <TableHead className=\"text-white/40 uppercase text-[10px] font-bold\">Priority</TableHead>\r\n <TableHead className=\"text-white/40 uppercase text-[10px] font-bold\">Assignee</TableHead>\r\n <TableHead className=\"text-white/40 uppercase text-[10px] font-bold\">Due Date</TableHead>\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {tasks.map((task) => {\r\n const column = getColumn(task.columnId);\r\n return (\r\n <TableRow \r\n key={task.id} \r\n className=\"border-white/5 hover:bg-white/[0.03] cursor-pointer transition-colors\"\r\n onClick={() => onTaskClick?.(task)}\r\n >\r\n <TableCell className=\"font-medium text-white\">{task.title}</TableCell>\r\n <TableCell>\r\n <div className=\"flex items-center gap-2\">\r\n <div className=\"h-2 w-2 rounded-full\" style={{ backgroundColor: column?.color || '#3b82f6' }} />\r\n <span className=\"text-xs text-white/60\">{column?.title}</span>\r\n </div>\r\n </TableCell>\r\n <TableCell>\r\n <Badge \r\n variant={task.priority === 'urgent' ? 'danger' : task.priority === 'high' ? 'warning' : 'info'}\r\n className=\"text-[10px] uppercase\"\r\n >\r\n {task.priority || 'medium'}\r\n </Badge>\r\n </TableCell>\r\n <TableCell>\r\n {task.assignee && (\r\n <div className=\"flex items-center gap-2\">\r\n <Avatar src={task.assignee.avatar} alt={task.assignee.name} size=\"sm\" />\r\n <span className=\"text-xs text-white/60\">{task.assignee.name}</span>\r\n </div>\r\n )}\r\n </TableCell>\r\n <TableCell className=\"text-xs text-white/40\">\r\n {task.dueDate ? new Date(task.dueDate).toLocaleDateString() : '-'}\r\n </TableCell>\r\n </TableRow>\r\n );\r\n })}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport type { KanbanTask } from './types';\r\n\r\ninterface KanbanTimelineViewProps {\r\n tasks: KanbanTask[];\r\n className?: string;\r\n}\r\n\r\nexport function KanbanTimelineView({ tasks, className }: KanbanTimelineViewProps) {\r\n // Simplified timeline view for now\r\n return (\r\n <div className={cn(\"p-8 bg-white/[0.02] border border-white/5 rounded-2xl flex flex-col items-center justify-center min-h-[400px]\", className)}>\r\n <div className=\"h-12 w-12 rounded-full bg-blue-500/10 flex items-center justify-center mb-4\">\r\n <div className=\"h-6 w-6 border-2 border-blue-500 border-t-transparent rounded-full animate-spin\" />\r\n </div>\r\n <h3 className=\"text-lg font-bold text-white mb-2\">Timeline View</h3>\r\n <p className=\"text-sm text-white/40 text-center max-w-xs\">\r\n The timeline view is currently being optimized for high-performance rendering of {tasks.length} tasks.\r\n </p>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { KanbanListView } from './KanbanListView';\r\nimport type { KanbanTask, KanbanColumnDef } from './types';\r\n\r\ninterface KanbanTableViewProps {\r\n tasks: KanbanTask[];\r\n columns: KanbanColumnDef[];\r\n onTaskClick?: (task: KanbanTask) => void;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanTableView({ tasks, columns, onTaskClick, className }: KanbanTableViewProps) {\r\n // Table view is essentially a more detailed list view\r\n return <KanbanListView tasks={tasks} columns={columns} onTaskClick={onTaskClick} className={className} />;\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { Surface } from '../../../primitives/Surface';\r\nimport { Text } from '../../typography/Text';\r\nimport { Button } from '../../button/Button';\r\nimport { ChevronLeft, ChevronRight, Plus } from 'lucide-react';\r\nimport type { KanbanTask } from './types';\r\n\r\nexport interface KanbanCalendarViewProps {\r\n tasks: KanbanTask[];\r\n onTaskClick?: (task: KanbanTask) => void;\r\n onAddTask?: (date: Date) => void;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanCalendarView({ \r\n tasks, \r\n onTaskClick, \r\n onAddTask,\r\n className \r\n}: KanbanCalendarViewProps) {\r\n const [currentDate, setCurrentDate] = useState(new Date());\r\n\r\n const daysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\r\n const firstDayOfMonth = (year: number, month: number) => new Date(year, month, 1).getDay();\r\n\r\n const year = currentDate.getFullYear();\r\n const month = currentDate.getMonth();\r\n const totalDays = daysInMonth(year, month);\r\n const startDay = firstDayOfMonth(year, month);\r\n\r\n const prevMonth = () => setCurrentDate(new Date(year, month - 1, 1));\r\n const nextMonth = () => setCurrentDate(new Date(year, month + 1, 1));\r\n\r\n const monthNames = [\r\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n ];\r\n\r\n const days = [];\r\n // Add empty slots for previous month\r\n for (let i = 0; i < startDay; i++) {\r\n days.push(null);\r\n }\r\n // Add days of current month\r\n for (let i = 1; i <= totalDays; i++) {\r\n days.push(new Date(year, month, i));\r\n }\r\n\r\n const getTasksForDate = (date: Date) => {\r\n return tasks.filter(task => {\r\n if (!task.dueDate) return false;\r\n const d = new Date(task.dueDate);\r\n return d.getDate() === date.getDate() && \r\n d.getMonth() === date.getMonth() && \r\n d.getFullYear() === date.getFullYear();\r\n });\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex flex-col h-full\", className)}>\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <div className=\"flex items-center gap-4\">\r\n <Heading level={3} className=\"text-white\">{monthNames[month]} {year}</Heading>\r\n <div className=\"flex items-center gap-1\">\r\n <Button variant=\"ghost\" size=\"sm\" onClick={prevMonth}>\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <Button variant=\"ghost\" size=\"sm\" onClick={nextMonth}>\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setCurrentDate(new Date())}>\r\n Today\r\n </Button>\r\n </div>\r\n\r\n <div className=\"grid grid-cols-7 gap-px bg-white/5 border border-white/5 rounded-2xl overflow-hidden flex-1\">\r\n {[\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"].map(day => (\r\n <div key={day} className=\"bg-white/[0.02] p-3 text-center\">\r\n <Text size=\"xs\" className=\"text-white/40 font-medium uppercase tracking-wider\">{day}</Text>\r\n </div>\r\n ))}\r\n\r\n {days.map((date, i) => (\r\n <div \r\n key={i} \r\n className={cn(\r\n \"bg-gray-900/50 min-h-[120px] p-2 group transition-colors hover:bg-white/[0.02]\",\r\n !date && \"bg-transparent\"\r\n )}\r\n >\r\n {date && (\r\n <>\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <span className={cn(\r\n \"text-xs font-medium w-6 h-6 flex items-center justify-center rounded-full\",\r\n date.toDateString() === new Date().toDateString() \r\n ? \"bg-blue-500 text-white\" \r\n : \"text-white/40\"\r\n )}>\r\n {date.getDate()}\r\n </span>\r\n <button \r\n onClick={() => onAddTask?.(date)}\r\n className=\"opacity-0 group-hover:opacity-100 p-1 hover:bg-white/10 rounded-lg transition-all\"\r\n >\r\n <Plus className=\"h-3 w-3 text-white/40\" />\r\n </button>\r\n </div>\r\n <div className=\"space-y-1\">\r\n {getTasksForDate(date).map(task => (\r\n <div \r\n key={task.id}\r\n onClick={() => onTaskClick?.(task)}\r\n className=\"px-2 py-1 rounded-lg bg-blue-500/10 border border-blue-500/20 cursor-pointer hover:bg-blue-500/20 transition-all\"\r\n >\r\n <Text size=\"xs\" className=\"text-blue-400 truncate\">{task.title}</Text>\r\n </div>\r\n ))}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nfunction Heading({ children, level, className }: { children: React.ReactNode, level: number, className?: string }) {\r\n const Tag = `h${level}` as any;\r\n return <Tag className={cn(\"font-semibold\", className)}>{children}</Tag>;\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport type { ComboboxProps } from '../form/Combobox';\r\nimport { Combobox, ComboboxInput, ComboboxList, ComboboxItem, ComboboxEmpty } from '../form/Combobox';\r\nimport { Search } from 'lucide-react';\r\n\r\nexport interface CommandDialogProps extends ComboboxProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n}\r\n\r\nexport function Command({ children, ...props }: ComboboxProps) {\r\n return (\r\n <div className=\"flex h-full w-full flex-col overflow-hidden rounded-2xl bg-white dark:bg-black/90 text-gray-900 dark:text-white\">\r\n <Combobox usePopover={false} {...props}>\r\n {children}\r\n </Combobox>\r\n </div>\r\n );\r\n}\r\n\r\nexport function CommandDialog({ \r\n children, \r\n open, \r\n onOpenChange,\r\n ...props \r\n}: CommandDialogProps) {\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onOpenChange(false);\r\n };\r\n\r\n if (open) {\r\n document.addEventListener('keydown', handleEscape);\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n document.body.style.overflow = 'unset';\r\n };\r\n }, [open, onOpenChange]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === overlayRef.current) {\r\n onOpenChange(false);\r\n }\r\n };\r\n\r\n if (!open) return null;\r\n\r\n return createPortal(\r\n <div\r\n ref={overlayRef}\r\n onClick={handleBackdropClick}\r\n className=\"fixed inset-0 z-[100] flex items-start justify-center bg-black/60 backdrop-blur-sm animate-in fade-in duration-200 pt-[20vh]\"\r\n >\r\n <div className=\"relative w-full max-w-lg overflow-hidden rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-black/90 shadow-2xl animate-in zoom-in-95 duration-200\">\r\n <Combobox usePopover={false} {...props}>\r\n {children}\r\n </Combobox>\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function CommandInput({ className, ...props }: React.InputHTMLAttributes<HTMLInputElement>) {\r\n return (\r\n <div className=\"flex items-center border-b border-gray-200 dark:border-white/10 px-3\" cmdk-input-wrapper=\"\">\r\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\r\n <ComboboxInput \r\n className={cn(\r\n \"flex h-12 w-full rounded-md bg-transparent py-3 text-sm text-gray-900 dark:text-white outline-none placeholder:text-gray-400 dark:placeholder:text-white/50 disabled:cursor-not-allowed disabled:opacity-50 border-none focus:ring-0 px-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport function CommandList({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <ComboboxList \r\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden p-2\", className)} \r\n {...props} \r\n />\r\n );\r\n}\r\n\r\nexport function CommandEmpty(props: React.HTMLAttributes<HTMLDivElement>) {\r\n return <ComboboxEmpty className=\"py-6 text-center text-sm\" {...props} />;\r\n}\r\n\r\nexport function CommandGroup({ \r\n children, \r\n heading, \r\n className, \r\n ...props \r\n}: React.HTMLAttributes<HTMLDivElement> & { heading?: React.ReactNode }) {\r\n return (\r\n <div className={cn(\"overflow-hidden p-1 text-gray-900 dark:text-white\", className)} {...props}>\r\n {heading && (\r\n <div className=\"px-2 py-1.5 text-xs font-medium text-gray-500 dark:text-white/50\">\r\n {heading}\r\n </div>\r\n )}\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function CommandItem({ \r\n className, \r\n ...props \r\n}: React.ComponentProps<typeof ComboboxItem>) {\r\n return (\r\n <ComboboxItem \r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-2xl px-2 py-1.5 text-sm outline-none text-gray-900 dark:text-white aria-selected:bg-gray-100 dark:aria-selected:bg-white/[0.06] aria-selected:text-gray-900 dark:aria-selected:text-white data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )} \r\n {...props} \r\n />\r\n );\r\n}\r\n\r\nexport function CommandShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\r\n return (\r\n <span\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-gray-400 dark:text-white/50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Search, Filter, X, ChevronDown, Check, SortAsc, Layout, List, Calendar, Clock } from 'lucide-react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { Surface } from '../../../primitives/Surface';\r\nimport { Button } from '../../button/Button';\r\nimport { Badge } from '../../../primitives/Badge';\r\nimport { Popover, PopoverTrigger, PopoverContent } from '../../overlay/Popover';\r\nimport { Command, CommandInput, CommandList, CommandItem, CommandGroup } from '../../overlay/Command';\r\nimport type { FilterOption, SavedFilter } from './types';\r\n\r\nexport interface KanbanFilterBarProps {\r\n onSearchChange?: (query: string) => void;\r\n onFilterChange?: (filters: Record<string, string[]>) => void;\r\n onSortChange?: (sortBy: string, order: 'asc' | 'desc') => void;\r\n onViewChange?: (view: string) => void;\r\n onGroupChange?: (groupBy: string) => void;\r\n priorityOptions?: FilterOption[];\r\n tagOptions?: FilterOption[];\r\n assigneeOptions?: FilterOption[];\r\n viewOptions?: ('board' | 'list' | 'calendar' | 'timeline')[];\r\n sortOptions?: FilterOption[];\r\n groupOptions?: FilterOption[];\r\n savedFilters?: SavedFilter[];\r\n onSaveFilter?: (filter: SavedFilter) => void;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanFilterBar({\r\n onSearchChange,\r\n onFilterChange,\r\n onSortChange,\r\n onViewChange,\r\n onGroupChange,\r\n priorityOptions = [],\r\n tagOptions = [],\r\n assigneeOptions = [],\r\n viewOptions = ['board', 'list', 'calendar', 'timeline'],\r\n sortOptions = [],\r\n groupOptions = [],\r\n savedFilters = [],\r\n onSaveFilter,\r\n className\r\n}: KanbanFilterBarProps) {\r\n const [search, setSearch] = useState('');\r\n const [activeFilters, setActiveFilters] = useState<Record<string, string[]>>({});\r\n const [currentView, setCurrentView] = useState('board');\r\n\r\n const toggleFilter = (category: string, value: string) => {\r\n const current = activeFilters[category] || [];\r\n const next = current.includes(value)\r\n ? current.filter(v => v !== value)\r\n : [...current, value];\r\n \r\n const newFilters = { ...activeFilters, [category]: next };\r\n if (next.length === 0) delete newFilters[category];\r\n \r\n setActiveFilters(newFilters);\r\n onFilterChange?.(newFilters);\r\n };\r\n\r\n const clearFilters = () => {\r\n setActiveFilters({});\r\n onFilterChange?.({});\r\n setSearch('');\r\n onSearchChange?.('');\r\n };\r\n\r\n const activeCount = Object.values(activeFilters).flat().length;\r\n\r\n return (\r\n <Surface className={cn(\"p-2 flex flex-wrap items-center gap-3 bg-white/[0.02] border-white/5\", className)}>\r\n <div className=\"relative flex-1 min-w-[200px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-white/20\" />\r\n <input \r\n type=\"text\"\r\n placeholder=\"Search tasks...\"\r\n className=\"w-full pl-10 pr-4 py-2 text-sm rounded-2xl border border-white/10 bg-white/[0.03] focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all placeholder:text-white/20 text-white\"\r\n value={search}\r\n onChange={(e) => {\r\n setSearch(e.target.value);\r\n onSearchChange?.(e.target.value);\r\n }}\r\n />\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n <FilterPopover \r\n label=\"Priority\" \r\n options={priorityOptions} \r\n selected={activeFilters['priority'] || []}\r\n onSelect={(val) => toggleFilter('priority', val)}\r\n />\r\n\r\n <FilterPopover \r\n label=\"Tags\" \r\n options={tagOptions} \r\n selected={activeFilters['tags'] || []}\r\n onSelect={(val) => toggleFilter('tags', val)}\r\n />\r\n\r\n <FilterPopover \r\n label=\"Assignee\" \r\n options={assigneeOptions} \r\n selected={activeFilters['assignee'] || []}\r\n onSelect={(val) => toggleFilter('assignee', val)}\r\n />\r\n\r\n <div className=\"w-px h-4 bg-white/10 mx-1\" />\r\n\r\n <Popover>\r\n <PopoverTrigger>\r\n <Button variant=\"ghost\" size=\"sm\" className=\"h-9 gap-2 text-white/60\">\r\n <SortAsc className=\"h-4 w-4\" />\r\n Sort\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-48 p-1 bg-gray-900 border-white/10\">\r\n {sortOptions.map(opt => (\r\n <button\r\n key={opt.value}\r\n className=\"w-full flex items-center gap-2 px-3 py-2 text-xs text-white/60 hover:text-white hover:bg-white/5 rounded-lg text-left\"\r\n onClick={() => onSortChange?.(opt.value, 'asc')}\r\n >\r\n {opt.label}\r\n </button>\r\n ))}\r\n </PopoverContent>\r\n </Popover>\r\n\r\n {activeCount > 0 && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n onClick={clearFilters}\r\n className=\"h-9 px-3 text-xs text-white/40 hover:text-white gap-2\"\r\n >\r\n <X className=\"h-3.5 w-3.5\" /> Clear\r\n <Badge variant=\"neutral\" className=\"bg-white/[0.06] border-white/10 ml-1\">\r\n {activeCount}\r\n </Badge>\r\n </Button>\r\n )}\r\n </div>\r\n </Surface>\r\n );\r\n}\r\n\r\nfunction FilterPopover({ label, options, selected, onSelect }: { \r\n label: string, \r\n options: FilterOption[], \r\n selected: string[],\r\n onSelect: (val: string) => void \r\n}) {\r\n return (\r\n <Popover>\r\n <PopoverTrigger>\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n className={cn(\r\n \"h-9 gap-2 text-xs transition-all\",\r\n selected.length > 0 ? \"bg-blue-500/10 text-blue-400\" : \"text-white/60 hover:text-white\"\r\n )}\r\n >\r\n {label}\r\n {selected.length > 0 ? (\r\n <Badge variant=\"info\" className=\"h-4 min-w-[16px] px-1 bg-blue-500 text-white border-none\">\r\n {selected.length}\r\n </Badge>\r\n ) : (\r\n <ChevronDown className=\"h-3.5 w-3.5 opacity-40\" />\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-56 p-0 bg-gray-900 border-white/10 shadow-2xl\">\r\n <Command>\r\n <CommandInput placeholder={`Search ${label.toLowerCase()}...`} className=\"border-none\" />\r\n <CommandList className=\"max-h-[240px]\">\r\n <CommandGroup>\r\n {options.map((option) => (\r\n <CommandItem\r\n key={option.value}\r\n value={option.value}\r\n onClick={() => onSelect(option.value)}\r\n className=\"flex items-center justify-between py-2 px-3 cursor-pointer hover:bg-white/5\"\r\n >\r\n <span className=\"text-xs text-white/80\">{option.label}</span>\r\n {selected.includes(option.value) && (\r\n <Check className=\"h-3.5 w-3.5 text-blue-500\" />\r\n )}\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { Heading } from '../typography/Heading';\r\nimport { Text } from '../typography/Text';\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Modal({ isOpen, onClose, children, className }: ModalProps) {\r\n const dialogRef = useRef<HTMLDialogElement>(null);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n if (isOpen) {\r\n if (!dialog.open) {\r\n dialog.showModal();\r\n document.body.style.overflow = 'hidden';\r\n }\r\n } else {\r\n if (dialog.open) {\r\n dialog.close();\r\n document.body.style.overflow = 'unset';\r\n }\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n const handleCancel = (e: Event) => {\r\n e.preventDefault();\r\n onClose();\r\n };\r\n\r\n dialog.addEventListener('cancel', handleCancel);\r\n return () => dialog.removeEventListener('cancel', handleCancel);\r\n }, [onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === dialogRef.current) {\r\n onClose();\r\n }\r\n };\r\n\r\n return createPortal(\r\n <dialog\r\n ref={dialogRef}\r\n onClick={handleBackdropClick}\r\n className={cn(\r\n \"fixed inset-0 z-[100] bg-transparent p-0 backdrop:bg-black/60 backdrop:backdrop-blur-sm open:flex open:items-center open:justify-center\",\r\n \"animate-in fade-in duration-200\",\r\n className\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"relative w-full max-w-lg scale-100 gap-4 border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A]/90 p-6 shadow-2xl backdrop-blur-xl transition-all sm:rounded-2xl\",\r\n \"animate-in fade-in zoom-in-95 duration-200 slide-in-from-bottom-2\"\r\n )}\r\n >\r\n {children}\r\n <button\r\n onClick={onClose}\r\n 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-gray-400 dark:focus:ring-white/20 disabled:pointer-events-none\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-gray-900 dark:text-white\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n <span className=\"sr-only\">Close</span>\r\n </button>\r\n </div>\r\n </dialog>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function ModalHeader({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left mb-4\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function ModalFooter({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function ModalTitle({ className, children }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <Heading as=\"h2\" className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}>\r\n {children}\r\n </Heading>\r\n );\r\n}\r\n\r\nexport function ModalDescription({ className, children }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <Text variant=\"muted\" className={cn(\"text-sm\", className)}>\r\n {children}\r\n </Text>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { CheckSquare, Square } from 'lucide-react';\r\nimport type { ChecklistItem } from '../types';\r\n\r\ninterface ChecklistProps {\r\n items: ChecklistItem[];\r\n onToggle?: (id: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function Checklist({ items, onToggle, className }: ChecklistProps) {\r\n if (!items || items.length === 0) return null;\r\n\r\n const completedCount = items.filter(i => i.completed).length;\r\n const progress = (completedCount / items.length) * 100;\r\n\r\n return (\r\n <div className={cn(\"space-y-3\", className)}>\r\n <div className=\"flex items-center justify-between text-[10px] text-white/40 uppercase tracking-wider font-bold\">\r\n <span>Checklist</span>\r\n <span>{completedCount}/{items.length}</span>\r\n </div>\r\n \r\n <div className=\"h-1 w-full bg-white/5 rounded-full overflow-hidden\">\r\n <div \r\n className=\"h-full bg-blue-500 transition-all duration-500\" \r\n style={{ width: `${progress}%` }}\r\n />\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n {items.map((item) => (\r\n <div \r\n key={item.id}\r\n className=\"flex items-center gap-2 group cursor-pointer\"\r\n onClick={() => onToggle?.(item.id)}\r\n >\r\n {item.completed ? (\r\n <CheckSquare className=\"h-4 w-4 text-blue-500\" />\r\n ) : (\r\n <Square className=\"h-4 w-4 text-white/20 group-hover:text-white/40\" />\r\n )}\r\n <span className={cn(\r\n \"text-sm transition-colors\",\r\n item.completed ? \"text-white/40 line-through\" : \"text-white/80\"\r\n )}>\r\n {item.title}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { Avatar } from '../../Avatar';\r\nimport { Button } from '../../../button/Button';\r\nimport { Textarea } from '../../../form/Textarea';\r\nimport { Send } from 'lucide-react';\r\nimport type { KanbanUser } from '../types';\r\n\r\ninterface Comment {\r\n id: string;\r\n user: KanbanUser;\r\n content: string;\r\n timestamp: Date;\r\n}\r\n\r\ninterface TaskCommentsProps {\r\n comments: Comment[];\r\n onAddComment?: (content: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function TaskComments({ comments, onAddComment, className }: TaskCommentsProps) {\r\n const [newComment, setNewComment] = useState('');\r\n\r\n const handleSubmit = () => {\r\n if (!newComment.trim()) return;\r\n onAddComment?.(newComment);\r\n setNewComment('');\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-6\", className)}>\r\n <h4 className=\"text-[10px] text-white/40 uppercase tracking-wider font-bold\">Comments</h4>\r\n \r\n <div className=\"flex gap-3\">\r\n <div className=\"flex-1\">\r\n <Textarea \r\n placeholder=\"Write a comment...\"\r\n value={newComment}\r\n onChange={(e) => setNewComment(e.target.value)}\r\n className=\"min-h-[80px] bg-white/[0.03] border-white/10 text-sm\"\r\n />\r\n <div className=\"flex justify-end mt-2\">\r\n <Button \r\n size=\"sm\" \r\n onClick={handleSubmit}\r\n disabled={!newComment.trim()}\r\n className=\"gap-2\"\r\n >\r\n <Send className=\"h-3.5 w-3.5\" />\r\n Comment\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-6\">\r\n {comments.map((comment) => (\r\n <div key={comment.id} className=\"flex gap-3\">\r\n <Avatar src={comment.user.avatar} alt={comment.user.name} size=\"sm\" />\r\n <div className=\"flex-1 bg-white/[0.03] border border-white/5 rounded-2xl p-3\">\r\n <div className=\"flex items-center justify-between mb-1\">\r\n <span className=\"text-xs font-bold text-white\">{comment.user.name}</span>\r\n <span className=\"text-[10px] text-white/30\">{comment.timestamp.toLocaleString()}</span>\r\n </div>\r\n <p className=\"text-sm text-white/70 leading-relaxed\">{comment.content}</p>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { FileIcon, X, Download, Paperclip } from 'lucide-react';\r\nimport { Button } from '../../../button/Button';\r\n\r\ninterface Attachment {\r\n id: string;\r\n name: string;\r\n size: string;\r\n type: string;\r\n url: string;\r\n thumbnail?: string;\r\n}\r\n\r\ninterface TaskAttachmentsProps {\r\n attachments: Attachment[];\r\n onRemove?: (id: string) => void;\r\n onDownload?: (attachment: Attachment) => void;\r\n className?: string;\r\n}\r\n\r\nexport function TaskAttachments({ attachments, onRemove, onDownload, className }: TaskAttachmentsProps) {\r\n return (\r\n <div className={cn(\"space-y-4\", className)}>\r\n <div className=\"flex items-center justify-between\">\r\n <h4 className=\"text-[10px] text-white/40 uppercase tracking-wider font-bold\">Attachments</h4>\r\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 gap-1.5 text-white/40 hover:text-white\">\r\n <Paperclip className=\"h-3 w-3\" />\r\n Add\r\n </Button>\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n {attachments.map((file) => (\r\n <div \r\n key={file.id} \r\n className=\"group relative bg-white/[0.03] border border-white/5 rounded-xl overflow-hidden hover:border-white/20 transition-all\"\r\n >\r\n {file.thumbnail ? (\r\n <div className=\"aspect-video w-full overflow-hidden\">\r\n <img src={file.thumbnail} alt={file.name} className=\"w-full h-full object-cover\" />\r\n </div>\r\n ) : (\r\n <div className=\"aspect-video w-full flex items-center justify-center bg-white/5\">\r\n <FileIcon className=\"h-8 w-8 text-white/20\" />\r\n </div>\r\n )}\r\n \r\n <div className=\"p-2\">\r\n <p className=\"text-xs font-medium text-white truncate\">{file.name}</p>\r\n <p className=\"text-[10px] text-white/30 uppercase\">{file.size}</p>\r\n </div>\r\n\r\n <div className=\"absolute inset-0 bg-black/60 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-8 w-8 rounded-full bg-white/10 hover:bg-white/20\"\r\n onClick={() => onDownload?.(file)}\r\n >\r\n <Download className=\"h-4 w-4\" />\r\n </Button>\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-8 w-8 rounded-full bg-red-500/20 hover:bg-red-500/40 text-red-400\"\r\n onClick={() => onRemove?.(file.id)}\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { Check, Tag } from 'lucide-react';\r\nimport type { KanbanLabel } from '../types';\r\n\r\ninterface LabelPickerProps {\r\n labels: KanbanLabel[];\r\n selectedIds: string[];\r\n onToggle: (id: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function LabelPicker({ labels, selectedIds, onToggle, className }: LabelPickerProps) {\r\n return (\r\n <div className={cn(\"space-y-3\", className)}>\r\n <h4 className=\"text-[10px] text-white/40 uppercase tracking-wider font-bold flex items-center gap-2\">\r\n <Tag className=\"h-3 w-3\" />\r\n Labels\r\n </h4>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {labels.map((label) => {\r\n const isSelected = selectedIds.includes(label.id);\r\n return (\r\n <button\r\n key={label.id}\r\n onClick={() => onToggle(label.id)}\r\n className={cn(\r\n \"px-3 py-1.5 rounded-full text-xs font-medium transition-all flex items-center gap-2 border\",\r\n isSelected \r\n ? \"bg-white/10 border-white/20 text-white\" \r\n : \"bg-transparent border-white/5 text-white/40 hover:border-white/10\"\r\n )}\r\n >\r\n <div \r\n className=\"h-2 w-2 rounded-full\" \r\n style={{ backgroundColor: label.color }} \r\n />\r\n {label.name}\r\n {isSelected && <Check className=\"h-3 w-3\" />}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { Avatar } from '../../Avatar';\r\nimport { Check, Users } from 'lucide-react';\r\nimport type { KanbanUser } from '../types';\r\n\r\ninterface AssigneePickerProps {\r\n users: KanbanUser[];\r\n selectedId?: string;\r\n onSelect: (id: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function AssigneePicker({ users, selectedId, onSelect, className }: AssigneePickerProps) {\r\n return (\r\n <div className={cn(\"space-y-3\", className)}>\r\n <h4 className=\"text-[10px] text-white/40 uppercase tracking-wider font-bold flex items-center gap-2\">\r\n <Users className=\"h-3 w-3\" />\r\n Assignee\r\n </h4>\r\n <div className=\"grid grid-cols-1 gap-1\">\r\n {users.map((user) => {\r\n const isSelected = selectedId === user.id;\r\n return (\r\n <button\r\n key={user.id}\r\n onClick={() => onSelect(user.id)}\r\n className={cn(\r\n \"flex items-center gap-3 p-2 rounded-xl transition-all text-left\",\r\n isSelected \r\n ? \"bg-white/10 text-white\" \r\n : \"text-white/60 hover:bg-white/5\"\r\n )}\r\n >\r\n <Avatar src={user.avatar} alt={user.name} size=\"sm\" />\r\n <span className=\"text-sm flex-1 truncate\">{user.name}</span>\r\n {isSelected && <Check className=\"h-4 w-4 text-blue-500\" />}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { Calendar as CalendarIcon, Clock, X } from 'lucide-react';\r\nimport { Button } from '../../../button/Button';\r\n\r\ninterface DueDatePickerProps {\r\n date?: Date;\r\n onChange: (date: Date | undefined) => void;\r\n className?: string;\r\n}\r\n\r\nexport function DueDatePicker({ date, onChange, className }: DueDatePickerProps) {\r\n return (\r\n <div className={cn(\"space-y-3\", className)}>\r\n <h4 className=\"text-[10px] text-white/40 uppercase tracking-wider font-bold flex items-center gap-2\">\r\n <CalendarIcon className=\"h-3 w-3\" />\r\n Due Date\r\n </h4>\r\n \r\n {date ? (\r\n <div className=\"flex items-center gap-2 p-3 rounded-2xl bg-white/5 border border-white/10\">\r\n <div className=\"h-8 w-8 rounded-lg bg-blue-500/20 flex items-center justify-center text-blue-400\">\r\n <Clock className=\"h-4 w-4\" />\r\n </div>\r\n <div className=\"flex-1\">\r\n <p className=\"text-sm font-medium text-white\">\r\n {date.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' })}\r\n </p>\r\n <p className=\"text-[10px] text-white/40\">\r\n {date.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })}\r\n </p>\r\n </div>\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-8 w-8 text-white/20 hover:text-red-400\"\r\n onClick={() => onChange(undefined)}\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n ) : (\r\n <Button \r\n variant=\"ghost\" \r\n className=\"w-full justify-start gap-3 h-12 rounded-2xl border border-dashed border-white/10 text-white/40 hover:border-white/20 hover:bg-white/5\"\r\n onClick={() => onChange(new Date())}\r\n >\r\n <CalendarIcon className=\"h-4 w-4\" />\r\n Set due date\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { Play, Pause, RotateCcw, Timer } from 'lucide-react';\r\nimport { Button } from '../../../button/Button';\r\n\r\ninterface TimeTrackerProps {\r\n initialSeconds?: number;\r\n onTimeUpdate?: (seconds: number) => void;\r\n className?: string;\r\n}\r\n\r\nexport function TimeTracker({ initialSeconds = 0, onTimeUpdate, className }: TimeTrackerProps) {\r\n const [seconds, setSeconds] = useState(initialSeconds);\r\n const [isActive, setIsActive] = useState(false);\r\n\r\n useEffect(() => {\r\n let interval: any = null;\r\n if (isActive) {\r\n interval = setInterval(() => {\r\n setSeconds((s) => {\r\n const next = s + 1;\r\n onTimeUpdate?.(next);\r\n return next;\r\n });\r\n }, 1000);\r\n } else {\r\n clearInterval(interval);\r\n }\r\n return () => clearInterval(interval);\r\n }, [isActive, onTimeUpdate]);\r\n\r\n const formatTime = (s: number) => {\r\n const hrs = Math.floor(s / 3600);\r\n const mins = Math.floor((s % 3600) / 60);\r\n const secs = s % 60;\r\n return `${hrs.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-3\", className)}>\r\n <h4 className=\"text-[10px] text-white/40 uppercase tracking-wider font-bold flex items-center gap-2\">\r\n <Timer className=\"h-3 w-3\" />\r\n Time Tracking\r\n </h4>\r\n \r\n <div className=\"flex items-center gap-4 p-4 rounded-2xl bg-white/[0.03] border border-white/5\">\r\n <div className=\"flex-1\">\r\n <p className=\"text-2xl font-mono font-bold text-white tracking-tight\">\r\n {formatTime(seconds)}\r\n </p>\r\n <p className=\"text-[10px] text-white/30 uppercase font-bold mt-1\">Total Time Spent</p>\r\n </div>\r\n \r\n <div className=\"flex gap-2\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-10 w-10 rounded-full bg-white/5 hover:bg-white/10\"\r\n onClick={() => setSeconds(0)}\r\n >\r\n <RotateCcw className=\"h-4 w-4\" />\r\n </Button>\r\n <Button\r\n variant={isActive ? \"secondary\" : \"primary\"}\r\n size=\"icon\"\r\n className={cn(\r\n \"h-10 w-10 rounded-full shadow-lg transition-all\",\r\n isActive ? \"bg-orange-500 hover:bg-orange-600\" : \"bg-blue-600 hover:bg-blue-700\"\r\n )}\r\n onClick={() => setIsActive(!isActive)}\r\n >\r\n {isActive ? <Pause className=\"h-4 w-4\" /> : <Play className=\"h-4 w-4 ml-0.5\" />}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Modal, ModalHeader, ModalTitle, ModalFooter } from '../../overlay/Modal';\r\nimport { Button } from '../../button/Button';\r\nimport { TextInput } from '../../form/TextInput';\r\nimport { Textarea } from '../../form/Textarea';\r\nimport { Select } from '../../form/Select';\r\nimport { Label } from '../../form/Label';\r\nimport { FileDropzone } from '../../form/FileDropzone';\r\nimport { X, Paperclip, Tag, AlertCircle, Trash2, Copy, Archive, Clock } from 'lucide-react';\r\nimport { SubtaskList } from './components/SubtaskList';\r\nimport { Checklist } from './components/Checklist';\r\nimport { TaskActivity } from './components/TaskActivity';\r\nimport { TaskComments } from './components/TaskComments';\r\nimport { TaskAttachments } from './components/TaskAttachments';\r\nimport { LabelPicker } from './components/LabelPicker';\r\nimport { AssigneePicker } from './components/AssigneePicker';\r\nimport { DueDatePicker } from './components/DueDatePicker';\r\nimport { TimeTracker } from './components/TimeTracker';\r\nimport type { KanbanTask, KanbanColumnDef, KanbanUser, KanbanLabel } from './types';\r\n\r\nexport interface KanbanTaskModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onSave: (task: Partial<KanbanTask>) => void;\r\n onDelete?: (taskId: string) => void;\r\n onDuplicate?: (task: KanbanTask) => void;\r\n onArchive?: (taskId: string) => void;\r\n task?: KanbanTask;\r\n columnId?: string;\r\n columns?: KanbanColumnDef[];\r\n users?: KanbanUser[];\r\n availableLabels?: KanbanLabel[];\r\n showSubtasks?: boolean;\r\n showChecklist?: boolean;\r\n showAttachments?: boolean;\r\n showComments?: boolean;\r\n showActivity?: boolean;\r\n}\r\n\r\nexport function KanbanTaskModal({ \r\n isOpen, \r\n onClose, \r\n onSave, \r\n onDelete,\r\n onDuplicate,\r\n onArchive,\r\n task, \r\n columnId,\r\n columns = [],\r\n users = [],\r\n availableLabels = [],\r\n showSubtasks = true,\r\n showChecklist = true,\r\n showAttachments = true,\r\n showComments = true,\r\n showActivity = true\r\n}: KanbanTaskModalProps) {\r\n const [title, setTitle] = useState('');\r\n const [description, setDescription] = useState('');\r\n const [priority, setPriority] = useState<'low' | 'medium' | 'high' | 'urgent'>('medium');\r\n const [currentColumnId, setCurrentColumnId] = useState('');\r\n const [assigneeId, setAssigneeId] = useState<string | undefined>(undefined);\r\n const [selectedLabels, setSelectedLabels] = useState<string[]>([]);\r\n const [dueDate, setDueDate] = useState<Date | undefined>(undefined);\r\n\r\n useEffect(() => {\r\n if (task) {\r\n setTitle(task.title || '');\r\n setDescription(task.description || '');\r\n setPriority(task.priority || 'medium');\r\n setCurrentColumnId(task.columnId || '');\r\n setAssigneeId(task.assignee?.id);\r\n setSelectedLabels(task.labels?.map(l => l.id) || []);\r\n setDueDate(task.dueDate ? new Date(task.dueDate) : undefined);\r\n } else {\r\n setTitle('');\r\n setDescription('');\r\n setPriority('medium');\r\n setCurrentColumnId(columnId || '');\r\n setAssigneeId(undefined);\r\n setSelectedLabels([]);\r\n setDueDate(undefined);\r\n }\r\n }, [task, isOpen, columnId]);\r\n\r\n const handleSave = () => {\r\n if (!title.trim()) return;\r\n onSave({\r\n ...task,\r\n title,\r\n description,\r\n priority,\r\n columnId: currentColumnId,\r\n assignee: users.find(u => u.id === assigneeId),\r\n labels: availableLabels.filter(l => selectedLabels.includes(l.id)),\r\n dueDate: dueDate?.toISOString()\r\n });\r\n onClose();\r\n };\r\n\r\n return (\r\n <Modal isOpen={isOpen} onClose={onClose}>\r\n <ModalHeader className=\"flex items-center justify-between pr-12\">\r\n <ModalTitle>{task ? 'Edit Task' : 'Create New Task'}</ModalTitle>\r\n <div className=\"flex items-center gap-2\">\r\n {task && (\r\n <>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8 text-white/40 hover:text-white\" onClick={() => onDuplicate?.(task)}>\r\n <Copy className=\"h-4 w-4\" />\r\n </Button>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8 text-white/40 hover:text-white\" onClick={() => onArchive?.(task.id)}>\r\n <Archive className=\"h-4 w-4\" />\r\n </Button>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8 text-white/40 hover:text-red-400\" onClick={() => onDelete?.(task.id)}>\r\n <Trash2 className=\"h-4 w-4\" />\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </ModalHeader>\r\n \r\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8 py-6\">\r\n {/* Main Content */}\r\n <div className=\"lg:col-span-2 space-y-8\">\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"task-title\" className=\"text-[10px] uppercase tracking-wider text-white/40 font-bold\">Title</Label>\r\n <TextInput \r\n id=\"task-title\"\r\n placeholder=\"What needs to be done?\" \r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n className=\"text-lg font-bold bg-transparent border-white/10 focus:border-blue-500\"\r\n autoFocus\r\n />\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"task-desc\" className=\"text-[10px] uppercase tracking-wider text-white/40 font-bold\">Description</Label>\r\n <Textarea \r\n id=\"task-desc\"\r\n placeholder=\"Add more details...\" \r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n rows={6}\r\n className=\"bg-white/[0.03] border-white/10 text-sm leading-relaxed\"\r\n />\r\n </div>\r\n\r\n {showChecklist && task?.checklist && (\r\n <Checklist items={task.checklist} />\r\n )}\r\n\r\n {showAttachments && task?.attachments && (\r\n <TaskAttachments attachments={[]} />\r\n )}\r\n\r\n {showComments && (\r\n <TaskComments comments={[]} />\r\n )}\r\n </div>\r\n\r\n {/* Sidebar */}\r\n <div className=\"space-y-8 bg-white/[0.02] p-6 rounded-3xl border border-white/5 h-fit\">\r\n <div className=\"space-y-2\">\r\n <Label className=\"text-[10px] uppercase tracking-wider text-white/40 font-bold\">Status</Label>\r\n <Select \r\n value={currentColumnId}\r\n onChange={(val) => setCurrentColumnId(val)}\r\n options={columns.map(c => ({ label: c.title, value: c.id }))}\r\n className=\"bg-white/5 border-white/10\"\r\n />\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label className=\"text-[10px] uppercase tracking-wider text-white/40 font-bold\">Priority</Label>\r\n <Select \r\n value={priority}\r\n onChange={(val) => setPriority(val as any)}\r\n options={[\r\n { label: 'Low', value: 'low' },\r\n { label: 'Medium', value: 'medium' },\r\n { label: 'High', value: 'high' },\r\n { label: 'Urgent', value: 'urgent' },\r\n ]}\r\n className=\"bg-white/5 border-white/10\"\r\n />\r\n </div>\r\n\r\n <AssigneePicker \r\n users={users} \r\n selectedId={assigneeId} \r\n onSelect={setAssigneeId} \r\n />\r\n\r\n <LabelPicker \r\n labels={availableLabels} \r\n selectedIds={selectedLabels} \r\n onToggle={(id) => setSelectedLabels(prev => prev.includes(id) ? prev.filter(i => i !== id) : [...prev, id])} \r\n />\r\n\r\n <DueDatePicker \r\n date={dueDate} \r\n onChange={setDueDate} \r\n />\r\n\r\n <TimeTracker initialSeconds={task?.timeSpent} />\r\n </div>\r\n </div>\r\n\r\n <ModalFooter className=\"border-t border-white/5 pt-6\">\r\n <Button variant=\"ghost\" onClick={onClose}>Cancel</Button>\r\n <Button onClick={handleSave} className=\"px-8\">Save Changes</Button>\r\n </ModalFooter>\r\n </Modal>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { ChevronDown, ChevronRight } from 'lucide-react';\r\n\r\ninterface KanbanSwimlaneProps {\r\n title: string;\r\n count: number;\r\n isCollapsed?: boolean;\r\n onToggle?: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanSwimlane({ \r\n title, \r\n count, \r\n isCollapsed, \r\n onToggle, \r\n children, \r\n className \r\n}: KanbanSwimlaneProps) {\r\n return (\r\n <div className={cn(\"space-y-4\", className)}>\r\n <button \r\n onClick={onToggle}\r\n className=\"flex items-center gap-3 w-full group\"\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {isCollapsed ? <ChevronRight className=\"h-4 w-4 text-white/20\" /> : <ChevronDown className=\"h-4 w-4 text-white/20\" />}\r\n <h4 className=\"text-xs font-bold uppercase tracking-widest text-white/40 group-hover:text-white/60 transition-colors\">\r\n {title}\r\n </h4>\r\n </div>\r\n <div className=\"h-px flex-1 bg-white/5\" />\r\n <span className=\"text-[10px] font-bold px-2 py-0.5 rounded-full bg-white/5 text-white/20\">\r\n {count}\r\n </span>\r\n </button>\r\n\r\n {!isCollapsed && (\r\n <div className=\"animate-in fade-in slide-in-from-top-2 duration-300\">\r\n {children}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState, useMemo, useCallback } from 'react';\r\nimport type { KanbanTask } from './types';\r\n\r\nexport function useKanbanFilters(tasks: KanbanTask[]) {\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [activeFilters, setActiveFilters] = useState<Record<string, any[]>>({});\r\n\r\n const filteredTasks = useMemo(() => {\r\n return tasks.filter(task => {\r\n // Search filter\r\n if (searchQuery) {\r\n const query = searchQuery.toLowerCase();\r\n const matchesSearch = \r\n task.title.toLowerCase().includes(query) || \r\n task.description?.toLowerCase().includes(query) ||\r\n task.tags?.some(tag => tag.toLowerCase().includes(query));\r\n \r\n if (!matchesSearch) return false;\r\n }\r\n\r\n // Category filters\r\n for (const [key, values] of Object.entries(activeFilters)) {\r\n if (!values || values.length === 0) continue;\r\n \r\n if (key === 'priority') {\r\n if (!values.includes(task.priority)) return false;\r\n }\r\n \r\n if (key === 'assignee') {\r\n if (!task.assignee || !values.includes(task.assignee.id)) return false;\r\n }\r\n\r\n if (key === 'tags') {\r\n if (!task.tags?.some(tag => values.includes(tag))) return false;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n }, [tasks, searchQuery, activeFilters]);\r\n\r\n const toggleFilter = useCallback((category: string, value: any) => {\r\n setActiveFilters(prev => {\r\n const current = prev[category] || [];\r\n const next = current.includes(value)\r\n ? current.filter(v => v !== value)\r\n : [...current, value];\r\n \r\n const newState = { ...prev, [category]: next };\r\n if (next.length === 0) delete newState[category];\r\n return newState;\r\n });\r\n }, []);\r\n\r\n const clearFilters = useCallback(() => {\r\n setActiveFilters({});\r\n setSearchQuery('');\r\n }, []);\r\n\r\n return {\r\n searchQuery,\r\n setSearchQuery,\r\n activeFilters,\r\n setActiveFilters,\r\n filteredTasks,\r\n toggleFilter,\r\n clearFilters\r\n };\r\n}\r\n","import { useState, useCallback, useEffect, useRef } from 'react';\r\nimport type { KanbanTask, KanbanColumnDef } from './types';\r\n\r\ninterface KanbanState {\r\n tasks: KanbanTask[];\r\n columns: KanbanColumnDef[];\r\n}\r\n\r\ninterface HistoryState {\r\n history: KanbanState[];\r\n currentIndex: number;\r\n}\r\n\r\nexport function useKanbanUndo(initialState: KanbanState) {\r\n const [state, setState] = useState<HistoryState>({\r\n history: [initialState],\r\n currentIndex: 0\r\n });\r\n \r\n const lastInitialState = useRef(initialState);\r\n\r\n // Sync with external state changes\r\n useEffect(() => {\r\n const tasksChanged = initialState.tasks.length !== lastInitialState.current.tasks.length ||\r\n initialState.tasks.some((t, i) => t.id !== lastInitialState.current.tasks[i]?.id || t.columnId !== lastInitialState.current.tasks[i]?.columnId);\r\n const columnsChanged = initialState.columns.length !== lastInitialState.current.columns.length ||\r\n initialState.columns.some((c, i) => c.id !== lastInitialState.current.columns[i]?.id);\r\n\r\n if (tasksChanged || columnsChanged) {\r\n // Check if the new initialState matches our current state to avoid resetting history on our own changes\r\n const currentState = state.history[state.currentIndex];\r\n const isSameAsCurrent = currentState && \r\n initialState.tasks.length === currentState.tasks.length &&\r\n initialState.tasks.every((t, i) => t.id === currentState.tasks[i]?.id && t.columnId === currentState.tasks[i]?.columnId);\r\n\r\n if (!isSameAsCurrent) {\r\n setState({\r\n history: [initialState],\r\n currentIndex: 0\r\n });\r\n }\r\n lastInitialState.current = initialState;\r\n }\r\n }, [initialState, state.history, state.currentIndex]);\r\n\r\n const pushState = useCallback((newState: KanbanState) => {\r\n setState(prev => {\r\n const nextHistory = prev.history.slice(0, prev.currentIndex + 1);\r\n return {\r\n history: [...nextHistory, newState],\r\n currentIndex: prev.currentIndex + 1\r\n };\r\n });\r\n }, []);\r\n\r\n const undo = useCallback(() => {\r\n setState(prev => {\r\n if (prev.currentIndex > 0) {\r\n return { ...prev, currentIndex: prev.currentIndex - 1 };\r\n }\r\n return prev;\r\n });\r\n }, []);\r\n\r\n const redo = useCallback(() => {\r\n setState(prev => {\r\n if (prev.currentIndex < prev.history.length - 1) {\r\n return { ...prev, currentIndex: prev.currentIndex + 1 };\r\n }\r\n return prev;\r\n });\r\n }, []);\r\n\r\n return {\r\n state: state.history[state.currentIndex],\r\n pushState,\r\n undo,\r\n redo,\r\n canUndo: state.currentIndex > 0,\r\n canRedo: state.currentIndex < state.history.length - 1\r\n };\r\n}\r\n","import { useEffect } from 'react';\r\n\r\ninterface UseKanbanKeyboardProps {\r\n onUndo?: () => void;\r\n onRedo?: () => void;\r\n onSearch?: () => void;\r\n onNewTask?: () => void;\r\n onNewColumn?: () => void;\r\n enabled?: boolean;\r\n}\r\n\r\nexport function useKanbanKeyboard({\r\n onUndo,\r\n onRedo,\r\n onSearch,\r\n onNewTask,\r\n onNewColumn,\r\n enabled = true\r\n}: UseKanbanKeyboardProps) {\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n // Undo: Ctrl+Z\r\n if ((e.ctrlKey || e.metaKey) && e.key === 'z' && !e.shiftKey) {\r\n e.preventDefault();\r\n onUndo?.();\r\n }\r\n \r\n // Redo: Ctrl+Shift+Z or Ctrl+Y\r\n if (((e.ctrlKey || e.metaKey) && e.key === 'z' && e.shiftKey) || ((e.ctrlKey || e.metaKey) && e.key === 'y')) {\r\n e.preventDefault();\r\n onRedo?.();\r\n }\r\n\r\n // Search: Ctrl+F or /\r\n if (((e.ctrlKey || e.metaKey) && e.key === 'f') || (e.key === '/' && document.activeElement === document.body)) {\r\n e.preventDefault();\r\n onSearch?.();\r\n }\r\n\r\n // New Task: N\r\n if (e.key === 'n' && document.activeElement === document.body) {\r\n e.preventDefault();\r\n onNewTask?.();\r\n }\r\n\r\n // New Column: C\r\n if (e.key === 'c' && document.activeElement === document.body) {\r\n e.preventDefault();\r\n onNewColumn?.();\r\n }\r\n };\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n return () => window.removeEventListener('keydown', handleKeyDown);\r\n }, [enabled, onUndo, onRedo, onSearch, onNewTask, onNewColumn]);\r\n}\r\n","import { useState, useCallback, useRef } from 'react';\r\nimport type { KanbanTask, KanbanColumnDef, DropPosition } from './types';\r\n\r\ninterface UseKanbanDragAndDropProps {\r\n tasks: KanbanTask[];\r\n columns: KanbanColumnDef[];\r\n selectedTaskIds: string[];\r\n onTaskMove?: (taskId: string, toColumnId: string, toTaskId?: string, position?: 'top' | 'bottom') => void;\r\n onColumnMove?: (columnId: string, toColumnId: string, position?: 'left' | 'right') => void;\r\n onTaskDrop?: (taskId: string, fromColumnId: string, toColumnId: string, index: number) => void;\r\n onTaskDragStart?: (taskId: string) => void;\r\n onTaskDragEnd?: (taskId: string) => void;\r\n}\r\n\r\nexport function useKanbanDragAndDrop({\r\n tasks,\r\n columns,\r\n selectedTaskIds,\r\n onTaskMove,\r\n onColumnMove,\r\n onTaskDrop,\r\n onTaskDragStart,\r\n onTaskDragEnd\r\n}: UseKanbanDragAndDropProps) {\r\n const [draggedTaskId, setDraggedTaskId] = useState<string | null>(null);\r\n const [draggedColumnId, setDraggedColumnId] = useState<string | null>(null);\r\n const [dragOverColumnId, setDragOverColumnId] = useState<string | null>(null);\r\n const [dragOverTaskId, setDragOverTaskId] = useState<string | null>(null);\r\n const [dropPosition, setDropPosition] = useState<DropPosition | null>(null);\r\n \r\n const touchTimeout = useRef<any>(null);\r\n const lastTouchPos = useRef<{ x: number, y: number } | null>(null);\r\n\r\n const handleDragStart = (e: React.DragEvent, id: string, type: 'task' | 'column') => {\r\n if (type === 'task') {\r\n setDraggedTaskId(id);\r\n e.dataTransfer.setData('taskId', id);\r\n onTaskDragStart?.(id);\r\n } else {\r\n setDraggedColumnId(id);\r\n e.dataTransfer.setData('columnId', id);\r\n }\r\n e.dataTransfer.effectAllowed = 'move';\r\n };\r\n\r\n const handleDragEnd = useCallback(() => {\r\n if (draggedTaskId) {\r\n onTaskDragEnd?.(draggedTaskId);\r\n }\r\n setDraggedTaskId(null);\r\n setDraggedColumnId(null);\r\n setDragOverColumnId(null);\r\n setDragOverTaskId(null);\r\n setDropPosition(null);\r\n }, [draggedTaskId, onTaskDragEnd]);\r\n\r\n const handleDragOver = (e: React.DragEvent, columnId: string, taskId?: string) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = 'move';\r\n \r\n if (draggedColumnId) {\r\n setDragOverColumnId(columnId);\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\r\n const midpoint = rect.left + rect.width / 2;\r\n setDropPosition(e.clientX < midpoint ? 'left' : 'right');\r\n } else {\r\n setDragOverColumnId(columnId);\r\n \r\n if (taskId) {\r\n setDragOverTaskId(taskId);\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\r\n const midpoint = rect.top + rect.height / 2;\r\n setDropPosition(e.clientY < midpoint ? 'top' : 'bottom');\r\n } else if (e.target === e.currentTarget) {\r\n setDragOverTaskId(null);\r\n setDropPosition(null);\r\n }\r\n }\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent, toColumnId: string, toTaskId?: string) => {\r\n e.preventDefault();\r\n const taskId = draggedTaskId || e.dataTransfer.getData('taskId');\r\n const columnId = draggedColumnId || e.dataTransfer.getData('columnId');\r\n\r\n if (columnId && onColumnMove) {\r\n onColumnMove(columnId, toColumnId, dropPosition === 'right' ? 'right' : 'left');\r\n } else if (taskId && onTaskMove) {\r\n const task = tasks.find(t => t.id === taskId);\r\n if (!task) return;\r\n\r\n const tasksToMove = selectedTaskIds.includes(taskId) \r\n ? selectedTaskIds \r\n : [taskId];\r\n\r\n tasksToMove.forEach((id) => {\r\n const currentTask = tasks.find(t => t.id === id);\r\n const fromColumnId = currentTask?.columnId || '';\r\n onTaskMove(id, toColumnId, toTaskId, dropPosition === 'bottom' ? 'bottom' : 'top');\r\n onTaskDrop?.(id, fromColumnId, toColumnId, 0);\r\n });\r\n }\r\n\r\n handleDragEnd();\r\n };\r\n\r\n const handleTouchStart = (e: React.TouchEvent, id: string, type: 'task' | 'column') => {\r\n const touch = e.touches[0];\r\n if (!touch) return;\r\n\r\n touchTimeout.current = setTimeout(() => {\r\n if (type === 'task') {\r\n setDraggedTaskId(id);\r\n onTaskDragStart?.(id);\r\n } else {\r\n setDraggedColumnId(id);\r\n }\r\n lastTouchPos.current = { x: touch.clientX, y: touch.clientY };\r\n }, 500);\r\n };\r\n\r\n const handleTouchMove = (e: React.TouchEvent) => {\r\n if (!draggedTaskId && !draggedColumnId) return;\r\n e.preventDefault();\r\n \r\n const touch = e.touches[0];\r\n if (!touch) return;\r\n\r\n const target = document.elementFromPoint(touch.clientX, touch.clientY);\r\n if (!target) return;\r\n\r\n const columnEl = target.closest('[data-column-id]');\r\n const taskEl = target.closest('[data-task-id]');\r\n\r\n if (columnEl) {\r\n const columnId = columnEl.getAttribute('data-column-id')!;\r\n setDragOverColumnId(columnId);\r\n \r\n if (draggedColumnId) {\r\n const rect = columnEl.getBoundingClientRect();\r\n const midpoint = rect.left + rect.width / 2;\r\n setDropPosition(touch.clientX < midpoint ? 'left' : 'right');\r\n } else if (taskEl) {\r\n const taskId = taskEl.getAttribute('data-task-id')!;\r\n setDragOverTaskId(taskId);\r\n const rect = taskEl.getBoundingClientRect();\r\n const midpoint = rect.top + rect.height / 2;\r\n setDropPosition(touch.clientY < midpoint ? 'top' : 'bottom');\r\n }\r\n }\r\n };\r\n\r\n const handleTouchEnd = (e: React.TouchEvent) => {\r\n clearTimeout(touchTimeout.current);\r\n if (draggedTaskId || draggedColumnId) {\r\n if (dragOverColumnId) {\r\n const taskId = draggedTaskId;\r\n const columnId = draggedColumnId;\r\n\r\n if (columnId && onColumnMove) {\r\n onColumnMove(columnId, dragOverColumnId, dropPosition === 'right' ? 'right' : 'left');\r\n } else if (taskId && onTaskMove) {\r\n onTaskMove(taskId, dragOverColumnId, dragOverTaskId || undefined, dropPosition === 'bottom' ? 'bottom' : 'top');\r\n }\r\n }\r\n handleDragEnd();\r\n }\r\n };\r\n\r\n return {\r\n draggedTaskId,\r\n draggedColumnId,\r\n dragOverColumnId,\r\n dragOverTaskId,\r\n dropPosition,\r\n handleDragStart,\r\n handleDragEnd,\r\n handleDragOver,\r\n handleDrop,\r\n handleTouchStart,\r\n handleTouchMove,\r\n handleTouchEnd,\r\n setDraggedTaskId\r\n };\r\n}\r\n","import React, { useState, useMemo } from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { KanbanHeader } from './KanbanHeader';\r\nimport { KanbanColumn } from './KanbanColumn';\r\nimport { KanbanListView } from './KanbanListView';\r\nimport { KanbanTimelineView } from './KanbanTimelineView';\r\nimport { KanbanTableView } from './KanbanTableView';\r\nimport { KanbanCalendarView } from './KanbanCalendarView';\r\nimport { KanbanFilterBar } from './KanbanFilterBar';\r\nimport { KanbanTaskModal } from './KanbanTaskModal';\r\nimport { KanbanSwimlane } from './KanbanSwimlane';\r\nimport { useKanbanFilters } from './useKanbanFilters';\r\nimport { useKanbanUndo } from './useKanbanUndo';\r\nimport { useKanbanKeyboard } from './useKanbanKeyboard';\r\nimport { useKanbanDragAndDrop } from './useKanbanDragAndDrop';\r\nimport type { KanbanProps, KanbanTask, KanbanColumnDef } from './types';\r\n\r\nexport function KanbanBoard({\r\n columns: initialColumns,\r\n tasks: initialTasks,\r\n onTaskMove,\r\n onColumnMove,\r\n onTaskClick,\r\n onTaskAdd,\r\n onColumnAction,\r\n swimlanes = false,\r\n swimlaneBy = 'priority',\r\n view: propView,\r\n onViewChange,\r\n className,\r\n ...props\r\n}: KanbanProps) {\r\n const [internalView, setInternalView] = useState<'board' | 'list' | 'calendar' | 'timeline' | 'table'>(propView || 'board');\r\n const [selectedTaskId, setSelectedTaskId] = useState<string | null>(null);\r\n const [collapsedSwimlanes, setCollapsedSwimlanes] = useState<string[]>([]);\r\n\r\n const view = propView || internalView;\r\n const setView = (v: 'board' | 'list' | 'calendar' | 'timeline' | 'table') => {\r\n setInternalView(v);\r\n onViewChange?.(v);\r\n };\r\n \r\n const { \r\n state, \r\n pushState, \r\n undo, \r\n redo, \r\n canUndo, \r\n canRedo \r\n } = useKanbanUndo({ tasks: initialTasks, columns: initialColumns });\r\n\r\n const tasks = state?.tasks || [];\r\n const columns = state?.columns || [];\r\n\r\n const {\r\n setSearchQuery,\r\n setActiveFilters,\r\n filteredTasks\r\n } = useKanbanFilters(tasks);\r\n\r\n const swimlaneGroups = useMemo(() => {\r\n if (!swimlanes) return null;\r\n const groups: Record<string, KanbanTask[]> = {};\r\n \r\n const getNestedValue = (obj: any, path: string) => {\r\n if (!path.includes('.')) return obj[path];\r\n return path.split('.').reduce((acc, part) => acc && acc[part], obj);\r\n };\r\n\r\n filteredTasks.forEach(task => {\r\n const rawValue = getNestedValue(task, swimlaneBy as string);\r\n const value = String(rawValue || 'Uncategorized');\r\n if (!groups[value]) groups[value] = [];\r\n groups[value].push(task);\r\n });\r\n return groups;\r\n }, [filteredTasks, swimlanes, swimlaneBy]);\r\n\r\n const {\r\n handleDragStart,\r\n handleDragOver,\r\n handleDrop,\r\n handleDragEnd\r\n } = useKanbanDragAndDrop({ \r\n columns, \r\n tasks, \r\n selectedTaskIds: [], \r\n onTaskMove: (taskId, toColumnId, toTaskId, position) => {\r\n const newTasks = [...tasks];\r\n const taskIndex = newTasks.findIndex(t => t.id === taskId);\r\n if (taskIndex === -1) return;\r\n\r\n const task = { ...newTasks[taskIndex], columnId: toColumnId } as KanbanTask;\r\n newTasks.splice(taskIndex, 1);\r\n \r\n if (!toTaskId) {\r\n newTasks.push(task);\r\n } else {\r\n const targetIndex = newTasks.findIndex(t => t.id === toTaskId);\r\n const insertIndex = position === 'bottom' ? targetIndex + 1 : targetIndex;\r\n newTasks.splice(insertIndex, 0, task);\r\n }\r\n\r\n pushState({ tasks: newTasks, columns });\r\n onTaskMove?.(taskId, toColumnId, toTaskId, position);\r\n }\r\n });\r\n\r\n useKanbanKeyboard({\r\n onUndo: undo,\r\n onRedo: redo,\r\n onSearch: () => document.querySelector<HTMLInputElement>('input[placeholder*=\"Search\"]')?.focus(),\r\n onNewTask: () => onTaskAdd?.('todo', 'New Task')\r\n });\r\n\r\n const selectedTask = useMemo(() => \r\n tasks.find(t => t.id === selectedTaskId), \r\n [tasks, selectedTaskId]\r\n );\r\n\r\n const renderView = () => {\r\n const handleTaskClick = (task: KanbanTask) => {\r\n setSelectedTaskId(task.id);\r\n onTaskClick?.(task);\r\n };\r\n\r\n switch (view) {\r\n case 'list':\r\n return <KanbanListView tasks={filteredTasks} columns={columns} onTaskClick={handleTaskClick} />;\r\n case 'timeline':\r\n return <KanbanTimelineView tasks={filteredTasks} />;\r\n case 'table':\r\n return <KanbanTableView tasks={filteredTasks} columns={columns} onTaskClick={handleTaskClick} />;\r\n case 'calendar':\r\n return <KanbanCalendarView tasks={filteredTasks} onTaskClick={handleTaskClick} />;\r\n default:\r\n if (swimlanes) {\r\n const groups = swimlaneGroups && Object.keys(swimlaneGroups).length > 0 \r\n ? swimlaneGroups \r\n : { 'All Tasks': [] };\r\n\r\n return (\r\n <div className=\"flex flex-col gap-8 overflow-y-auto h-full pr-2 custom-scrollbar\">\r\n {Object.entries(groups).map(([groupName, groupTasks]) => (\r\n <KanbanSwimlane\r\n key={groupName}\r\n title={groupName}\r\n count={groupTasks.length}\r\n isCollapsed={collapsedSwimlanes.includes(groupName)}\r\n onToggle={() => setCollapsedSwimlanes(prev => \r\n prev.includes(groupName) ? prev.filter(s => s !== groupName) : [...prev, groupName]\r\n )}\r\n >\r\n <div className=\"flex gap-6 min-h-[200px]\">\r\n {columns.map(column => (\r\n <KanbanColumn\r\n key={column.id}\r\n column={column}\r\n tasks={groupTasks.filter(t => t.columnId === column.id)}\r\n onTaskClick={handleTaskClick}\r\n onAddTask={() => onTaskAdd?.(column.id, 'New Task')}\r\n onAction={(action) => onColumnAction?.(column.id, action)}\r\n onDragStart={handleDragStart}\r\n onDragOver={(e, taskId) => handleDragOver(e, column.id, taskId)}\r\n onDrop={(e, taskId) => handleDrop(e, column.id, taskId)}\r\n />\r\n ))}\r\n </div>\r\n </KanbanSwimlane>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"flex gap-6 overflow-x-auto pb-4 min-h-[500px] scrollbar-thin scrollbar-thumb-white/10\">\r\n {columns.map(column => (\r\n <KanbanColumn\r\n key={column.id}\r\n column={column}\r\n tasks={filteredTasks.filter(t => t.columnId === column.id)}\r\n onTaskClick={handleTaskClick}\r\n onAddTask={() => onTaskAdd?.(column.id, 'New Task')}\r\n onAction={(action) => onColumnAction?.(column.id, action)}\r\n onDragStart={handleDragStart}\r\n onDragOver={(e, taskId) => handleDragOver(e, column.id, taskId)}\r\n onDrop={(e, taskId) => handleDrop(e, column.id, taskId)}\r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex flex-col gap-4 h-full\", className)}>\r\n <KanbanHeader \r\n title=\"Project Board\"\r\n view={view}\r\n onViewChange={(v) => setView(v as any)}\r\n canUndo={canUndo}\r\n canRedo={canRedo}\r\n onUndo={undo}\r\n onRedo={redo}\r\n />\r\n \r\n <KanbanFilterBar \r\n onSearchChange={setSearchQuery}\r\n onFilterChange={setActiveFilters}\r\n />\r\n\r\n <div className=\"flex-1 overflow-hidden\">\r\n {renderView()}\r\n </div>\r\n\r\n {selectedTask && (\r\n <KanbanTaskModal\r\n isOpen={!!selectedTaskId}\r\n onClose={() => setSelectedTaskId(null)}\r\n task={selectedTask}\r\n onSave={(updatedTask) => {\r\n const updatedTasks = tasks.map(t => t.id === selectedTask.id ? { ...t, ...updatedTask } : t);\r\n pushState({ tasks: updatedTasks, columns });\r\n setSelectedTaskId(null);\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../../utils/cn';\r\nimport { Plus, X } from 'lucide-react';\r\nimport { Button } from '../../button/Button';\r\n\r\ninterface KanbanQuickAddProps {\r\n columnId: string;\r\n onAdd: (columnId: string, title: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport function KanbanQuickAdd({ columnId, onAdd, placeholder = \"Add task...\", className }: KanbanQuickAddProps) {\r\n const [isAdding, setIsAdding] = useState(false);\r\n const [title, setTitle] = useState('');\r\n\r\n const handleSubmit = (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (!title.trim()) return;\r\n onAdd(columnId, title);\r\n setTitle('');\r\n setIsAdding(false);\r\n };\r\n\r\n if (!isAdding) {\r\n return (\r\n <button\r\n onClick={() => setIsAdding(true)}\r\n className={cn(\r\n \"w-full flex items-center gap-2 p-3 rounded-2xl border border-dashed border-white/10 text-white/40 hover:border-white/20 hover:bg-white/5 transition-all text-sm\",\r\n className\r\n )}\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n {placeholder}\r\n </button>\r\n );\r\n }\r\n\r\n return (\r\n <form \r\n onSubmit={handleSubmit}\r\n className={cn(\"bg-white/[0.03] border border-white/10 rounded-2xl p-3 space-y-3\", className)}\r\n >\r\n <input\r\n autoFocus\r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n placeholder=\"What needs to be done?\"\r\n className=\"w-full bg-transparent border-none outline-none text-sm text-white placeholder:text-white/20\"\r\n onKeyDown={(e) => {\r\n if (e.key === 'Escape') setIsAdding(false);\r\n }}\r\n />\r\n <div className=\"flex items-center justify-end gap-2\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n onClick={() => setIsAdding(false)}\r\n className=\"h-8 text-white/40 hover:text-white\"\r\n >\r\n Cancel\r\n </Button>\r\n <Button \r\n size=\"sm\" \r\n onClick={() => handleSubmit()}\r\n disabled={!title.trim()}\r\n className=\"h-8\"\r\n >\r\n Add Task\r\n </Button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n","import { useState, useEffect, useCallback } from 'react';\r\nimport type { KanbanTask, KanbanColumnDef } from './types';\r\n\r\ninterface UseKanbanSyncProps {\r\n onSync?: (data: { tasks: KanbanTask[], columns: KanbanColumnDef[] }) => Promise<void>;\r\n interval?: number;\r\n enabled?: boolean;\r\n}\r\n\r\nexport function useKanbanSync({ onSync, interval = 30000, enabled = false }: UseKanbanSyncProps) {\r\n const [lastSynced, setLastSynced] = useState<Date | null>(null);\r\n const [isSyncing, setIsSyncing] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const sync = useCallback(async (data: { tasks: KanbanTask[], columns: KanbanColumnDef[] }) => {\r\n if (!onSync) return;\r\n \r\n setIsSyncing(true);\r\n setError(null);\r\n \r\n try {\r\n await onSync(data);\r\n setLastSynced(new Date());\r\n } catch (err) {\r\n setError(err instanceof Error ? err : new Error('Sync failed'));\r\n } finally {\r\n setIsSyncing(false);\r\n }\r\n }, [onSync]);\r\n\r\n return {\r\n sync,\r\n isSyncing,\r\n lastSynced,\r\n error\r\n };\r\n}\r\n","import { useState, useCallback } from 'react';\r\nimport type { KanbanUser } from './types';\r\n\r\nexport interface KanbanHistoryEntry {\r\n id: string;\r\n taskId?: string;\r\n columnId?: string;\r\n user: KanbanUser;\r\n action: string;\r\n details?: string;\r\n timestamp: Date;\r\n}\r\n\r\nexport function useKanbanHistory() {\r\n const [history, setHistory] = useState<KanbanHistoryEntry[]>([]);\r\n\r\n const addEntry = useCallback((entry: Omit<KanbanHistoryEntry, 'id' | 'timestamp'>) => {\r\n const newEntry: KanbanHistoryEntry = {\r\n ...entry,\r\n id: Math.random().toString(36).substr(2, 9),\r\n timestamp: new Date()\r\n };\r\n setHistory(prev => [newEntry, ...prev]);\r\n }, []);\r\n\r\n const clearHistory = useCallback(() => {\r\n setHistory([]);\r\n }, []);\r\n\r\n return {\r\n history,\r\n addEntry,\r\n clearHistory\r\n };\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { CheckCircle2, Circle } from 'lucide-react';\r\nimport type { Subtask } from '../types';\r\n\r\ninterface SubtaskListProps {\r\n subtasks: Subtask[];\r\n onToggle?: (id: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function SubtaskList({ subtasks, onToggle, className }: SubtaskListProps) {\r\n if (!subtasks || subtasks.length === 0) return null;\r\n\r\n return (\r\n <div className={cn(\"space-y-1\", className)}>\r\n {subtasks.map((subtask) => (\r\n <div \r\n key={subtask.id}\r\n className=\"flex items-center gap-2 group cursor-pointer\"\r\n onClick={() => onToggle?.(subtask.id)}\r\n >\r\n {subtask.completed ? (\r\n <CheckCircle2 className=\"h-3.5 w-3.5 text-green-500\" />\r\n ) : (\r\n <Circle className=\"h-3.5 w-3.5 text-white/20 group-hover:text-white/40\" />\r\n )}\r\n <span className={cn(\r\n \"text-xs transition-colors\",\r\n subtask.completed ? \"text-white/40 line-through\" : \"text-white/70\"\r\n )}>\r\n {subtask.title}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../../utils/cn';\r\nimport { Avatar } from '../../Avatar';\r\nimport type { KanbanUser } from '../types';\r\n\r\ninterface Activity {\r\n id: string;\r\n user: KanbanUser;\r\n action: string;\r\n target?: string;\r\n timestamp: Date;\r\n}\r\n\r\ninterface TaskActivityProps {\r\n activities: Activity[];\r\n className?: string;\r\n}\r\n\r\nexport function TaskActivity({ activities, className }: TaskActivityProps) {\r\n return (\r\n <div className={cn(\"space-y-4\", className)}>\r\n <h4 className=\"text-[10px] text-white/40 uppercase tracking-wider font-bold\">Activity</h4>\r\n <div className=\"space-y-4\">\r\n {activities.map((activity) => (\r\n <div key={activity.id} className=\"flex gap-3\">\r\n <Avatar src={activity.user.avatar} alt={activity.user.name} size=\"sm\" />\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-xs text-white/80\">\r\n <span className=\"font-bold text-white\">{activity.user.name}</span>\r\n {' '}{activity.action}{' '}\r\n {activity.target && <span className=\"font-medium text-blue-400\">{activity.target}</span>}\r\n </p>\r\n <p className=\"text-[10px] text-white/30 mt-0.5\">\r\n {activity.timestamp.toLocaleString()}\r\n </p>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface TerminalProps extends React.HTMLAttributes<HTMLDivElement> {\r\n title?: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Terminal = React.forwardRef<HTMLDivElement, TerminalProps>(\r\n ({ className, title = \"Terminal\", children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"overflow-hidden rounded-2xl border border-gray-200 bg-gray-950 shadow-xl dark:border-white/10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"flex items-center justify-between border-b border-white/10 bg-white/[0.03] px-4 py-2\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <div className=\"h-3 w-3 rounded-full bg-rose-500/80\" />\r\n <div className=\"h-3 w-3 rounded-full bg-amber-500/80\" />\r\n <div className=\"h-3 w-3 rounded-full bg-emerald-500/80\" />\r\n </div>\r\n <div className=\"text-xs font-medium text-white/50\">{title}</div>\r\n <div className=\"w-10\" /> {/* Spacer for centering */}\r\n </div>\r\n <div className=\"p-4 font-mono text-sm text-gray-300\">\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\nTerminal.displayName = \"Terminal\";\r\n\r\nexport const TerminalLine = ({ children, prefix = \"$\", className }: { children: React.ReactNode, prefix?: string, className?: string }) => (\r\n <div className={cn(\"flex gap-2\", className)}>\r\n <span className=\"select-none text-emerald-400\">{prefix}</span>\r\n <span>{children}</span>\r\n </div>\r\n);\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface MarqueeProps extends React.HTMLAttributes<HTMLDivElement> {\r\n pauseOnHover?: boolean;\r\n direction?: 'left' | 'right';\r\n speed?: 'slow' | 'normal' | 'fast';\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Marquee = ({ \r\n className, \r\n pauseOnHover = false, \r\n direction = 'left', \r\n speed = 'normal',\r\n children, \r\n ...props \r\n}: MarqueeProps) => {\r\n \r\n const speeds = {\r\n slow: \"40s\",\r\n normal: \"20s\",\r\n fast: \"10s\",\r\n };\r\n\r\n return (\r\n <div \r\n className={cn(\"group flex overflow-hidden p-2 [--gap:1rem] [gap:var(--gap)]\", className)} \r\n {...props}\r\n >\r\n <div \r\n className={cn(\r\n \"flex shrink-0 justify-around [gap:var(--gap)] min-w-full\",\r\n direction === 'left' ? \"animate-marquee\" : \"animate-marquee-reverse\",\r\n pauseOnHover && \"group-hover:[animation-play-state:paused]\"\r\n )}\r\n style={{ animationDuration: speeds[speed] }}\r\n >\r\n {children}\r\n </div>\r\n <div \r\n aria-hidden=\"true\"\r\n className={cn(\r\n \"flex shrink-0 justify-around [gap:var(--gap)] min-w-full\",\r\n direction === 'left' ? \"animate-marquee\" : \"animate-marquee-reverse\",\r\n pauseOnHover && \"group-hover:[animation-play-state:paused]\"\r\n )}\r\n style={{ animationDuration: speeds[speed] }}\r\n >\r\n {children}\r\n </div>\r\n <style>{`\r\n @keyframes marquee {\r\n from { transform: translateX(0); }\r\n to { transform: translateX(calc(-100% - var(--gap))); }\r\n }\r\n @keyframes marquee-reverse {\r\n from { transform: translateX(calc(-100% - var(--gap))); }\r\n to { transform: translateX(0); }\r\n }\r\n .animate-marquee {\r\n animation: marquee linear infinite;\r\n }\r\n .animate-marquee-reverse {\r\n animation: marquee-reverse linear infinite;\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst statusDotVariants = cva(\r\n \"inline-block rounded-full\",\r\n {\r\n variants: {\r\n variant: {\r\n success: \"bg-emerald-500\",\r\n warning: \"bg-amber-500\",\r\n error: \"bg-rose-500\",\r\n info: \"bg-blue-500\",\r\n neutral: \"bg-gray-400\",\r\n },\r\n size: {\r\n sm: \"h-2 w-2\",\r\n md: \"h-2.5 w-2.5\",\r\n lg: \"h-3 w-3\",\r\n },\r\n animate: {\r\n true: \"animate-pulse\",\r\n false: \"\",\r\n }\r\n },\r\n defaultVariants: {\r\n variant: \"neutral\",\r\n size: \"md\",\r\n animate: false,\r\n }\r\n }\r\n);\r\n\r\nexport interface StatusDotProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof statusDotVariants> {}\r\n\r\nexport const StatusDot = React.forwardRef<HTMLSpanElement, StatusDotProps>(\r\n ({ className, variant, size, animate, ...props }, ref) => {\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(statusDotVariants({ variant, size, animate, className }))}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nStatusDot.displayName = \"StatusDot\";\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst separatorVariants = cva(\r\n \"shrink-0 bg-gray-200 dark:bg-white/[0.03]\",\r\n {\r\n variants: {\r\n orientation: {\r\n horizontal: \"h-[1px] w-full\",\r\n vertical: \"h-full w-[1px]\",\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"horizontal\",\r\n },\r\n }\r\n);\r\n\r\nexport interface SeparatorProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof separatorVariants> {\r\n orientation?: \"horizontal\" | \"vertical\";\r\n decorative?: boolean;\r\n}\r\n\r\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\r\n (\r\n { className, orientation = \"horizontal\", decorative = true, ...props },\r\n ref\r\n ) => (\r\n <div\r\n ref={ref}\r\n role={decorative ? \"none\" : \"separator\"}\r\n aria-orientation={decorative ? undefined : orientation}\r\n className={cn(separatorVariants({ orientation, className }))}\r\n {...props}\r\n />\r\n )\r\n);\r\nSeparator.displayName = \"Separator\";\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronDown } from 'lucide-react';\r\n\r\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\r\n title?: React.ReactNode;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n disabled?: boolean;\r\n children: React.ReactNode;\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function Collapse({\r\n title,\r\n open: controlledOpen,\r\n defaultOpen = false,\r\n onOpenChange,\r\n disabled = false,\r\n children,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n ...props\r\n}: CollapseProps) {\r\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\r\n const isControlled = controlledOpen !== undefined;\r\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\r\n\r\n const handleToggle = () => {\r\n if (disabled) return;\r\n const newState = !isOpen;\r\n if (!isControlled) {\r\n setUncontrolledOpen(newState);\r\n }\r\n onOpenChange?.(newState);\r\n };\r\n\r\n return (\r\n <div \r\n className={cn(\r\n 'w-full overflow-hidden rounded-2xl border border-gray-200 bg-white dark:border-white/10 dark:bg-white/[0.02]',\r\n className\r\n )} \r\n {...props}\r\n >\r\n {title && (\r\n <button\r\n type=\"button\"\r\n onClick={handleToggle}\r\n disabled={disabled}\r\n className={cn(\r\n 'flex w-full items-center justify-between px-4 py-3 text-sm font-medium transition-colors hover:bg-gray-50 dark:hover:bg-white/[0.02]',\r\n disabled && 'cursor-not-allowed opacity-50',\r\n triggerClassName\r\n )}\r\n >\r\n {title}\r\n <ChevronDown\r\n className={cn(\r\n 'h-4 w-4 shrink-0 text-gray-500 transition-transform duration-200 dark:text-gray-400',\r\n isOpen && 'rotate-180'\r\n )}\r\n />\r\n </button>\r\n )}\r\n \r\n <div\r\n className={cn(\r\n 'grid transition-all duration-300 ease-in-out',\r\n isOpen ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\r\n )}\r\n >\r\n <div className=\"overflow-hidden\">\r\n <div className={cn('px-4 pb-4 pt-0', title && 'pt-1', contentClassName)}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { createContext, useContext, useState, useMemo } from 'react';\r\nimport { cn } from '../../../utils/cn';\r\n\r\n// --- Types ---\r\nexport type ChartDataPoint<T = Record<string, any>> = {\r\n label: string;\r\n value: number;\r\n} & T;\r\n\r\nexport interface ChartContextValue<T = any> {\r\n width: number;\r\n height: number;\r\n data: ChartDataPoint<T>[];\r\n maxValue: number;\r\n padding: { top: number; right: number; bottom: number; left: number };\r\n hoveredIndex: number | null;\r\n setHoveredIndex: (index: number | null) => void;\r\n}\r\n\r\n// --- Context ---\r\nconst ChartContext = createContext<ChartContextValue<any> | undefined>(undefined);\r\n\r\nexport function useChart<T = any>() {\r\n const context = useContext(ChartContext);\r\n if (!context) throw new Error('Chart components must be used within a ChartContainer');\r\n return context as ChartContextValue<T>;\r\n}\r\n\r\n// --- Utils ---\r\nexport function normalize(value: number, max: number, height: number) {\r\n if (max === 0) return 0;\r\n return (value / max) * height;\r\n}\r\n\r\n// --- Components ---\r\n\r\nexport interface ChartContainerProps<T = any> extends React.HTMLAttributes<HTMLDivElement> {\r\n data: ChartDataPoint<T>[];\r\n height?: number;\r\n padding?: { top: number; right: number; bottom: number; left: number };\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function ChartContainer<T = any>({\r\n data,\r\n height = 300,\r\n padding = { top: 20, right: 20, bottom: 40, left: 40 },\r\n className,\r\n children,\r\n ...props\r\n}: ChartContainerProps<T>) {\r\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\r\n const [containerWidth, setContainerWidth] = useState(0);\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n\r\n // Responsive width\r\n React.useEffect(() => {\r\n if (!containerRef.current) return;\r\n const observer = new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n setContainerWidth(entries[0].contentRect.width);\r\n }\r\n });\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const maxValue = useMemo(() => {\r\n return Math.max(...data.map((d) => d.value)) * 1.1; // Add 10% headroom\r\n }, [data]);\r\n\r\n return (\r\n <ChartContext.Provider\r\n value={{\r\n width: containerWidth,\r\n height,\r\n data,\r\n maxValue,\r\n padding,\r\n hoveredIndex,\r\n setHoveredIndex,\r\n }}\r\n >\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative w-full select-none\", className)}\r\n style={{ height }}\r\n {...props}\r\n >\r\n {containerWidth > 0 && (\r\n <svg\r\n width=\"100%\"\r\n height=\"100%\"\r\n viewBox={`0 0 ${containerWidth} ${height}`}\r\n className=\"overflow-visible\"\r\n >\r\n {children}\r\n </svg>\r\n )}\r\n </div>\r\n </ChartContext.Provider>\r\n );\r\n}\r\n\r\nexport function ChartGrid({ lines = 5 }: { lines?: number }) {\r\n const { width, height, padding } = useChart();\r\n const chartHeight = height - padding.top - padding.bottom;\r\n\r\n return (\r\n <g className=\"text-gray-200 dark:text-white/5\">\r\n {Array.from({ length: lines + 1 }).map((_, i) => {\r\n const y = padding.top + (chartHeight / lines) * i;\r\n return (\r\n <line\r\n key={i}\r\n x1={padding.left}\r\n y1={y}\r\n x2={width - padding.right}\r\n y2={y}\r\n stroke=\"currentColor\"\r\n strokeWidth={1}\r\n strokeDasharray=\"4 4\"\r\n />\r\n );\r\n })}\r\n </g>\r\n );\r\n}\r\n\r\nexport function ChartXAxis() {\r\n const { width, height, padding, data } = useChart();\r\n const chartWidth = width - padding.left - padding.right;\r\n const itemWidth = chartWidth / data.length;\r\n\r\n return (\r\n <g>\r\n {data.map((point, i) => {\r\n const x = padding.left + itemWidth * i + itemWidth / 2;\r\n const y = height - padding.bottom + 20;\r\n return (\r\n <text\r\n key={i}\r\n x={x}\r\n y={y}\r\n textAnchor=\"middle\"\r\n className=\"fill-gray-400 dark:fill-white/40 text-xs font-medium\"\r\n >\r\n {point.label}\r\n </text>\r\n );\r\n })}\r\n </g>\r\n );\r\n}\r\n\r\nexport function ChartTooltip({ \r\n renderTooltip \r\n}: { \r\n renderTooltip?: (data: ChartDataPoint) => React.ReactNode \r\n}) {\r\n const { hoveredIndex, data, width, padding } = useChart();\r\n \r\n if (hoveredIndex === null) return null;\r\n\r\n const chartWidth = width - padding.left - padding.right;\r\n const itemWidth = chartWidth / data.length;\r\n const x = padding.left + itemWidth * hoveredIndex + itemWidth / 2;\r\n const point = data[hoveredIndex];\r\n\r\n if (!point) return null;\r\n\r\n // Simple default tooltip if none provided\r\n const content = renderTooltip ? renderTooltip(point) : (\r\n <div className=\"rounded-xl border border-gray-200 dark:border-white/10 bg-white/90 dark:bg-black/80 px-3 py-2 text-xs shadow-xl backdrop-blur-md\">\r\n <div className=\"font-semibold text-gray-900 dark:text-white\">{point.label}</div>\r\n <div className=\"text-gray-500 dark:text-white/70\">Value: {point.value}</div>\r\n </div>\r\n );\r\n\r\n return (\r\n <foreignObject\r\n x={x - 75} // Center roughly (150px width assumed)\r\n y={0}\r\n width={150}\r\n height=\"100%\"\r\n className=\"pointer-events-none overflow-visible\"\r\n >\r\n <div className=\"flex h-full flex-col justify-center items-center\">\r\n <div className=\"animate-in fade-in zoom-in-95 duration-200\">\r\n {content}\r\n </div>\r\n </div>\r\n </foreignObject>\r\n );\r\n}\r\n\r\nexport function ChartSkeleton() {\r\n return (\r\n <div className=\"w-full h-full flex items-end justify-between gap-2 p-4 animate-pulse bg-gray-100 dark:bg-white/[0.02] rounded-2xl border border-gray-200 dark:border-white/5\">\r\n {[...Array(12)].map((_, i) => (\r\n <div \r\n key={i} \r\n className=\"w-full bg-gray-200 dark:bg-white/[0.03] rounded-t-lg\" \r\n style={{ height: `${Math.random() * 60 + 20}%` }}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart, normalize } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface BarChartProps<T = any> {\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose';\r\n showValues?: boolean;\r\n animationDelay?: number;\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function BarChart<T = any>({ \r\n color = 'cyan', \r\n showValues = false, \r\n animationDelay = 0,\r\n onValueClick \r\n}: BarChartProps<T>) {\r\n const { width, height, padding, data, maxValue, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n const chartWidth = width - padding.left - padding.right;\r\n const chartHeight = height - padding.top - padding.bottom;\r\n const itemWidth = chartWidth / data.length;\r\n const barWidth = itemWidth * 0.6; // 60% of slot width\r\n\r\n const colors = {\r\n cyan: 'from-cyan-500 to-blue-600',\r\n purple: 'from-purple-500 to-indigo-600',\r\n emerald: 'from-emerald-500 to-teal-600',\r\n amber: 'from-amber-400 to-orange-600',\r\n rose: 'from-rose-500 to-pink-600',\r\n };\r\n\r\n return (\r\n <g>\r\n {data.map((point, i) => {\r\n const barHeight = normalize(point.value, maxValue, chartHeight);\r\n const x = padding.left + itemWidth * i + (itemWidth - barWidth) / 2;\r\n const y = height - padding.bottom - barHeight;\r\n const isHovered = hoveredIndex === i;\r\n const delay = i * 0.1 + animationDelay; // Slower stagger for smoothness\r\n\r\n return (\r\n <g \r\n key={i} \r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n onClick={() => onValueClick?.(point)}\r\n className={cn(\"cursor-pointer\", onValueClick && \"cursor-pointer\")}\r\n >\r\n {/* Invisible hit area for easier hovering */}\r\n <rect\r\n x={padding.left + itemWidth * i}\r\n y={padding.top}\r\n width={itemWidth}\r\n height={chartHeight}\r\n fill=\"transparent\"\r\n />\r\n \r\n {/* The Bar */}\r\n <rect\r\n x={x}\r\n y={y}\r\n width={barWidth}\r\n height={barHeight}\r\n rx={4}\r\n className={cn(\r\n \"transition-all duration-300 ease-out\",\r\n isHovered ? \"brightness-125 filter\" : \"opacity-80\"\r\n )}\r\n style={{\r\n transformOrigin: `center ${height - padding.bottom}px`,\r\n animation: `grow-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) ${delay}s backwards`\r\n }}\r\n >\r\n {/* Gradient Definition would be better in defs, but inline style works for dynamic colors if needed. \r\n Here we use classes for gradients. */}\r\n </rect>\r\n \r\n {/* Gradient Overlay via Class */}\r\n <rect\r\n x={x}\r\n y={y}\r\n width={barWidth}\r\n height={barHeight}\r\n rx={4}\r\n className={cn(\"bg-gradient-to-b\", colors[color])}\r\n style={{\r\n pointerEvents: 'none',\r\n transformOrigin: `center ${height - padding.bottom}px`,\r\n animation: `grow-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) ${delay}s backwards`\r\n }}\r\n />\r\n\r\n {/* Value Label */}\r\n {showValues && (\r\n <text\r\n x={x + barWidth / 2}\r\n y={y - 8}\r\n textAnchor=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={500}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in-up 0.5s ease-out ${delay + 0.4}s forwards`,\r\n textShadow: '0 2px 4px rgba(0,0,0,0.5)'\r\n }}\r\n >\r\n {point.value}\r\n </text>\r\n )}\r\n </g>\r\n );\r\n })}\r\n <style>{`\r\n @keyframes grow-up {\r\n from { transform: scaleY(0); }\r\n to { transform: scaleY(1); }\r\n }\r\n @keyframes fade-in-up {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart, normalize } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface AreaChartProps<T = any> {\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose';\r\n showValues?: boolean;\r\n animationDelay?: number;\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function AreaChart<T = any>({ \r\n color = 'purple', \r\n showValues = false, \r\n animationDelay = 0,\r\n onValueClick \r\n}: AreaChartProps<T>) {\r\n const { width, height, padding, data, maxValue, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n const chartWidth = width - padding.left - padding.right;\r\n const chartHeight = height - padding.top - padding.bottom;\r\n const itemWidth = chartWidth / (data.length - 1); // Points are on edges\r\n\r\n const colors = {\r\n cyan: { stroke: '#06b6d4', fill: 'rgba(6, 182, 212, 0.2)' },\r\n purple: { stroke: '#8b5cf6', fill: 'rgba(139, 92, 246, 0.2)' },\r\n emerald: { stroke: '#10b981', fill: 'rgba(16, 185, 129, 0.2)' },\r\n amber: { stroke: '#f59e0b', fill: 'rgba(245, 158, 11, 0.2)' },\r\n rose: { stroke: '#f43f5e', fill: 'rgba(244, 63, 94, 0.2)' },\r\n };\r\n\r\n const theme = colors[color];\r\n\r\n // Generate Path Data\r\n const points = data.map((point, i) => {\r\n const x = padding.left + itemWidth * i;\r\n const y = height - padding.bottom - normalize(point.value, maxValue, chartHeight);\r\n return { x, y, item: point };\r\n });\r\n\r\n // Simple Line Path\r\n const linePath = points.map((p, i) => (i === 0 ? `M ${p.x} ${p.y}` : `L ${p.x} ${p.y}`)).join(' ');\r\n\r\n // Area Path (closes the loop)\r\n const areaPath = `\r\n ${linePath}\r\n L ${width - padding.right} ${height - padding.bottom}\r\n L ${padding.left} ${height - padding.bottom}\r\n Z\r\n `;\r\n\r\n return (\r\n <g>\r\n {/* Area Fill */}\r\n <path\r\n d={areaPath}\r\n fill={theme.fill}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in 1s ease-out ${animationDelay}s forwards` \r\n }}\r\n />\r\n\r\n {/* Stroke Line */}\r\n <path\r\n d={linePath}\r\n fill=\"none\"\r\n stroke={theme.stroke}\r\n strokeWidth={3}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"animate-draw-line\"\r\n style={{\r\n strokeDasharray: 2000,\r\n strokeDashoffset: 2000,\r\n animation: `draw-line 2s ease-out ${animationDelay}s forwards`\r\n }}\r\n />\r\n\r\n {/* Interactive Points */}\r\n {points.map((p, i) => (\r\n <g \r\n key={i} \r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n onClick={() => onValueClick?.(p.item)}\r\n className={cn(\"cursor-crosshair\", onValueClick && \"cursor-pointer\")}\r\n >\r\n {/* Invisible Hit Area */}\r\n <rect \r\n x={p.x - itemWidth / 2} \r\n y={padding.top} \r\n width={itemWidth} \r\n height={chartHeight} \r\n fill=\"transparent\" \r\n />\r\n \r\n {/* Active Point Indicator */}\r\n {(hoveredIndex === i || showValues) && (\r\n <>\r\n {hoveredIndex === i && (\r\n <line\r\n x1={p.x}\r\n y1={padding.top}\r\n x2={p.x}\r\n y2={height - padding.bottom}\r\n stroke=\"white\"\r\n strokeWidth={1}\r\n strokeDasharray=\"4 4\"\r\n className=\"opacity-50\"\r\n />\r\n )}\r\n <circle\r\n cx={p.x}\r\n cy={p.y}\r\n r={hoveredIndex === i ? 6 : 4}\r\n fill={theme.stroke}\r\n stroke=\"white\"\r\n strokeWidth={2}\r\n style={{\r\n transition: 'r 0.2s ease-out'\r\n }}\r\n />\r\n {showValues && (\r\n <text\r\n x={p.x}\r\n y={p.y - 12}\r\n textAnchor=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={500}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in-up 0.5s ease-out ${animationDelay + 1 + i * 0.1}s forwards`,\r\n textShadow: '0 2px 4px rgba(0,0,0,0.5)'\r\n }}\r\n >\r\n {data[i]?.value}\r\n </text>\r\n )}\r\n </>\r\n )}\r\n </g>\r\n ))}\r\n\r\n <style>{`\r\n @keyframes draw-line {\r\n to { stroke-dashoffset: 0; }\r\n }\r\n @keyframes fade-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n @keyframes fade-in-up {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart, normalize } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface LineChartProps<T = any> {\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose';\r\n showValues?: boolean;\r\n animationDelay?: number;\r\n curve?: 'linear' | 'smooth' | 'step';\r\n strokeWidth?: number;\r\n align?: 'center' | 'edge';\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function LineChart<T = any>({ \r\n color = 'cyan', \r\n showValues = false, \r\n animationDelay = 0,\r\n curve = 'smooth',\r\n strokeWidth = 3,\r\n align = 'edge',\r\n onValueClick \r\n}: LineChartProps<T>) {\r\n const { width, height, padding, data, maxValue, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n const chartWidth = width - padding.left - padding.right;\r\n const chartHeight = height - padding.top - padding.bottom;\r\n \r\n // Align 'center' matches BarChart (bands), 'edge' matches AreaChart (points)\r\n const itemWidth = align === 'center' \r\n ? chartWidth / data.length \r\n : chartWidth / (data.length - 1);\r\n\r\n const colors = {\r\n cyan: '#06b6d4',\r\n purple: '#8b5cf6',\r\n emerald: '#10b981',\r\n amber: '#f59e0b',\r\n rose: '#f43f5e',\r\n };\r\n\r\n const strokeColor = colors[color];\r\n\r\n // Generate Points\r\n const points = data.map((point, i) => {\r\n let x;\r\n if (align === 'center') {\r\n // Center of the band\r\n x = padding.left + itemWidth * i + itemWidth / 2;\r\n } else {\r\n // Edge\r\n x = padding.left + itemWidth * i;\r\n }\r\n \r\n const y = height - padding.bottom - normalize(point.value, maxValue, chartHeight);\r\n return { x, y, item: point };\r\n });\r\n\r\n // Generate Path Command\r\n let d = '';\r\n if (points.length > 0) {\r\n d = `M ${points[0]!.x} ${points[0]!.y}`;\r\n \r\n if (curve === 'smooth') {\r\n // Simple Catmull-Rom or Bezier approximation could go here, \r\n // but for now let's use a simple cubic bezier strategy or just straight lines if complex.\r\n // Actually, let's do a simple smoothing by using midpoints for control points if requested,\r\n // or just standard SVG commands.\r\n // For simplicity and robustness without a library like d3-shape, let's stick to linear or a basic smooth approximation.\r\n \r\n // Basic smooth strategy: Cubic Bezier between points\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const p0 = points[i]!;\r\n const p1 = points[i + 1]!;\r\n const cp1x = p0.x + (p1.x - p0.x) / 2;\r\n const cp1y = p0.y;\r\n const cp2x = p0.x + (p1.x - p0.x) / 2;\r\n const cp2y = p1.y;\r\n d += ` C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${p1.x} ${p1.y}`;\r\n }\r\n } else if (curve === 'step') {\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const p0 = points[i]!;\r\n const p1 = points[i + 1]!;\r\n d += ` L ${p1.x} ${p0.y} L ${p1.x} ${p1.y}`;\r\n }\r\n } else {\r\n // Linear\r\n for (let i = 1; i < points.length; i++) {\r\n d += ` L ${points[i]!.x} ${points[i]!.y}`;\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <g>\r\n {/* The Line */}\r\n <path\r\n d={d}\r\n fill=\"none\"\r\n stroke={strokeColor}\r\n strokeWidth={strokeWidth}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"animate-draw-line\"\r\n style={{\r\n strokeDasharray: 3000,\r\n strokeDashoffset: 3000,\r\n animation: `draw-line 2.5s ease-out ${animationDelay}s forwards`\r\n }}\r\n />\r\n\r\n {/* Interactive Points */}\r\n {points.map((p, i) => (\r\n <g \r\n key={i} \r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n onClick={() => onValueClick?.(p.item)}\r\n className={cn(\"cursor-crosshair\", onValueClick && \"cursor-pointer\")}\r\n >\r\n {/* Invisible Hit Area */}\r\n <rect \r\n x={p.x - itemWidth / 2} \r\n y={padding.top} \r\n width={itemWidth} \r\n height={chartHeight} \r\n fill=\"transparent\" \r\n />\r\n \r\n {/* Active Point Indicator */}\r\n {(hoveredIndex === i || showValues) && (\r\n <>\r\n {hoveredIndex === i && (\r\n <line\r\n x1={p.x}\r\n y1={padding.top}\r\n x2={p.x}\r\n y2={height - padding.bottom}\r\n stroke=\"white\"\r\n strokeWidth={1}\r\n strokeDasharray=\"4 4\"\r\n className=\"opacity-50\"\r\n />\r\n )}\r\n <circle\r\n cx={p.x}\r\n cy={p.y}\r\n r={hoveredIndex === i ? 6 : 4}\r\n fill={strokeColor}\r\n stroke=\"white\"\r\n strokeWidth={2}\r\n style={{ transition: 'r 0.2s ease-out' }}\r\n />\r\n {showValues && (\r\n <text\r\n x={p.x}\r\n y={p.y - 12}\r\n textAnchor=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={500}\r\n style={{ \r\n opacity: 0,\r\n animation: `fade-in-up 0.5s ease-out ${animationDelay + 1 + i * 0.1}s forwards`,\r\n textShadow: '0 2px 4px rgba(0,0,0,0.5)'\r\n }}\r\n >\r\n {data[i]?.value}\r\n </text>\r\n )}\r\n </>\r\n )}\r\n </g>\r\n ))}\r\n\r\n <style>{`\r\n @keyframes draw-line {\r\n to { stroke-dashoffset: 0; }\r\n }\r\n @keyframes fade-in-up {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React, { useMemo } from 'react';\r\nimport type { ChartDataPoint } from './Chart';\r\nimport { useChart } from './Chart';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface PieChartProps<T = any> {\r\n innerRadius?: number; // 0 for Pie, >0 for Donut (0-1 relative to radius, or absolute pixels?) Let's say 0-1 relative.\r\n padAngle?: number;\r\n showLabels?: boolean;\r\n colors?: string[];\r\n onValueClick?: (data: ChartDataPoint<T>) => void;\r\n}\r\n\r\nexport function PieChart<T = any>({ \r\n innerRadius = 0, \r\n padAngle = 0.02, \r\n showLabels = false,\r\n colors = ['#06b6d4', '#8b5cf6', '#10b981', '#f59e0b', '#f43f5e', '#3b82f6', '#ec4899'],\r\n onValueClick\r\n}: PieChartProps<T>) {\r\n const { width, height, data, setHoveredIndex, hoveredIndex } = useChart<T>();\r\n \r\n const radius = Math.min(width, height) / 2 * 0.8; // 80% of half-size to leave room for labels/hover\r\n const centerX = width / 2;\r\n const centerY = height / 2;\r\n \r\n const total = useMemo(() => data.reduce((acc, cur) => acc + cur.value, 0), [data]);\r\n \r\n let currentAngle = 0;\r\n \r\n const slices = data.map((point, i) => {\r\n const percentage = point.value / total;\r\n const angle = percentage * 2 * Math.PI;\r\n \r\n const startAngle = currentAngle;\r\n const endAngle = currentAngle + angle;\r\n \r\n currentAngle += angle;\r\n \r\n return {\r\n ...point,\r\n startAngle,\r\n endAngle,\r\n color: colors[i % colors.length],\r\n percentage\r\n };\r\n });\r\n\r\n // Helper to get coordinates\r\n const getCoordinatesForPercent = (percent: number, r: number) => {\r\n const x = centerX + r * Math.cos(percent);\r\n const y = centerY + r * Math.sin(percent);\r\n return [x, y];\r\n };\r\n\r\n return (\r\n <g>\r\n {slices.map((slice, i) => {\r\n // Calculate path\r\n // We need to handle the gap (padAngle) if multiple slices\r\n const effectiveStartAngle = slice.startAngle + (slices.length > 1 ? padAngle / 2 : 0);\r\n const effectiveEndAngle = slice.endAngle - (slices.length > 1 ? padAngle / 2 : 0);\r\n \r\n // If the slice is too small due to padding, just skip or render a line? \r\n // For simplicity, let's just clamp.\r\n if (effectiveEndAngle <= effectiveStartAngle) return null;\r\n\r\n const [startX, startY] = getCoordinatesForPercent(effectiveStartAngle, radius);\r\n const [endX, endY] = getCoordinatesForPercent(effectiveEndAngle, radius);\r\n \r\n const largeArcFlag = effectiveEndAngle - effectiveStartAngle > Math.PI ? 1 : 0;\r\n \r\n // Inner radius (for donut)\r\n const rInner = radius * innerRadius;\r\n const [innerStartX, innerStartY] = getCoordinatesForPercent(effectiveEndAngle, rInner);\r\n const [innerEndX, innerEndY] = getCoordinatesForPercent(effectiveStartAngle, rInner);\r\n\r\n const pathData = [\r\n `M ${startX} ${startY}`,\r\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\r\n innerRadius > 0 ? `L ${innerStartX} ${innerStartY}` : `L ${centerX} ${centerY}`,\r\n innerRadius > 0 ? `A ${rInner} ${rInner} 0 ${largeArcFlag} 0 ${innerEndX} ${innerEndY}` : '',\r\n 'Z'\r\n ].join(' ');\r\n\r\n const isHovered = hoveredIndex === i;\r\n \r\n // Label position (centroid)\r\n const midAngle = (slice.startAngle + slice.endAngle) / 2;\r\n const labelRadius = radius * (innerRadius > 0 ? (1 + innerRadius) / 2 : 0.7);\r\n const [labelX, labelY] = getCoordinatesForPercent(midAngle, labelRadius);\r\n\r\n return (\r\n <g \r\n key={i}\r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n className=\"cursor-pointer\"\r\n >\r\n <path\r\n d={pathData}\r\n fill={slice.color}\r\n className={cn(\r\n \"transition-all duration-300 ease-out\",\r\n isHovered ? \"opacity-100 brightness-110\" : \"opacity-90\"\r\n )}\r\n style={{\r\n transformOrigin: `${centerX}px ${centerY}px`,\r\n transform: isHovered ? 'scale(1.05)' : 'scale(1)',\r\n animation: `pie-enter 0.6s ease-out ${i * 0.05}s backwards`\r\n }}\r\n />\r\n \r\n {(showLabels || isHovered) && (\r\n <text\r\n x={labelX}\r\n y={labelY}\r\n textAnchor=\"middle\"\r\n dominantBaseline=\"middle\"\r\n fill=\"white\"\r\n fontSize={12}\r\n fontWeight={600}\r\n className=\"pointer-events-none\"\r\n style={{ textShadow: '0 1px 2px rgba(0,0,0,0.5)' }}\r\n >\r\n {Math.round(slice.percentage * 100)}%\r\n </text>\r\n )}\r\n </g>\r\n );\r\n })}\r\n <style>{`\r\n @keyframes pie-enter {\r\n from { opacity: 0; transform: scale(0.8) rotate(-10deg); }\r\n to { opacity: 0.9; transform: scale(1) rotate(0); }\r\n }\r\n `}</style>\r\n </g>\r\n );\r\n}\r\n","import React, { useMemo, useState } from 'react';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport type RadarDataPoint<T = Record<string, any>> = {\r\n subject: string;\r\n} & T;\r\n\r\nexport interface RadarChartProps<T = any> extends React.HTMLAttributes<HTMLDivElement> {\r\n data: RadarDataPoint<T>[];\r\n keys: (keyof T)[]; // Keys to plot (e.g. ['A', 'B'])\r\n colors?: string[]; // Colors for each key\r\n maxValue?: number;\r\n height?: number;\r\n}\r\n\r\nexport function RadarChart<T = any>({\r\n data,\r\n keys,\r\n colors = ['cyan', 'purple', 'emerald'],\r\n maxValue: userMaxValue,\r\n height = 300,\r\n className,\r\n ...props\r\n}: RadarChartProps<T>) {\r\n const [containerWidth, setContainerWidth] = useState(0);\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n\r\n // Responsive width\r\n React.useEffect(() => {\r\n if (!containerRef.current) return;\r\n const observer = new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n setContainerWidth(entries[0].contentRect.width);\r\n }\r\n });\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const center = { x: containerWidth / 2, y: height / 2 };\r\n const radius = Math.min(containerWidth, height) / 2 - 40; // 40px padding\r\n\r\n const maxValue = useMemo(() => {\r\n if (userMaxValue) return userMaxValue;\r\n let max = 0;\r\n data.forEach(d => {\r\n keys.forEach(k => {\r\n const val = Number(d[k]) || 0;\r\n if (val > max) max = val;\r\n });\r\n });\r\n return max * 1.1 || 100;\r\n }, [data, keys, userMaxValue]);\r\n\r\n const angleSlice = (Math.PI * 2) / data.length;\r\n\r\n const colorMap: Record<string, string> = {\r\n cyan: 'rgba(6, 182, 212, 0.5)',\r\n purple: 'rgba(139, 92, 246, 0.5)',\r\n emerald: 'rgba(16, 185, 129, 0.5)',\r\n amber: 'rgba(245, 158, 11, 0.5)',\r\n rose: 'rgba(244, 63, 94, 0.5)',\r\n };\r\n \r\n const strokeMap: Record<string, string> = {\r\n cyan: '#06b6d4',\r\n purple: '#8b5cf6',\r\n emerald: '#10b981',\r\n amber: '#f59e0b',\r\n rose: '#f43f5e',\r\n };\r\n\r\n if (containerWidth === 0) return <div ref={containerRef} style={{ height }} />;\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative w-full select-none\", className)}\r\n style={{ height }}\r\n {...props}\r\n >\r\n <svg width=\"100%\" height=\"100%\" viewBox={`0 0 ${containerWidth} ${height}`} className=\"overflow-visible\">\r\n {/* Grid */}\r\n {[1, 2, 3, 4, 5].map((level) => {\r\n const levelRadius = (radius / 5) * level;\r\n const points = data.map((_, i) => {\r\n const angle = angleSlice * i - Math.PI / 2;\r\n return `${center.x + Math.cos(angle) * levelRadius},${center.y + Math.sin(angle) * levelRadius}`;\r\n }).join(' ');\r\n \r\n return (\r\n <polygon\r\n key={level}\r\n points={points}\r\n fill=\"none\"\r\n stroke=\"rgba(255,255,255,0.1)\"\r\n strokeWidth=\"1\"\r\n />\r\n );\r\n })}\r\n\r\n {/* Axes & Labels */}\r\n {data.map((d, i) => {\r\n const angle = angleSlice * i - Math.PI / 2;\r\n const x = center.x + Math.cos(angle) * radius;\r\n const y = center.y + Math.sin(angle) * radius;\r\n \r\n // Label position (slightly outside)\r\n const labelX = center.x + Math.cos(angle) * (radius + 20);\r\n const labelY = center.y + Math.sin(angle) * (radius + 20);\r\n\r\n return (\r\n <g key={i}>\r\n <line\r\n x1={center.x}\r\n y1={center.y}\r\n x2={x}\r\n y2={y}\r\n stroke=\"rgba(255,255,255,0.1)\"\r\n strokeWidth=\"1\"\r\n />\r\n <text\r\n x={labelX}\r\n y={labelY}\r\n textAnchor=\"middle\"\r\n dominantBaseline=\"middle\"\r\n fill=\"rgba(255,255,255,0.6)\"\r\n fontSize=\"12\"\r\n >\r\n {d.subject}\r\n </text>\r\n </g>\r\n );\r\n })}\r\n\r\n {/* Data Polygons */}\r\n {keys.map((key, kIndex) => {\r\n const points = data.map((d, i) => {\r\n const value = Number(d[key]) || 0;\r\n const r = (value / maxValue) * radius;\r\n const angle = angleSlice * i - Math.PI / 2;\r\n return `${center.x + Math.cos(angle) * r},${center.y + Math.sin(angle) * r}`;\r\n }).join(' ');\r\n\r\n const colorName = colors[kIndex % colors.length] || 'cyan';\r\n const fill = colorMap[colorName];\r\n const stroke = strokeMap[colorName];\r\n\r\n return (\r\n <polygon\r\n key={key as string}\r\n points={points}\r\n fill={fill}\r\n fillOpacity={0.3}\r\n stroke={stroke}\r\n strokeWidth={2}\r\n className=\"transition-all duration-500 ease-out hover:fill-opacity-50\"\r\n />\r\n );\r\n })}\r\n </svg>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../../utils/cn';\r\n\r\nexport interface SparklineProps extends React.HTMLAttributes<HTMLDivElement> {\r\n data: number[];\r\n color?: 'cyan' | 'purple' | 'emerald' | 'amber' | 'rose' | 'white';\r\n height?: number;\r\n strokeWidth?: number;\r\n fill?: boolean;\r\n}\r\n\r\nexport function Sparkline({\r\n data,\r\n color = 'emerald',\r\n height = 40,\r\n strokeWidth = 2,\r\n fill = false,\r\n className,\r\n ...props\r\n}: SparklineProps) {\r\n const max = Math.max(...data);\r\n const min = Math.min(...data);\r\n const range = max - min || 1;\r\n\r\n const colors = {\r\n cyan: '#06b6d4',\r\n purple: '#8b5cf6',\r\n emerald: '#10b981',\r\n amber: '#f59e0b',\r\n rose: '#f43f5e',\r\n white: '#ffffff',\r\n };\r\n\r\n const strokeColor = colors[color];\r\n\r\n // Generate points\r\n // We assume width is 100% (viewBox 0 0 100 100) but we need aspect ratio.\r\n // To make it responsive without JS, we can use preserveAspectRatio=\"none\" on the SVG\r\n // and map x from 0 to 100.\r\n \r\n const points = data.map((val, i) => {\r\n const x = (i / (data.length - 1)) * 100;\r\n // Invert Y because SVG 0 is top\r\n // Normalize value between 0 and 100 (height of viewBox)\r\n // Add some padding (5%) so stroke doesn't clip\r\n const normalized = ((val - min) / range);\r\n const y = 95 - (normalized * 90); \r\n return { x, y };\r\n });\r\n\r\n let d = '';\r\n if (points.length > 0) {\r\n d = `M ${points[0]!.x} ${points[0]!.y}`;\r\n // Simple smoothing\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const p0 = points[i]!;\r\n const p1 = points[i + 1]!;\r\n const cp1x = p0.x + (p1.x - p0.x) / 2;\r\n const cp1y = p0.y;\r\n const cp2x = p0.x + (p1.x - p0.x) / 2;\r\n const cp2y = p1.y;\r\n d += ` C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${p1.x} ${p1.y}`;\r\n }\r\n }\r\n\r\n const fillPath = fill \r\n ? `${d} L 100 100 L 0 100 Z` \r\n : undefined;\r\n\r\n return (\r\n <div \r\n className={cn(\"w-full overflow-hidden\", className)} \r\n style={{ height }} \r\n {...props}\r\n >\r\n <svg\r\n width=\"100%\"\r\n height=\"100%\"\r\n viewBox=\"0 0 100 100\"\r\n preserveAspectRatio=\"none\"\r\n className=\"overflow-visible\"\r\n >\r\n {fill && (\r\n <path\r\n d={fillPath}\r\n fill={strokeColor}\r\n fillOpacity={0.1}\r\n stroke=\"none\"\r\n />\r\n )}\r\n <path\r\n d={d}\r\n fill=\"none\"\r\n stroke={strokeColor}\r\n strokeWidth={strokeWidth}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\" // Keeps stroke width constant despite scaling\r\n />\r\n </svg>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { useChart } from './Chart';\r\n\r\nexport interface YAxisProps {\r\n ticks?: number;\r\n format?: (value: number) => string;\r\n}\r\n\r\nexport function ChartYAxis({ ticks = 5, format = (v) => v.toString() }: YAxisProps) {\r\n const { height, padding, maxValue } = useChart();\r\n const chartHeight = height - padding.top - padding.bottom;\r\n\r\n return (\r\n <g>\r\n {Array.from({ length: ticks + 1 }).map((_, i) => {\r\n const value = (maxValue / ticks) * i;\r\n const y = height - padding.bottom - (chartHeight / ticks) * i;\r\n \r\n return (\r\n <text\r\n key={i}\r\n x={padding.left - 10}\r\n y={y}\r\n textAnchor=\"end\"\r\n dominantBaseline=\"middle\"\r\n className=\"fill-gray-400 dark:fill-white/40 text-xs font-medium\"\r\n >\r\n {format(Math.round(value))}\r\n </text>\r\n );\r\n })}\r\n </g>\r\n );\r\n}\r\n","import React, { createContext, useContext, useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface TabsContextValue {\r\n value: string;\r\n onValueChange: (value: string) => void;\r\n}\r\n\r\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\r\n\r\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\r\n defaultValue: string;\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function Tabs({\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n className,\r\n children,\r\n ...props\r\n}: TabsProps) {\r\n const [internalValue, setInternalValue] = useState(defaultValue);\r\n\r\n const handleValueChange = (newValue: string) => {\r\n if (value === undefined) {\r\n setInternalValue(newValue);\r\n }\r\n onValueChange?.(newValue);\r\n };\r\n\r\n const currentValue = value !== undefined ? value : internalValue;\r\n\r\n return (\r\n <TabsContext.Provider value={{ value: currentValue, onValueChange: handleValueChange }}>\r\n <div className={cn(\"w-full\", className)} {...props}>\r\n {children}\r\n </div>\r\n </TabsContext.Provider>\r\n );\r\n}\r\n\r\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabsList({ className, children, ...props }: TabsListProps) {\r\n return (\r\n <div\r\n role=\"tablist\"\r\n className={cn(\r\n \"inline-flex h-10 items-center justify-center rounded-2xl bg-gray-100 p-1 text-gray-500 dark:bg-white/[0.03] dark:text-white/60\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabsTrigger({ className, value, children, ...props }: TabsTriggerProps) {\r\n const context = useContext(TabsContext);\r\n if (!context) throw new Error('TabsTrigger must be used within Tabs');\r\n\r\n const isActive = context.value === value;\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={isActive}\r\n aria-controls={`tabs-content-${value}`}\r\n id={`tabs-trigger-${value}`}\r\n onClick={() => context.onValueChange(value)}\r\n className={cn(\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-2xl px-3 py-1.5 text-sm font-medium ring-offset-white transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-zinc-950 dark:focus-visible:ring-white/20\",\r\n isActive\r\n ? \"bg-white text-gray-900 shadow-sm dark:bg-white/[0.06] dark:text-white dark:backdrop-blur-sm\"\r\n : \"hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-white/[0.03] dark:hover:text-white\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n value: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabsContent({ className, value, children, ...props }: TabsContentProps) {\r\n const context = useContext(TabsContext);\r\n if (!context) throw new Error('TabsContent must be used within Tabs');\r\n\r\n if (context.value !== value) return null;\r\n\r\n return (\r\n <div\r\n role=\"tabpanel\"\r\n id={`tabs-content-${value}`}\r\n aria-labelledby={`tabs-trigger-${value}`}\r\n tabIndex={0}\r\n className={cn(\r\n \"mt-2 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20 focus-visible:ring-offset-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <aside\r\n ref={ref}\r\n className={cn(\r\n \"flex h-full w-64 flex-col border-r backdrop-blur-xl transition-colors duration-200\",\r\n \"border-gray-200 bg-white/50\",\r\n \"dark:border-white/10 dark:bg-black/20\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </aside>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\r\n\r\nexport const SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex h-16 items-center px-6 border-b border-gray-200 dark:border-white/5\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarContentProps extends React.HTMLAttributes<HTMLDivElement> {}\r\n\r\nexport const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex-1 overflow-y-auto py-4 px-3 space-y-1\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\r\n\r\nexport const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"p-4 border-t border-gray-200 dark:border-white/5\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n active?: boolean;\r\n icon?: React.ReactNode;\r\n badge?: React.ReactNode;\r\n}\r\n\r\nexport const SidebarItem = React.forwardRef<HTMLButtonElement, SidebarItemProps>(\r\n ({ className, children, active, icon, badge, ...props }, ref) => {\r\n return (\r\n <button\r\n ref={ref}\r\n className={cn(\r\n \"flex w-full items-center gap-3 rounded-2xl px-3 py-2 text-sm font-medium transition-colors\",\r\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-white/[0.03] dark:hover:text-white\",\r\n active \r\n ? \"bg-gray-200 text-gray-900 dark:bg-white/[0.06] dark:text-white\" \r\n : \"text-gray-600 dark:text-white/60\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {icon && <span className={cn(\"flex h-4 w-4 items-center justify-center\", active ? \"text-gray-900 dark:text-white\" : \"text-gray-500 dark:text-white/60\")}>{icon}</span>}\r\n <span className=\"flex-1 text-left\">{children}</span>\r\n {badge && (\r\n <span className=\"flex h-5 min-w-5 items-center justify-center rounded-full bg-gray-200 dark:bg-white/[0.06] px-1.5 text-[10px] font-bold text-gray-900 dark:text-white\">\r\n {badge}\r\n </span>\r\n )}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nexport interface SidebarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n label?: string;\r\n}\r\n\r\nexport const SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(\r\n ({ className, children, label, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn(\"mb-6\", className)} {...props}>\r\n {label && (\r\n <div className=\"mb-2 px-3 text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-white/40\">\r\n {label}\r\n </div>\r\n )}\r\n <div className=\"space-y-1\">{children}</div>\r\n </div>\r\n );\r\n }\r\n);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Button } from '../button/Button';\r\nimport { Menu, X } from 'lucide-react';\r\n\r\ninterface NavbarProps {\r\n logo?: React.ReactNode;\r\n links?: { label: string; href: string }[];\r\n actions?: React.ReactNode;\r\n className?: string;\r\n maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\r\n}\r\n\r\nconst maxWidthClasses = {\r\n sm: 'max-w-screen-sm',\r\n md: 'max-w-screen-md',\r\n lg: 'max-w-screen-lg',\r\n xl: 'max-w-screen-xl',\r\n '2xl': 'max-w-screen-2xl',\r\n full: 'max-w-full',\r\n};\r\n\r\nexport function Navbar({\r\n logo,\r\n links = [],\r\n actions,\r\n className,\r\n maxWidth = 'xl',\r\n}: NavbarProps) {\r\n const [isScrolled, setIsScrolled] = useState(false);\r\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n setIsScrolled(window.scrollY > 20);\r\n };\r\n window.addEventListener('scroll', handleScroll);\r\n return () => window.removeEventListener('scroll', handleScroll);\r\n }, []);\r\n\r\n return (\r\n <nav\r\n className={cn(\r\n 'fixed top-0 left-0 right-0 z-50 transition-all duration-300 px-4 py-4',\r\n isScrolled ? 'py-3' : 'py-6',\r\n className\r\n )}\r\n >\r\n <div className={cn('mx-auto transition-all duration-300', maxWidthClasses[maxWidth])}>\r\n <Surface\r\n className={cn(\r\n 'flex items-center justify-between px-6 py-3 transition-all duration-300',\r\n isScrolled \r\n ? 'rounded-2xl border-white/10 bg-white/70 dark:bg-zinc-900/70 backdrop-blur-xl shadow-lg' \r\n : 'rounded-2xl border-transparent bg-transparent dark:bg-transparent backdrop-blur-none shadow-none'\r\n )}\r\n >\r\n {/* Logo */}\r\n <div className=\"flex items-center gap-2\">\r\n {logo || <span className=\"text-xl font-bold tracking-tighter\">PIXON</span>}\r\n </div>\r\n\r\n {/* Desktop Links */}\r\n <div className=\"hidden md:flex items-center gap-8\">\r\n {links.map((link) => (\r\n <a\r\n key={link.label}\r\n href={link.href}\r\n className=\"text-sm font-medium text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white transition-colors\"\r\n >\r\n {link.label}\r\n </a>\r\n ))}\r\n </div>\r\n\r\n {/* Actions & Mobile Toggle */}\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"hidden md:flex items-center gap-2\">\r\n {actions}\r\n </div>\r\n \r\n <button\r\n className=\"md:hidden p-2 text-zinc-600 dark:text-zinc-400 hover:bg-zinc-100 dark:hover:bg-white/[0.03] rounded-2xl transition-colors\"\r\n onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\r\n >\r\n {isMobileMenuOpen ? <X size={20} /> : <Menu size={20} />}\r\n </button>\r\n </div>\r\n </Surface>\r\n\r\n {/* Mobile Menu */}\r\n <div\r\n className={cn(\r\n 'md:hidden absolute top-full left-4 right-4 mt-2 transition-all duration-300 origin-top',\r\n isMobileMenuOpen \r\n ? 'opacity-100 scale-100 translate-y-0' \r\n : 'opacity-0 scale-95 -translate-y-4 pointer-events-none'\r\n )}\r\n >\r\n <Surface className=\"p-4 flex flex-col gap-4 shadow-2xl border-white/10 bg-white/90 dark:bg-zinc-900/90 backdrop-blur-2xl\">\r\n {links.map((link) => (\r\n <a\r\n key={link.label}\r\n href={link.href}\r\n className=\"text-base font-medium px-4 py-2 rounded-2xl hover:bg-zinc-100 dark:hover:bg-white/[0.03] text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white transition-all\"\r\n onClick={() => setIsMobileMenuOpen(false)}\r\n >\r\n {link.label}\r\n </a>\r\n ))}\r\n <div className=\"pt-4 border-t border-zinc-200 dark:border-white/10 flex flex-col gap-2\">\r\n {actions}\r\n </div>\r\n </Surface>\r\n </div>\r\n </div>\r\n </nav>\r\n );\r\n}\r\n","import React, { createContext, useContext, useState, useRef, useEffect, useLayoutEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';import { useFloating } from '../../hooks/useFloating';\r\ninterface DropdownMenuContextValue {\r\n isOpen: boolean;\r\n setIsOpen: (isOpen: boolean) => void;\r\n triggerRef: React.RefObject<HTMLElement>;\r\n}\r\n\r\nconst DropdownMenuContext = createContext<DropdownMenuContextValue | undefined>(undefined);\r\n\r\nexport interface DropdownMenuProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function DropdownMenu({ children }: DropdownMenuProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const triggerRef = useRef<HTMLElement>(null);\r\n\r\n return (\r\n <DropdownMenuContext.Provider value={{ isOpen, setIsOpen, triggerRef }}>\r\n <div className=\"relative inline-block text-left\">\r\n {children}\r\n </div>\r\n </DropdownMenuContext.Provider>\r\n );\r\n}\r\n\r\nexport interface DropdownMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function DropdownMenuTrigger({ className, children, ...props }: DropdownMenuTriggerProps) {\r\n const context = useContext(DropdownMenuContext);\r\n if (!context) throw new Error('DropdownMenuTrigger must be used within DropdownMenu');\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n context.setIsOpen(!context.isOpen);\r\n props.onClick?.(e as any);\r\n };\r\n\r\n return (\r\n <button\r\n ref={context.triggerRef as any}\r\n type=\"button\"\r\n aria-haspopup=\"menu\"\r\n aria-expanded={context.isOpen ? \"true\" : \"false\"}\r\n onClick={handleClick}\r\n className={cn(\"inline-flex items-center justify-center\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport interface DropdownMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n align?: 'start' | 'end' | 'center';\r\n side?: 'top' | 'bottom' | 'left' | 'right';\r\n}\r\n\r\nexport function DropdownMenuContent({ className, children, align = 'start', side = 'bottom', ...props }: DropdownMenuContentProps) {\r\n const context = useContext(DropdownMenuContext);\r\n if (!context) throw new Error('DropdownMenuContent must be used within DropdownMenu');\r\n\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const { position, isPositioned } = useFloating(context.triggerRef, contentRef, {\r\n side,\r\n align,\r\n isOpen: context.isOpen,\r\n });\r\n\r\n useEffect(() => {\r\n if (context.isOpen) {\r\n const handleOutsideClick = (e: MouseEvent) => {\r\n if (\r\n contentRef.current &&\r\n !contentRef.current.contains(e.target as Node) &&\r\n context.triggerRef.current &&\r\n !context.triggerRef.current.contains(e.target as Node)\r\n ) {\r\n context.setIsOpen(false);\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n context.setIsOpen(false);\r\n context.triggerRef.current?.focus();\r\n }\r\n \r\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n const items = contentRef.current?.querySelectorAll('[role=\"menuitem\"]') as NodeListOf<HTMLElement>;\r\n if (!items.length) return;\r\n \r\n const currentIndex = Array.from(items).indexOf(document.activeElement as HTMLElement);\r\n let nextIndex = 0;\r\n \r\n if (e.key === 'ArrowDown') {\r\n nextIndex = (currentIndex + 1) % items.length;\r\n } else {\r\n nextIndex = (currentIndex - 1 + items.length) % items.length;\r\n }\r\n \r\n items[nextIndex]?.focus();\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleOutsideClick);\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n document.removeEventListener('mousedown', handleOutsideClick);\r\n document.removeEventListener('keydown', handleKeyDown);\r\n };\r\n }\r\n }, [context.isOpen, context.setIsOpen, context.triggerRef]);\r\n\r\n if (!context.isOpen) return null;\r\n\r\n const getTransformOrigin = () => {\r\n if (side === 'bottom') {\r\n if (align === 'start') return 'top left';\r\n if (align === 'end') return 'top right';\r\n return 'top center';\r\n }\r\n if (side === 'top') {\r\n if (align === 'start') return 'bottom left';\r\n if (align === 'end') return 'bottom right';\r\n return 'bottom center';\r\n }\r\n if (side === 'left') {\r\n if (align === 'start') return 'top right';\r\n if (align === 'end') return 'bottom right';\r\n return 'center right';\r\n }\r\n if (side === 'right') {\r\n if (align === 'start') return 'top left';\r\n if (align === 'end') return 'bottom left';\r\n return 'center left';\r\n }\r\n return 'center center';\r\n };\r\n\r\n return createPortal(\r\n <div\r\n ref={contentRef}\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n style={{ \r\n top: position.top, \r\n left: position.left,\r\n transformOrigin: getTransformOrigin(),\r\n }}\r\n className={cn(\r\n \"fixed z-[110] min-w-[8rem] overflow-hidden rounded-2xl border border-gray-200 dark:border-white/10 bg-white/80 dark:bg-white/[0.03] backdrop-blur-xl p-1 shadow-md duration-100\",\r\n isPositioned ? \"animate-in fade-in zoom-in-95 opacity-100\" : \"opacity-0\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>,\r\n document.body\r\n );\r\n}\r\n\r\nexport interface DropdownMenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function DropdownMenuItem({ className, children, ...props }: DropdownMenuItemProps) {\r\n const context = useContext(DropdownMenuContext);\r\n \r\n const handleClick = (e: React.MouseEvent) => {\r\n context?.setIsOpen(false);\r\n props.onClick?.(e as any);\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n role=\"menuitem\"\r\n onClick={handleClick}\r\n className={cn(\r\n \"relative flex w-full cursor-pointer select-none items-center rounded-2xl px-3 py-2 text-sm outline-none transition-colors\",\r\n \"text-gray-700 dark:text-white/80\",\r\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-white/[0.06] dark:hover:text-white\",\r\n \"focus:bg-gray-100 focus:text-gray-900 dark:focus:bg-white/[0.06] dark:focus:text-white\",\r\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\nexport function DropdownMenuLabel({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"px-2 py-1.5 text-sm font-semibold text-gray-900 dark:text-white\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DropdownMenuSeparator({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"-mx-1 my-1 h-px bg-gray-200 dark:bg-white/[0.03]\", className)} {...props} />\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Settings, LogOut, User } from 'lucide-react';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { \r\n DropdownMenu, \r\n DropdownMenuTrigger, \r\n DropdownMenuContent, \r\n DropdownMenuItem, \r\n DropdownMenuSeparator,\r\n DropdownMenuLabel\r\n} from '../overlay/DropdownMenu';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface UserMenuProps {\r\n name: string;\r\n description?: string;\r\n avatarSrc?: string;\r\n avatarFallback?: string;\r\n className?: string;\r\n side?: 'top' | 'bottom' | 'left' | 'right';\r\n align?: 'start' | 'end' | 'center';\r\n}\r\n\r\nexport function UserMenu({ \r\n name, \r\n description, \r\n avatarSrc, \r\n avatarFallback,\r\n className,\r\n side = 'top',\r\n align = 'start'\r\n}: UserMenuProps) {\r\n return (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger className={cn(\"w-full outline-none\", className)}>\r\n <div className=\"group flex w-full items-center gap-3 rounded-2xl border border-gray-200 dark:border-white/5 bg-white dark:bg-white/[0.03] p-3 transition-colors hover:bg-gray-50 dark:hover:bg-white/[0.06]\">\r\n <Avatar src={avatarSrc} fallback={avatarFallback || name.charAt(0)} size=\"sm\" />\r\n <div className=\"flex flex-1 flex-col items-start text-left\">\r\n <span className=\"text-xs font-medium text-gray-900 dark:text-white\">{name}</span>\r\n {description && <span className=\"text-[10px] text-gray-500 dark:text-white/50\">{description}</span>}\r\n </div>\r\n <Settings className=\"h-4 w-4 text-gray-400 dark:text-white/50 transition-colors group-hover:text-gray-900 dark:group-hover:text-white\" />\r\n </div>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent className=\"w-56\" align={align} side={side}>\r\n <DropdownMenuLabel>My Account</DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem>\r\n <User className=\"mr-2 h-4 w-4\" />\r\n <span>Profile</span>\r\n </DropdownMenuItem>\r\n <DropdownMenuItem>\r\n <Settings className=\"mr-2 h-4 w-4\" />\r\n <span>Settings</span>\r\n </DropdownMenuItem>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem className=\"text-rose-400 focus:text-rose-400\">\r\n <LogOut className=\"mr-2 h-4 w-4\" />\r\n <span>Log out</span>\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst Breadcrumb = React.forwardRef<\r\n HTMLElement,\r\n React.ComponentPropsWithoutRef<\"nav\"> & {\r\n separator?: React.ReactNode\r\n }\r\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\r\nBreadcrumb.displayName = \"Breadcrumb\"\r\n\r\nconst BreadcrumbList = React.forwardRef<\r\n HTMLOListElement,\r\n React.ComponentPropsWithoutRef<\"ol\">\r\n>(({ className, ...props }, ref) => (\r\n <ol\r\n ref={ref}\r\n className={cn(\r\n \"flex flex-wrap items-center gap-1.5 break-words text-sm text-gray-500 dark:text-white/50 sm:gap-2.5\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nBreadcrumbList.displayName = \"BreadcrumbList\"\r\n\r\nconst BreadcrumbItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentPropsWithoutRef<\"li\">\r\n>(({ className, ...props }, ref) => (\r\n <li\r\n ref={ref}\r\n className={cn(\"inline-flex items-center gap-1.5\", className)}\r\n {...props}\r\n />\r\n))\r\nBreadcrumbItem.displayName = \"BreadcrumbItem\"\r\n\r\nconst BreadcrumbLink = React.forwardRef<\r\n HTMLAnchorElement,\r\n React.ComponentPropsWithoutRef<\"a\"> & {\r\n asChild?: boolean\r\n }\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <a\r\n ref={ref}\r\n className={cn(\"transition-colors hover:text-gray-900 dark:hover:text-white\", className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nBreadcrumbLink.displayName = \"BreadcrumbLink\"\r\n\r\nconst BreadcrumbPage = React.forwardRef<\r\n HTMLSpanElement,\r\n React.ComponentPropsWithoutRef<\"span\">\r\n>(({ className, ...props }, ref) => (\r\n <span\r\n ref={ref}\r\n role=\"link\"\r\n aria-disabled=\"true\"\r\n aria-current=\"page\"\r\n className={cn(\"font-normal text-gray-900 dark:text-white\", className)}\r\n {...props}\r\n />\r\n))\r\nBreadcrumbPage.displayName = \"BreadcrumbPage\"\r\n\r\nconst BreadcrumbSeparator = ({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"li\">) => (\r\n <li\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"[&>svg]:size-3.5\", className)}\r\n {...props}\r\n >\r\n {children ?? (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </svg>\r\n )}\r\n </li>\r\n)\r\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\"\r\n\r\nconst BreadcrumbEllipsis = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) => (\r\n <span\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\r\n </svg>\r\n <span className=\"sr-only\">More</span>\r\n </span>\r\n)\r\nBreadcrumbEllipsis.displayName = \"BreadcrumbElipssis\"\r\n\r\nexport {\r\n Breadcrumb,\r\n BreadcrumbList,\r\n BreadcrumbItem,\r\n BreadcrumbLink,\r\n BreadcrumbPage,\r\n BreadcrumbSeparator,\r\n BreadcrumbEllipsis,\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SkipToContentProps {\r\n contentId?: string;\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * A component that allows keyboard users to skip navigation and jump to the main content.\r\n * It is hidden by default and becomes visible on focus.\r\n */\r\nexport function SkipToContent({\r\n contentId = 'main-content',\r\n className,\r\n children = 'Skip to content',\r\n}: SkipToContentProps) {\r\n return (\r\n <a\r\n href={`#${contentId}`}\r\n className={cn(\r\n \"sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-purple-600 focus:text-white focus:rounded-xl focus:shadow-2xl focus:outline-none focus:ring-2 focus:ring-white/20 transition-all\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </a>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { PrimaryButton } from '../button/PrimaryButton';\r\n\r\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\r\n <nav\r\n role=\"navigation\"\r\n aria-label=\"pagination\"\r\n className={cn(\"mx-auto flex w-full justify-center\", className)}\r\n {...props}\r\n />\r\n)\r\nPagination.displayName = \"Pagination\"\r\n\r\nconst PaginationContent = React.forwardRef<\r\n HTMLUListElement,\r\n React.ComponentProps<\"ul\">\r\n>(({ className, ...props }, ref) => (\r\n <ul\r\n ref={ref}\r\n className={cn(\"flex flex-row items-center gap-1\", className)}\r\n {...props}\r\n />\r\n))\r\nPaginationContent.displayName = \"PaginationContent\"\r\n\r\nconst PaginationItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentProps<\"li\">\r\n>(({ className, ...props }, ref) => (\r\n <li ref={ref} className={cn(\"\", className)} {...props} />\r\n))\r\nPaginationItem.displayName = \"PaginationItem\"\r\n\r\ntype PaginationLinkProps = {\r\n isActive?: boolean\r\n} & React.ComponentProps<\"a\">\r\n\r\nconst PaginationLink = ({\r\n className,\r\n isActive,\r\n ...props\r\n}: PaginationLinkProps) => (\r\n <a\r\n aria-current={isActive ? \"page\" : undefined}\r\n className={cn(\r\n \"inline-flex h-9 w-9 items-center justify-center rounded-2xl text-sm font-medium transition-colors\",\r\n \"hover:bg-gray-100 dark:hover:bg-white/[0.03] hover:text-gray-900 dark:hover:text-white\",\r\n isActive ? \"bg-gray-100 text-gray-900 dark:bg-white/[0.06] dark:text-white\" : \"text-gray-500 dark:text-white/60\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nPaginationLink.displayName = \"PaginationLink\"\r\n\r\nconst PaginationPrevious = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) => (\r\n <PaginationLink\r\n aria-label=\"Go to previous page\"\r\n className={cn(\"w-auto gap-1 px-2.5\", className)}\r\n {...props}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <path d=\"m15 18-6-6 6-6\" />\r\n </svg>\r\n <span>Previous</span>\r\n </PaginationLink>\r\n)\r\nPaginationPrevious.displayName = \"PaginationPrevious\"\r\n\r\nconst PaginationNext = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PaginationLink>) => (\r\n <PaginationLink\r\n aria-label=\"Go to next page\"\r\n className={cn(\"w-auto gap-1 px-2.5\", className)}\r\n {...props}\r\n >\r\n <span>Next</span>\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </svg>\r\n </PaginationLink>\r\n)\r\nPaginationNext.displayName = \"PaginationNext\"\r\n\r\nconst PaginationEllipsis = ({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) => (\r\n <span\r\n aria-hidden\r\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\r\n {...props}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"h-4 w-4\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\r\n </svg>\r\n <span className=\"sr-only\">More pages</span>\r\n </span>\r\n)\r\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\r\n\r\nexport {\r\n Pagination,\r\n PaginationContent,\r\n PaginationEllipsis,\r\n PaginationItem,\r\n PaginationLink,\r\n PaginationNext,\r\n PaginationPrevious,\r\n}\r\n","import React from 'react';\r\nimport { Check } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface StepperProps {\r\n steps: { title: string; description?: string }[];\r\n currentStep: number;\r\n className?: string;\r\n onStepClick?: (step: number) => void;\r\n}\r\n\r\nexport const Stepper = ({ steps, currentStep, className, onStepClick }: StepperProps) => {\r\n return (\r\n <div className={cn(\"flex w-full flex-col gap-4 md:flex-row\", className)}>\r\n {steps.map((step, index) => {\r\n const isCompleted = currentStep > index;\r\n const isCurrent = currentStep === index;\r\n const isClickable = !!onStepClick;\r\n\r\n return (\r\n <div \r\n key={index} \r\n className={cn(\r\n \"flex flex-1 flex-col gap-2 md:flex-row md:items-center md:gap-4\",\r\n isClickable && \"cursor-pointer\"\r\n )}\r\n onClick={() => isClickable && onStepClick(index)}\r\n >\r\n <div className=\"flex items-center gap-4 md:flex-col md:gap-2\">\r\n <div className=\"flex items-center\">\r\n <div\r\n className={cn(\r\n \"flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-semibold transition-colors\",\r\n isCompleted\r\n ? \"border-blue-600 bg-blue-600 text-white dark:border-blue-500 dark:bg-blue-500\"\r\n : isCurrent\r\n ? \"border-blue-600 text-blue-600 dark:border-blue-500 dark:text-blue-500\"\r\n : \"border-gray-300 text-gray-500 dark:border-white/20 dark:text-white/40\"\r\n )}\r\n >\r\n {isCompleted ? <Check className=\"h-4 w-4\" /> : index + 1}\r\n </div>\r\n {/* Connector Line (Mobile: Right of circle, Desktop: Right of content) */}\r\n {index < steps.length - 1 && (\r\n <div \r\n className={cn(\r\n \"ml-4 h-px flex-1 bg-gray-200 md:hidden dark:bg-white/[0.03]\",\r\n isCompleted && \"bg-blue-600 dark:bg-blue-500\"\r\n )} \r\n />\r\n )}\r\n </div>\r\n \r\n <div className=\"flex flex-col\">\r\n <span className={cn(\r\n \"text-sm font-medium\",\r\n isCurrent || isCompleted ? \"text-gray-900 dark:text-white\" : \"text-gray-500 dark:text-white/50\"\r\n )}>\r\n {step.title}\r\n </span>\r\n {step.description && (\r\n <span className=\"text-xs text-gray-500 dark:text-white/40 hidden md:block\">\r\n {step.description}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Connector Line (Desktop) */}\r\n {index < steps.length - 1 && (\r\n <div \r\n className={cn(\r\n \"hidden h-px flex-1 bg-gray-200 md:block dark:bg-white/[0.03]\",\r\n isCompleted && \"bg-blue-600 dark:bg-blue-500\"\r\n )} \r\n />\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Modal, ModalHeader, ModalFooter } from './Modal';\r\nimport { Heading } from '../typography/Heading';\r\nimport { Text } from '../typography/Text';\r\nimport { Button } from '../button/Button';\r\nimport { AlertTriangle } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ConfirmDialogProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onConfirm: () => void;\r\n title: string;\r\n description: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n variant?: 'danger' | 'primary';\r\n isLoading?: boolean;\r\n}\r\n\r\n/**\r\n * A specialized modal for confirming destructive or important actions.\r\n */\r\nexport function ConfirmDialog({\r\n isOpen,\r\n onClose,\r\n onConfirm,\r\n title,\r\n description,\r\n confirmText = 'Confirm',\r\n cancelText = 'Cancel',\r\n variant = 'primary',\r\n isLoading = false,\r\n}: ConfirmDialogProps) {\r\n return (\r\n <Modal isOpen={isOpen} onClose={onClose}>\r\n <ModalHeader>\r\n <div className=\"flex items-center gap-3\">\r\n {variant === 'danger' && (\r\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-rose-500/10 text-rose-500\">\r\n <AlertTriangle className=\"h-5 w-5\" />\r\n </div>\r\n )}\r\n <Heading as=\"h3\">{title}</Heading>\r\n </div>\r\n </ModalHeader>\r\n \r\n <div className=\"py-2\">\r\n <Text className=\"text-gray-500 dark:text-white/60\">\r\n {description}\r\n </Text>\r\n </div>\r\n\r\n <ModalFooter>\r\n <Button variant=\"ghost\" onClick={onClose} disabled={isLoading}>\r\n {cancelText}\r\n </Button>\r\n <Button \r\n variant={variant === 'danger' ? 'danger' : 'primary'} \r\n onClick={onConfirm}\r\n isLoading={isLoading}\r\n >\r\n {confirmText}\r\n </Button>\r\n </ModalFooter>\r\n </Modal>\r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { Heading } from '../typography/Heading';\r\n\r\nexport interface DialogProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Dialog({ isOpen, onClose, children, className }: DialogProps) {\r\n const dialogRef = useRef<HTMLDialogElement>(null);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n if (isOpen) {\r\n if (!dialog.open) {\r\n dialog.showModal();\r\n }\r\n } else {\r\n if (dialog.open) {\r\n dialog.close();\r\n }\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n\r\n const handleCancel = (e: Event) => {\r\n e.preventDefault();\r\n onClose();\r\n };\r\n\r\n dialog.addEventListener('cancel', handleCancel);\r\n return () => dialog.removeEventListener('cancel', handleCancel);\r\n }, [onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === dialogRef.current) {\r\n onClose();\r\n }\r\n };\r\n\r\n return createPortal(\r\n <dialog\r\n ref={dialogRef}\r\n onClick={handleBackdropClick}\r\n className={cn(\r\n \"fixed inset-0 z-[100] bg-transparent p-0 backdrop:bg-black/60 backdrop:backdrop-blur-sm\",\r\n \"open:animate-in open:fade-in open:duration-200\",\r\n className\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"relative w-full max-w-lg scale-100 gap-4 border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A]/90 p-6 shadow-2xl backdrop-blur-xl transition-all sm:rounded-2xl\",\r\n \"animate-in fade-in zoom-in-95 duration-200 slide-in-from-bottom-2\"\r\n )}\r\n >\r\n {children}\r\n <button\r\n onClick={onClose}\r\n 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-gray-400 dark:focus:ring-white/20 disabled:pointer-events-none\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-gray-900 dark:text-white\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n <span className=\"sr-only\">Close</span>\r\n </button>\r\n </div>\r\n </dialog>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function DialogHeader({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left mb-4\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DialogFooter({ className, children }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DialogTitle({ className, children }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <Heading as=\"h2\" className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}>\r\n {children}\r\n </Heading>\r\n );\r\n}\r\n\r\nexport function DialogDescription({ className, children }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <p className={cn(\"text-sm text-gray-500 dark:text-gray-400\", className)}>\r\n {children}\r\n </p>\r\n );\r\n}\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { Heading } from '../typography/Heading';\r\nimport { Text } from '../typography/Text';\r\n\r\nexport interface DrawerProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n position?: 'left' | 'right' | 'bottom';\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Drawer({ \r\n isOpen, \r\n onClose, \r\n position = 'right', \r\n children, \r\n className \r\n}: DrawerProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [shouldRender, setShouldRender] = useState(false);\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setShouldRender(true);\r\n // Small delay to allow render before animating in\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n });\r\n });\r\n document.body.style.overflow = 'hidden';\r\n } else {\r\n setIsVisible(false);\r\n const timer = setTimeout(() => {\r\n setShouldRender(false);\r\n document.body.style.overflow = 'unset';\r\n }, 300); // Match transition duration\r\n return () => clearTimeout(timer);\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent) => {\r\n if (e.target === overlayRef.current) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (!shouldRender) return null;\r\n\r\n const positionClasses = {\r\n left: \"left-0 h-full w-3/4 max-w-sm border-r\",\r\n right: \"right-0 h-full w-3/4 max-w-sm border-l\",\r\n bottom: \"bottom-0 w-full h-auto max-h-[90vh] border-t rounded-t-2xl\",\r\n };\r\n\r\n const translateClasses = {\r\n left: isVisible ? \"translate-x-0\" : \"-translate-x-full\",\r\n right: isVisible ? \"translate-x-0\" : \"translate-x-full\",\r\n bottom: isVisible ? \"translate-y-0\" : \"translate-y-full\",\r\n };\r\n\r\n return createPortal(\r\n <div\r\n ref={overlayRef}\r\n onClick={handleBackdropClick}\r\n className={cn(\r\n \"fixed inset-0 z-[100] flex bg-black/60 backdrop-blur-sm transition-opacity duration-300\",\r\n isVisible ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n <div\r\n className={cn(\r\n \"absolute bg-white dark:bg-[#0A0A0A] border-gray-200 dark:border-white/10 p-6 shadow-2xl transition-transform duration-300 ease-in-out\",\r\n positionClasses[position],\r\n translateClasses[position],\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n}\r\n\r\nexport function DrawerHeader({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left mb-6\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DrawerFooter({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-auto pt-6\", className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport function DrawerTitle({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <Heading as=\"h2\" className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)} {...props}>\r\n {children}\r\n </Heading>\r\n );\r\n}\r\n\r\nexport function DrawerDescription({ className, children, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <Text variant=\"muted\" className={cn(\"text-sm\", className)} {...props}>\r\n {children}\r\n </Text>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { cn } from '../../utils/cn';\r\nimport { useFloating } from '../../hooks/useFloating';\r\n\r\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\r\n\r\nexport interface TooltipProps {\r\n content: React.ReactNode;\r\n children: React.ReactNode;\r\n position?: TooltipPosition;\r\n delay?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Tooltip({ \r\n content, \r\n children, \r\n position = 'top', \r\n delay = 200,\r\n className \r\n}: TooltipProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n\r\n const { position: floatingPosition, isPositioned } = useFloating(triggerRef, contentRef, {\r\n side: position,\r\n align: 'center',\r\n sideOffset: 8,\r\n isOpen: isVisible,\r\n });\r\n\r\n const showTooltip = () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n timeoutRef.current = setTimeout(() => setIsVisible(true), delay);\r\n };\r\n\r\n const hideTooltip = () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n setIsVisible(false);\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n };\r\n }, []);\r\n\r\n const animationClasses = {\r\n top: 'slide-in-from-bottom-2',\r\n bottom: 'slide-in-from-top-2',\r\n left: 'slide-in-from-right-2',\r\n right: 'slide-in-from-left-2',\r\n };\r\n\r\n return (\r\n <div \r\n ref={triggerRef}\r\n className=\"relative inline-flex\" \r\n onMouseEnter={showTooltip} \r\n onMouseLeave={hideTooltip}\r\n onFocus={showTooltip}\r\n onBlur={hideTooltip}\r\n >\r\n {children}\r\n {isVisible && createPortal(\r\n <div\r\n ref={contentRef}\r\n role=\"tooltip\"\r\n style={{\r\n top: floatingPosition.top,\r\n left: floatingPosition.left,\r\n }}\r\n className={cn(\r\n \"fixed z-[120] min-w-max max-w-xs rounded-2xl border border-gray-200 dark:border-white/10 bg-white dark:bg-[#0A0A0A]/90 px-3 py-1.5 text-xs text-gray-900 dark:text-white shadow-xl backdrop-blur-md\",\r\n \"duration-200\",\r\n isPositioned ? \"animate-in fade-in opacity-100\" : \"opacity-0\",\r\n animationClasses[position],\r\n className\r\n )}\r\n >\r\n {content}\r\n </div>,\r\n document.body\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\r\n}\r\n\r\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\r\n ({ className, size = 'lg', ...props }, ref) => {\r\n const sizes = {\r\n sm: 'max-w-screen-sm',\r\n md: 'max-w-screen-md',\r\n lg: 'max-w-screen-lg',\r\n xl: 'max-w-screen-xl',\r\n full: 'max-w-full',\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn('mx-auto w-full px-4', sizes[size], className)}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nContainer.displayName = 'Container';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\r\n direction?: 'row' | 'col' | 'row-reverse' | 'col-reverse';\r\n gap?: number | string;\r\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\r\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\r\n wrap?: boolean;\r\n}\r\n\r\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\r\n ({ className, direction = 'col', gap = 4, align, justify, wrap, style, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'flex',\r\n {\r\n 'flex-row': direction === 'row',\r\n 'flex-col': direction === 'col',\r\n 'flex-row-reverse': direction === 'row-reverse',\r\n 'flex-col-reverse': direction === 'col-reverse',\r\n 'flex-wrap': wrap,\r\n 'items-start': align === 'start',\r\n 'items-end': align === 'end',\r\n 'items-center': align === 'center',\r\n 'items-baseline': align === 'baseline',\r\n 'items-stretch': align === 'stretch',\r\n 'justify-start': justify === 'start',\r\n 'justify-end': justify === 'end',\r\n 'justify-center': justify === 'center',\r\n 'justify-between': justify === 'between',\r\n 'justify-around': justify === 'around',\r\n 'justify-evenly': justify === 'evenly',\r\n },\r\n className\r\n )}\r\n style={{\r\n gap: typeof gap === 'number' ? `${gap * 0.25}rem` : gap,\r\n ...style\r\n }}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nStack.displayName = 'Stack';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\r\n cols?: number;\r\n sm?: number;\r\n md?: number;\r\n lg?: number;\r\n xl?: number;\r\n gap?: number | string;\r\n}\r\n\r\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\r\n ({ className, cols = 1, sm, md, lg, xl, gap = 4, style, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'grid',\r\n sm && `sm:grid-cols-${sm}`,\r\n md && `md:grid-cols-${md}`,\r\n lg && `lg:grid-cols-${lg}`,\r\n xl && `xl:grid-cols-${xl}`,\r\n className\r\n )}\r\n style={{\r\n gridTemplateColumns: cols ? `repeat(${cols}, minmax(0, 1fr))` : undefined,\r\n gap: typeof gap === 'number' ? `${gap * 0.25}rem` : gap,\r\n ...style\r\n }}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nGrid.displayName = 'Grid';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface BackgroundProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * The pattern variant to display\r\n * @default 'none'\r\n */\r\n variant?: 'dots' | 'grid' | 'mesh' | 'gradient' | 'beams' | 'none';\r\n /**\r\n * Add a subtle noise/grain texture\r\n * @default false\r\n */\r\n noise?: boolean;\r\n /**\r\n * The color of the pattern (CSS color or variable)\r\n * @default 'rgba(255,255,255,0.08)'\r\n */\r\n patternColor?: string;\r\n /**\r\n * The size of the pattern (spacing between dots/lines)\r\n * @default 24\r\n */\r\n size?: number;\r\n /**\r\n * Apply a radial mask to fade the edges\r\n * @default 'none'\r\n */\r\n mask?: 'fade' | 'none';\r\n /**\r\n * Enable subtle animations for mesh or gradient variants\r\n * @default false\r\n */\r\n animate?: boolean;\r\n /**\r\n * Make the background follow the mouse (requires relative parent)\r\n * @default false\r\n */\r\n followMouse?: boolean;\r\n /**\r\n * The background color of the container. \r\n * Can be a Tailwind class (e.g., 'bg-zinc-950') or a CSS color.\r\n */\r\n bgColor?: string;\r\n}\r\n\r\nexport const Background = React.forwardRef<HTMLDivElement, BackgroundProps>(\r\n ({ \r\n variant = 'none', \r\n noise = false,\r\n patternColor, \r\n size = 24, \r\n mask = 'none', \r\n animate = false,\r\n followMouse = false,\r\n bgColor,\r\n className, \r\n children,\r\n style,\r\n ...props \r\n }, ref) => {\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n\r\n React.useEffect(() => {\r\n if (!followMouse) return;\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n const rect = el.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n el.style.setProperty('--mouse-x', `${x}px`);\r\n el.style.setProperty('--mouse-y', `${y}px`);\r\n };\r\n\r\n window.addEventListener('mousemove', handleMouseMove);\r\n return () => window.removeEventListener('mousemove', handleMouseMove);\r\n }, [followMouse]);\r\n \r\n const getBackgroundStyle = (): React.CSSProperties => {\r\n const baseStyle: React.CSSProperties = {};\r\n \r\n // Use CSS variables for ultra-performance (no React re-renders)\r\n const effectiveColor = patternColor || 'var(--pattern-color, rgba(255,255,255,0.08))';\r\n\r\n if (variant === 'dots') {\r\n return {\r\n ...baseStyle,\r\n backgroundImage: `radial-gradient(${effectiveColor} 1px, transparent 1px)`,\r\n backgroundSize: `${size}px ${size}px`,\r\n transform: followMouse ? 'translate3d(calc((var(--mouse-x, 0) - 24px) / 40), calc((var(--mouse-y, 0) - 24px) / 40), 0)' : undefined,\r\n };\r\n }\r\n if (variant === 'grid') {\r\n return {\r\n ...baseStyle,\r\n backgroundImage: `\r\n linear-gradient(to right, ${effectiveColor} 1px, transparent 1px),\r\n linear-gradient(to bottom, ${effectiveColor} 1px, transparent 1px)\r\n `,\r\n backgroundSize: `${size}px ${size}px`,\r\n transform: followMouse ? 'translate3d(calc((var(--mouse-x, 0) - 24px) / 40), calc((var(--mouse-y, 0) - 24px) / 40), 0)' : undefined,\r\n };\r\n }\r\n if (variant === 'gradient') {\r\n return {\r\n ...baseStyle,\r\n background: followMouse \r\n ? `radial-gradient(circle at var(--mouse-x, center) var(--mouse-y, center), ${effectiveColor}, transparent)`\r\n : `radial-gradient(circle at center, ${effectiveColor}, transparent)`,\r\n };\r\n }\r\n if (variant === 'beams') {\r\n return {\r\n ...baseStyle,\r\n background: `radial-gradient(60% 40% at 50% 0%, ${effectiveColor} 0%, transparent 100%)`,\r\n };\r\n }\r\n return baseStyle;\r\n };\r\n\r\n const maskStyle: React.CSSProperties = mask === 'fade' ? {\r\n maskImage: 'radial-gradient(ellipse at center, black, transparent 90%)',\r\n WebkitMaskImage: 'radial-gradient(ellipse at center, black, transparent 90%)',\r\n } : {};\r\n\r\n return (\r\n <div\r\n ref={(node) => {\r\n if (node) {\r\n (containerRef as React.MutableRefObject<HTMLDivElement>).current = node;\r\n }\r\n if (typeof ref === 'function') ref(node);\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\r\n }}\r\n className={cn(\r\n 'absolute inset-0 overflow-hidden pointer-events-none transition-transform duration-300 ease-out',\r\n 'z-0',\r\n '[--pattern-color:rgba(0,0,0,0.05)] dark:[--pattern-color:rgba(255,255,255,0.08)]',\r\n bgColor?.startsWith('bg-') ? bgColor : '',\r\n className\r\n )}\r\n style={{ \r\n ...getBackgroundStyle(), \r\n ...maskStyle, \r\n ...style,\r\n backgroundColor: bgColor && !bgColor.startsWith('bg-') ? bgColor : undefined \r\n }}\r\n {...props}\r\n >\r\n {noise && (\r\n <div \r\n className=\"absolute inset-0 opacity-[0.03] pointer-events-none brightness-100 contrast-150\" \r\n style={{ backgroundImage: `url(\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E\")` }} \r\n />\r\n )}\r\n\r\n {variant === 'beams' && (\r\n <div className=\"absolute inset-0 overflow-hidden\">\r\n <div className=\"absolute top-0 left-1/4 w-px h-full bg-gradient-to-b from-transparent via-white/10 to-transparent\" />\r\n <div className=\"absolute top-0 right-1/4 w-px h-full bg-gradient-to-b from-transparent via-white/10 to-transparent\" />\r\n </div>\r\n )}\r\n\r\n {variant === 'mesh' && (\r\n <div className={cn(\r\n \"absolute inset-0 opacity-30 blur-[100px]\",\r\n animate && \"animate-pulse\"\r\n )}>\r\n <div className=\"absolute top-[-10%] left-[-10%] w-[50%] h-[50%] rounded-full bg-blue-500/20\" />\r\n <div className=\"absolute bottom-[-10%] right-[-10%] w-[50%] h-[50%] rounded-full bg-purple-500/20\" />\r\n <div className=\"absolute top-[20%] right-[10%] w-[40%] h-[40%] rounded-full bg-indigo-500/10\" />\r\n </div>\r\n )}\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nBackground.displayName = 'Background';\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface SpotlightProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n size?: number;\r\n color?: string;\r\n}\r\n\r\nexport const Spotlight = ({ \r\n children, \r\n className, \r\n size = 300, \r\n color = \"rgba(255, 255, 255, 0.1)\",\r\n ...props \r\n}: SpotlightProps) => {\r\n const divRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\r\n const el = divRef.current;\r\n if (!el) return;\r\n\r\n const rect = el.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n el.style.setProperty('--mouse-x', `${x}px`);\r\n el.style.setProperty('--mouse-y', `${y}px`);\r\n };\r\n\r\n const handleMouseEnter = () => {\r\n divRef.current?.style.setProperty('--opacity', '1');\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n divRef.current?.style.setProperty('--opacity', '0');\r\n };\r\n\r\n return (\r\n <div\r\n ref={divRef}\r\n onMouseMove={handleMouseMove}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n className={cn(\r\n \"relative overflow-hidden rounded-2xl border border-gray-200 bg-white dark:border-white/10 dark:bg-black\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className=\"pointer-events-none absolute -inset-px transition-opacity duration-300\"\r\n style={{\r\n opacity: 'var(--opacity, 0)',\r\n background: `radial-gradient(${size}px circle at var(--mouse-x, center) var(--mouse-y, center), ${color}, transparent 80%)`,\r\n }}\r\n />\r\n <div className=\"relative h-full\">{children}</div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Sparkles, Paperclip, ArrowUp, Square, Mic, X, File } from 'lucide-react';\r\nimport { Button } from '../button/Button';\r\n\r\nconst aiPromptInputVariants = cva(\r\n \"relative flex w-full flex-col rounded-2xl border transition-all duration-200 focus-within:ring-4\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-white border-gray-200 shadow-sm focus-within:border-purple-500/50 focus-within:ring-purple-500/10 dark:bg-white/[0.03] dark:border-white/10 dark:shadow-none\",\r\n ghost: \"bg-transparent border-transparent shadow-none focus-within:bg-white/50 dark:focus-within:bg-white/5\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface Attachment {\r\n id: string;\r\n name: string;\r\n type?: string;\r\n url?: string;\r\n}\r\n\r\nexport interface AIPromptInputProps \r\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'onSubmit'>,\r\n VariantProps<typeof aiPromptInputVariants> {\r\n /** Callback fired when the user submits the prompt (Enter or Click) */\r\n onSubmit?: (value: string) => void;\r\n /** Whether the AI is currently generating a response */\r\n isGenerating?: boolean;\r\n /** Callback fired when the attach button is clicked. If onFilesSelected is provided, this is ignored. */\r\n onAttach?: () => void;\r\n /** Callback fired when files are selected via the built-in file picker */\r\n onFilesSelected?: (files: FileList) => void;\r\n /** Callback fired when the stop button is clicked */\r\n onStop?: () => void;\r\n /** Callback fired when the microphone button is clicked */\r\n onMic?: () => void;\r\n /** Maximum number of characters allowed */\r\n maxLength?: number;\r\n /** Custom footer content to render below the input */\r\n footer?: React.ReactNode;\r\n /** List of attached files to display */\r\n attachments?: Attachment[];\r\n /** Callback fired when an attachment is removed */\r\n onRemoveAttachment?: (attachmentId: string) => void;\r\n /** Accepted file types for the built-in file picker */\r\n accept?: string;\r\n /** Whether to allow multiple files in the built-in file picker */\r\n multiple?: boolean;\r\n}\r\n\r\n/**\r\n * A specialized input component for AI prompts with support for attachments, \r\n * voice input, and generation control.\r\n */\r\nexport const AIPromptInput = React.forwardRef<HTMLTextAreaElement, AIPromptInputProps>(\r\n ({ \r\n className, \r\n variant,\r\n onSubmit, \r\n isGenerating, \r\n onAttach, \r\n onFilesSelected,\r\n onStop,\r\n onMic,\r\n maxLength,\r\n footer,\r\n attachments,\r\n onRemoveAttachment,\r\n accept,\r\n multiple,\r\n placeholder = \"Ask AI anything...\", \r\n value: controlledValue,\r\n onChange,\r\n ...props \r\n }, ref) => {\r\n const [internalValue, setInternalValue] = useState('');\r\n const isControlled = controlledValue !== undefined;\r\n const value = isControlled ? (controlledValue as string) : internalValue;\r\n \r\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\r\n const fileInputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n const adjustHeight = () => {\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n adjustHeight();\r\n }, [value]);\r\n\r\n const handleInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n const newValue = e.target.value;\r\n if (maxLength && newValue.length > maxLength) return;\r\n \r\n if (!isControlled) {\r\n setInternalValue(newValue);\r\n }\r\n onChange?.(e);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n if (value.trim() && !isGenerating) {\r\n onSubmit?.(value);\r\n if (!isControlled) setInternalValue('');\r\n }\r\n }\r\n props.onKeyDown?.(e);\r\n };\r\n\r\n const handleSubmit = () => {\r\n if (isGenerating && onStop) {\r\n onStop();\r\n } else if (value.trim()) {\r\n onSubmit?.(value);\r\n if (!isControlled) setInternalValue('');\r\n }\r\n };\r\n\r\n const handleAttachClick = () => {\r\n if (onFilesSelected && fileInputRef.current) {\r\n fileInputRef.current.click();\r\n } else {\r\n onAttach?.();\r\n }\r\n };\r\n\r\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n onFilesSelected?.(e.target.files);\r\n }\r\n // Reset value to allow selecting the same file again\r\n if (fileInputRef.current) {\r\n fileInputRef.current.value = '';\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(aiPromptInputVariants({ variant, className }))}>\r\n {/* Hidden File Input */}\r\n <input\r\n type=\"file\"\r\n ref={fileInputRef}\r\n className=\"hidden\"\r\n onChange={handleFileChange}\r\n accept={accept}\r\n multiple={multiple}\r\n />\r\n\r\n {/* Attachments Area */}\r\n {attachments && attachments.length > 0 && (\r\n <div className=\"flex flex-wrap gap-2 px-4 pt-4\">\r\n {attachments.map((att) => (\r\n <div \r\n key={att.id} \r\n className=\"group relative flex items-center gap-2 rounded-xl border border-gray-200 bg-gray-50 px-3 py-1.5 text-sm transition-colors hover:bg-gray-100 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/[0.06]\"\r\n >\r\n <div className=\"flex h-5 w-5 items-center justify-center rounded-lg bg-white dark:bg-white/[0.06]\">\r\n <File className=\"h-3 w-3 text-purple-500\" />\r\n </div>\r\n <span className=\"max-w-[120px] truncate text-gray-700 dark:text-gray-300\">\r\n {att.name}\r\n </span>\r\n <button \r\n onClick={() => onRemoveAttachment?.(att.id)}\r\n className=\"ml-1 rounded-full p-0.5 text-gray-400 opacity-0 transition-all hover:bg-gray-200 hover:text-gray-600 group-hover:opacity-100 dark:hover:bg-white/[0.06] dark:hover:text-white\"\r\n type=\"button\"\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n <textarea\r\n ref={(node) => {\r\n textareaRef.current = node;\r\n if (typeof ref === 'function') ref(node);\r\n else if (ref) (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\r\n }}\r\n value={value}\r\n onChange={handleInput}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n rows={1}\r\n className={cn(\r\n \"w-full resize-none bg-transparent px-4 py-4 text-base outline-none max-h-[200px]\",\r\n \"text-gray-900 placeholder:text-gray-400\",\r\n \"dark:text-white dark:placeholder:text-white/40\"\r\n )}\r\n disabled={isGenerating && !onStop}\r\n {...props}\r\n />\r\n \r\n <div className=\"flex items-center justify-between px-2 pb-2\">\r\n <div className=\"flex items-center gap-1\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"text-gray-400 hover:text-gray-600 dark:text-white/40 dark:hover:text-white\"\r\n onClick={handleAttachClick}\r\n type=\"button\"\r\n title=\"Attach file\"\r\n >\r\n <Paperclip className=\"h-5 w-5\" />\r\n </Button>\r\n \r\n {onMic && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"text-gray-400 hover:text-gray-600 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onMic}\r\n type=\"button\"\r\n title=\"Use microphone\"\r\n >\r\n <Mic className=\"h-5 w-5\" />\r\n </Button>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex items-center gap-3\">\r\n {maxLength && (\r\n <span className=\"text-xs text-gray-400 dark:text-white/30\">\r\n {value.length}/{maxLength}\r\n </span>\r\n )}\r\n\r\n <Button\r\n size=\"icon\"\r\n disabled={(!value.trim() && !isGenerating) || (isGenerating && !onStop)}\r\n onClick={handleSubmit}\r\n className={cn(\r\n \"h-8 w-8 rounded-full transition-all duration-200\",\r\n (value.trim() || isGenerating)\r\n ? \"bg-purple-600 text-white hover:bg-purple-500 shadow-lg shadow-purple-500/25\" \r\n : \"bg-gray-100 text-gray-400 dark:bg-white/[0.06] dark:text-white/20\"\r\n )}\r\n >\r\n {isGenerating ? (\r\n onStop ? (\r\n <Square className=\"h-3 w-3 fill-current\" />\r\n ) : (\r\n <Sparkles className=\"h-4 w-4 animate-pulse\" />\r\n )\r\n ) : (\r\n <ArrowUp className=\"h-4 w-4\" />\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n \r\n {footer && (\r\n <div className=\"border-t border-gray-100 px-4 py-2 text-xs text-gray-400 dark:border-white/5 dark:text-white/30\">\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAIPromptInput.displayName = 'AIPromptInput';\r\n","import React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../../utils/cn';\r\nimport { Copy, RefreshCw, ThumbsUp, ThumbsDown, Sparkles, Share, Edit, ExternalLink } from 'lucide-react';\r\nimport { Button } from '../button/Button';\r\n\r\nconst aiResponseVariants = cva(\r\n \"group relative overflow-hidden rounded-2xl border transition-all duration-200\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-gray-50 border-gray-200 dark:bg-white/[0.02] dark:border-white/10\",\r\n ghost: \"bg-transparent border-transparent\",\r\n outline: \"bg-transparent border-gray-200 dark:border-white/10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface AIResponseSource {\r\n title: string;\r\n url: string;\r\n}\r\n\r\nexport interface AIResponseProps \r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof aiResponseVariants> {\r\n /** The content of the response */\r\n children: React.ReactNode;\r\n /** Callback fired when the copy button is clicked */\r\n onCopy?: () => void;\r\n /** Callback fired when the regenerate button is clicked */\r\n onRegenerate?: () => void;\r\n /** Callback fired when feedback buttons are clicked */\r\n onFeedback?: (type: 'up' | 'down') => void;\r\n /** Callback fired when the share button is clicked */\r\n onShare?: () => void;\r\n /** Callback fired when the edit button is clicked */\r\n onEdit?: () => void;\r\n /** Timestamp string to display (e.g., \"Just now\", \"2 mins ago\") */\r\n timestamp?: string;\r\n /** List of sources/citations to display */\r\n sources?: AIResponseSource[];\r\n /** Name of the model used (e.g., \"GPT-4\") */\r\n model?: string;\r\n /** Usage information (e.g., \"245 tokens\") */\r\n usage?: string | number;\r\n}\r\n\r\n/**\r\n * A container component for displaying AI-generated responses with \r\n * built-in actions for copying, regenerating, and providing feedback.\r\n */\r\nexport const AIResponse = React.forwardRef<HTMLDivElement, AIResponseProps>(\r\n ({ \r\n className, \r\n variant,\r\n children, \r\n onCopy, \r\n onRegenerate, \r\n onFeedback, \r\n onShare, \r\n onEdit,\r\n timestamp,\r\n sources,\r\n model,\r\n usage,\r\n ...props \r\n }, ref) => {\r\n return (\r\n <div \r\n ref={ref}\r\n className={cn(aiResponseVariants({ variant, className }))}\r\n {...props}\r\n >\r\n {/* Header / Icon */}\r\n <div className=\"absolute left-4 top-4 flex items-center gap-3\">\r\n <div className=\"flex h-6 w-6 items-center justify-center rounded-full bg-gradient-to-br from-purple-500 to-blue-500 shadow-lg shadow-purple-500/20\">\r\n <Sparkles className=\"h-3.5 w-3.5 text-white\" />\r\n </div>\r\n {timestamp && (\r\n <span className=\"text-xs font-medium text-gray-400 dark:text-white/30\">\r\n {timestamp}\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"pl-14 pr-4 py-4\">\r\n <div className=\"prose prose-sm dark:prose-invert max-w-none text-gray-700 dark:text-gray-300\">\r\n {children}\r\n </div>\r\n\r\n {/* Sources */}\r\n {sources && sources.length > 0 && (\r\n <div className=\"mt-4 flex flex-wrap gap-2\">\r\n {sources.map((source, index) => (\r\n <a\r\n key={index}\r\n href={source.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className={cn(\r\n \"flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs transition-colors\",\r\n \"border-gray-200 bg-white text-gray-600 hover:bg-gray-50\",\r\n \"dark:border-white/10 dark:bg-white/[0.03] dark:text-white/60 dark:hover:bg-white/[0.06]\"\r\n )}\r\n >\r\n <span className=\"max-w-[150px] truncate\">{source.title}</span>\r\n <ExternalLink className=\"h-3 w-3 opacity-50\" />\r\n </a>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Actions Footer */}\r\n <div className=\"flex items-center justify-between border-t border-gray-200 bg-white/50 px-2 py-1.5 backdrop-blur dark:border-white/5 dark:bg-white/[0.02]\">\r\n \r\n {/* Meta Info (Model/Usage) */}\r\n <div className=\"flex items-center gap-3 px-2 text-[10px] font-medium text-gray-400 dark:text-white/20\">\r\n {model && <span>{model}</span>}\r\n {usage && <span>{usage}</span>}\r\n </div>\r\n\r\n {/* Action Buttons */}\r\n <div className=\"flex items-center gap-1\">\r\n <Button \r\n variant=\"ghost\" \r\n size=\"sm\" \r\n className=\"h-7 px-2 text-xs text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onCopy}\r\n >\r\n <Copy className=\"mr-1.5 h-3.5 w-3.5\" />\r\n Copy\r\n </Button>\r\n\r\n {onShare && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onShare}\r\n title=\"Share\"\r\n >\r\n <Share className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n )}\r\n\r\n {onEdit && (\r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onEdit}\r\n title=\"Edit\"\r\n >\r\n <Edit className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n )}\r\n \r\n <div className=\"mx-1 h-3 w-px bg-gray-200 dark:bg-white/10\" />\r\n \r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={onRegenerate}\r\n title=\"Regenerate\"\r\n >\r\n <RefreshCw className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n \r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={() => onFeedback?.('up')}\r\n title=\"Helpful\"\r\n >\r\n <ThumbsUp className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n \r\n <Button \r\n variant=\"ghost\" \r\n size=\"icon\" \r\n className=\"h-7 w-7 text-gray-500 hover:text-gray-900 dark:text-white/40 dark:hover:text-white\"\r\n onClick={() => onFeedback?.('down')}\r\n title=\"Not helpful\"\r\n >\r\n <ThumbsDown className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nAIResponse.displayName = 'AIResponse';\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ChatLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function ChatLayout({ children, className, ...props }: ChatLayoutProps) {\r\n return (\r\n <div \r\n className={cn(\r\n \"flex h-[800px] w-full overflow-hidden rounded-3xl border border-gray-200 dark:border-white/10 bg-white dark:bg-black/40 backdrop-blur-xl shadow-2xl\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface TypingIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\r\n users?: string[];\r\n variant?: 'default' | 'bubble';\r\n}\r\n\r\nexport function TypingIndicator({ users = [], variant = 'default', className, ...props }: TypingIndicatorProps) {\r\n const text = users.length === 0 \r\n ? 'Someone is typing' \r\n : users.length === 1 \r\n ? `${users[0]} is typing` \r\n : users.length === 2 \r\n ? `${users[0]} and ${users[1]} are typing`\r\n : `${users[0]} and ${users.length - 1} others are typing`;\r\n\r\n if (variant === 'bubble') {\r\n return (\r\n <div className={cn(\"flex items-center gap-1 px-3 py-2 rounded-2xl bg-gray-100 dark:bg-white/[0.03] w-fit\", className)} {...props}>\r\n <div className=\"flex gap-1\">\r\n <span className=\"w-1.5 h-1.5 rounded-full bg-gray-400 animate-bounce [animation-delay:-0.3s]\" />\r\n <span className=\"w-1.5 h-1.5 rounded-full bg-gray-400 animate-bounce [animation-delay:-0.15s]\" />\r\n <span className=\"w-1.5 h-1.5 rounded-full bg-gray-400 animate-bounce\" />\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-2 text-xs text-gray-500 dark:text-white/40 italic\", className)} {...props}>\r\n <div className=\"flex gap-0.5\">\r\n <span className=\"w-1 h-1 rounded-full bg-current animate-bounce [animation-delay:-0.3s]\" />\r\n <span className=\"w-1 h-1 rounded-full bg-current animate-bounce [animation-delay:-0.15s]\" />\r\n <span className=\"w-1 h-1 rounded-full bg-current animate-bounce\" />\r\n </div>\r\n {text}\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Search, Plus, Archive, Pin, BellOff, Trash2, Filter } from 'lucide-react';\r\nimport type { Conversation } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\nimport { TypingIndicator } from './TypingIndicator';\r\n\r\ninterface ChatSidebarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\r\n conversations: Conversation[];\r\n activeId?: string;\r\n onSelect?: (id: string) => void;\r\n onNewChat?: () => void;\r\n onSearch?: (query: string) => void;\r\n onArchive?: (id: string) => void;\r\n onPin?: (id: string) => void;\r\n onMute?: (id: string) => void;\r\n onDelete?: (id: string) => void;\r\n filter?: 'all' | 'unread' | 'groups';\r\n sortBy?: 'recent' | 'unread' | 'name';\r\n}\r\n\r\nexport function ChatSidebar({ \r\n conversations, \r\n activeId, \r\n onSelect, \r\n onNewChat,\r\n onSearch,\r\n onArchive,\r\n onPin,\r\n onMute,\r\n onDelete,\r\n filter = 'all',\r\n sortBy = 'recent',\r\n className,\r\n ...props \r\n}: ChatSidebarProps) {\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n\r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const query = e.target.value;\r\n setSearchQuery(query);\r\n onSearch?.(query);\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex w-80 flex-col border-r border-gray-200 dark:border-white/10 bg-gray-50/50 dark:bg-white/[0.02]\", className)} {...props}>\r\n <div className=\"p-4 space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">Messages</h2>\r\n <div className=\"flex items-center gap-1\">\r\n <button \r\n className=\"p-2 rounded-full hover:bg-gray-200 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n title=\"Filter\"\r\n >\r\n <Filter className=\"h-4 w-4\" />\r\n </button>\r\n <button \r\n onClick={onNewChat}\r\n className=\"p-2 rounded-full hover:bg-gray-200 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n title=\"New Chat\"\r\n >\r\n <Plus className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" />\r\n <input \r\n type=\"text\" \r\n value={searchQuery}\r\n onChange={handleSearch}\r\n placeholder=\"Search messages...\" \r\n className=\"w-full h-10 pl-9 pr-4 rounded-2xl bg-white dark:bg-white/[0.03] border border-gray-200 dark:border-white/10 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all placeholder:text-gray-400 dark:text-white\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <ScrollArea className=\"flex-1\">\r\n <div className=\"p-2 space-y-1\">\r\n {conversations.map((chat) => {\r\n const displayName = chat.user?.name || chat.group?.name || \"Unknown\";\r\n const displayAvatar = chat.user?.avatar || chat.group?.avatar;\r\n const isOnline = chat.user?.status === 'online';\r\n\r\n return (\r\n <div key={chat.id} className=\"group relative\">\r\n <button\r\n onClick={() => onSelect?.(chat.id)}\r\n className={cn(\r\n \"w-full flex items-center gap-3 p-3 rounded-2xl transition-all text-left\",\r\n activeId === chat.id \r\n ? \"bg-blue-500/10 dark:bg-white/[0.06] shadow-[0_0_15px_rgba(59,130,246,0.1)] dark:shadow-[0_0_15px_rgba(255,255,255,0.05)]\" \r\n : \"hover:bg-gray-100 dark:hover:bg-white/[0.03]\"\r\n )}\r\n >\r\n <div className=\"relative\">\r\n <Avatar src={displayAvatar} alt={displayName} fallback={displayName[0]} />\r\n {isOnline && (\r\n <span className=\"absolute bottom-0 right-0 h-3 w-3 rounded-full bg-green-500 border-2 border-white dark:border-black\" />\r\n )}\r\n </div>\r\n \r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center justify-between mb-0.5\">\r\n <div className=\"flex items-center gap-1.5 min-w-0\">\r\n <span className={cn(\r\n \"font-medium truncate\",\r\n activeId === chat.id ? \"text-blue-600 dark:text-white\" : \"text-gray-900 dark:text-white/90\"\r\n )}>\r\n {displayName}\r\n </span>\r\n {chat.isPinned && <Pin className=\"h-3 w-3 text-blue-500 rotate-45\" />}\r\n {chat.isMuted && <BellOff className=\"h-3 w-3 text-gray-400\" />}\r\n </div>\r\n {chat.lastMessage && (\r\n <span className=\"text-xs text-gray-400 whitespace-nowrap ml-2\">\r\n {chat.lastMessage.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"flex items-center justify-between\">\r\n <div className={cn(\r\n \"text-sm truncate pr-2 flex-1\",\r\n activeId === chat.id ? \"text-blue-600/80 dark:text-white/70\" : \"text-gray-500 dark:text-white/50\"\r\n )}>\r\n {chat.isTyping ? (\r\n <TypingIndicator className=\"text-[10px]\" />\r\n ) : (\r\n <p className=\"truncate\">{chat.lastMessage?.content}</p>\r\n )}\r\n </div>\r\n {chat.unreadCount ? (\r\n <span className=\"flex h-5 min-w-[1.25rem] items-center justify-center rounded-full bg-blue-500 px-1.5 text-[10px] font-bold text-white\">\r\n {chat.unreadCount}\r\n </span>\r\n ) : null}\r\n </div>\r\n </div>\r\n </button>\r\n\r\n {/* Quick Actions on Hover */}\r\n <div className=\"absolute right-2 top-1/2 -translate-y-1/2 hidden group-hover:flex items-center gap-1 bg-white dark:bg-gray-800 shadow-lg rounded-lg p-1 border border-gray-200 dark:border-white/10 animate-in fade-in zoom-in-95\">\r\n <button \r\n onClick={(e) => { e.stopPropagation(); onPin?.(chat.id); }}\r\n className=\"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-white/10 text-gray-500\"\r\n >\r\n <Pin className=\"h-3.5 w-3.5\" />\r\n </button>\r\n <button \r\n onClick={(e) => { e.stopPropagation(); onArchive?.(chat.id); }}\r\n className=\"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-white/10 text-gray-500\"\r\n >\r\n <Archive className=\"h-3.5 w-3.5\" />\r\n </button>\r\n <button \r\n onClick={(e) => { e.stopPropagation(); onDelete?.(chat.id); }}\r\n className=\"p-1.5 rounded hover:bg-red-100 dark:hover:bg-red-500/20 text-red-500\"\r\n >\r\n <Trash2 className=\"h-3.5 w-3.5\" />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </ScrollArea>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { User } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { Phone, Video, MoreVertical, ArrowLeft, Search, BellOff } from 'lucide-react';\r\n\r\ninterface ChatHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n user: User;\r\n onBack?: () => void;\r\n onInfo?: () => void;\r\n onCall?: () => void;\r\n onVideoCall?: () => void;\r\n onSearch?: () => void;\r\n onMute?: () => void;\r\n isTyping?: boolean;\r\n isMuted?: boolean;\r\n actions?: React.ReactNode;\r\n}\r\n\r\nexport function ChatHeader({ \r\n user, \r\n onBack, \r\n onInfo, \r\n onCall,\r\n onVideoCall,\r\n onSearch,\r\n onMute,\r\n isTyping,\r\n isMuted,\r\n actions,\r\n className, \r\n ...props \r\n}: ChatHeaderProps) {\r\n return (\r\n <div \r\n className={cn(\r\n \"flex h-16 items-center justify-between border-b border-gray-200 dark:border-white/10 bg-white/80 dark:bg-black/40 backdrop-blur px-4 sticky top-0 z-10\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n {onBack && (\r\n <button onClick={onBack} className=\"md:hidden p-2 -ml-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06]\">\r\n <ArrowLeft className=\"h-5 w-5 text-gray-600 dark:text-white/70\" />\r\n </button>\r\n )}\r\n \r\n <div className=\"relative cursor-pointer\" onClick={onInfo}>\r\n <Avatar src={user.avatar} alt={user.name} fallback={user.name[0]} />\r\n {user.status === 'online' && (\r\n <span className=\"absolute bottom-0 right-0 h-3 w-3 rounded-full bg-green-500 border-2 border-white dark:border-black\" />\r\n )}\r\n </div>\r\n \r\n <div className=\"cursor-pointer\" onClick={onInfo}>\r\n <div className=\"flex items-center gap-2\">\r\n <h3 className=\"font-semibold text-gray-900 dark:text-white leading-none\">{user.name}</h3>\r\n {isMuted && <BellOff className=\"h-3 w-3 text-gray-400\" />}\r\n </div>\r\n <p className={cn(\r\n \"text-xs mt-1 transition-colors\",\r\n isTyping ? \"text-blue-500 font-medium animate-pulse\" : \"text-gray-500 dark:text-white/50\"\r\n )}>\r\n {isTyping ? 'typing...' : user.status === 'online' ? 'Online' : `Last seen ${user.lastSeen?.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-1\">\r\n {onSearch && (\r\n <button \r\n onClick={onSearch}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n >\r\n <Search className=\"h-5 w-5\" />\r\n </button>\r\n )}\r\n <button \r\n onClick={onCall}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n >\r\n <Phone className=\"h-5 w-5\" />\r\n </button>\r\n <button \r\n onClick={onVideoCall}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n >\r\n <Video className=\"h-5 w-5\" />\r\n </button>\r\n \r\n {actions}\r\n\r\n <button \r\n onClick={onInfo}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n >\r\n <MoreVertical className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Play, Pause, Volume2, VolumeX } from 'lucide-react';\r\n\r\ninterface AudioPlayerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n src: string;\r\n duration?: number;\r\n isMe?: boolean;\r\n}\r\n\r\nexport function AudioPlayer({ src, duration, isMe, className, ...props }: AudioPlayerProps) {\r\n const [isPlaying, setIsPlaying] = useState(false);\r\n const [currentTime, setCurrentTime] = useState(0);\r\n const [isMuted, setIsMuted] = useState(false);\r\n const audioRef = useRef<HTMLAudioElement>(null);\r\n\r\n const togglePlay = () => {\r\n if (audioRef.current) {\r\n if (isPlaying) {\r\n audioRef.current.pause();\r\n } else {\r\n audioRef.current.play();\r\n }\r\n setIsPlaying(!isPlaying);\r\n }\r\n };\r\n\r\n const handleTimeUpdate = () => {\r\n if (audioRef.current) {\r\n setCurrentTime(audioRef.current.currentTime);\r\n }\r\n };\r\n\r\n const handleEnded = () => {\r\n setIsPlaying(false);\r\n setCurrentTime(0);\r\n };\r\n\r\n const formatTime = (time: number) => {\r\n const minutes = Math.floor(time / 60);\r\n const seconds = Math.floor(time % 60);\r\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\r\n };\r\n\r\n const progress = duration ? (currentTime / duration) * 100 : 0;\r\n\r\n return (\r\n <div \r\n className={cn(\r\n \"flex items-center gap-3 p-2 rounded-2xl min-w-[200px]\",\r\n isMe ? \"bg-white/10\" : \"bg-gray-100 dark:bg-white/[0.03]\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <audio \r\n ref={audioRef} \r\n src={src} \r\n onTimeUpdate={handleTimeUpdate} \r\n onEnded={handleEnded}\r\n />\r\n \r\n <button \r\n onClick={togglePlay}\r\n className={cn(\r\n \"w-10 h-10 rounded-full flex items-center justify-center transition-all\",\r\n isMe ? \"bg-white text-blue-600\" : \"bg-blue-500 text-white\"\r\n )}\r\n >\r\n {isPlaying ? <Pause className=\"h-5 w-5 fill-current\" /> : <Play className=\"h-5 w-5 fill-current ml-0.5\" />}\r\n </button>\r\n\r\n <div className=\"flex-1 space-y-1\">\r\n <div className=\"h-1.5 w-full bg-gray-300 dark:bg-white/10 rounded-full overflow-hidden\">\r\n <div \r\n className={cn(\"h-full transition-all duration-100\", isMe ? \"bg-white\" : \"bg-blue-500\")} \r\n style={{ width: `${progress}%` }} \r\n />\r\n </div>\r\n <div className=\"flex justify-between text-[10px] font-medium opacity-60\">\r\n <span>{formatTime(currentTime)}</span>\r\n <span>{duration ? formatTime(duration) : '--:--'}</span>\r\n </div>\r\n </div>\r\n\r\n <button \r\n onClick={() => setIsMuted(!isMuted)}\r\n className=\"p-1.5 rounded-full hover:bg-black/5 dark:hover:bg-white/5 opacity-60\"\r\n >\r\n {isMuted ? <VolumeX className=\"h-4 w-4\" /> : <Volume2 className=\"h-4 w-4\" />}\r\n </button>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Check, CheckCheck } from 'lucide-react';\r\nimport type { MessageStatus } from './types';\r\n\r\ninterface ReadReceiptProps extends React.HTMLAttributes<HTMLDivElement> {\r\n status: MessageStatus;\r\n}\r\n\r\nexport function ReadReceipt({ status, className, ...props }: ReadReceiptProps) {\r\n if (status === 'sending') {\r\n return (\r\n <div className={cn(\"w-3 h-3 border border-current border-t-transparent rounded-full animate-spin opacity-50\", className)} {...props} />\r\n );\r\n }\r\n\r\n if (status === 'failed') {\r\n return (\r\n <span className={cn(\"text-red-500 text-[10px] font-bold\", className)} {...props}>!</span>\r\n );\r\n }\r\n\r\n return (\r\n <div className={cn(\"flex items-center\", className)} {...props}>\r\n {status === 'sent' && <Check className=\"h-3 w-3 opacity-50\" />}\r\n {status === 'delivered' && <CheckCheck className=\"h-3 w-3 opacity-50\" />}\r\n {status === 'read' && <CheckCheck className=\"h-3 w-3 text-blue-500\" />}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { ExternalLink } from 'lucide-react';\r\n\r\ninterface LinkPreviewProps extends React.HTMLAttributes<HTMLAnchorElement> {\r\n url: string;\r\n title?: string;\r\n description?: string;\r\n image?: string;\r\n siteName?: string;\r\n}\r\n\r\nexport function LinkPreview({ url, title, description, image, siteName, className, ...props }: LinkPreviewProps) {\r\n return (\r\n <a \r\n href={url} \r\n target=\"_blank\" \r\n rel=\"noopener noreferrer\"\r\n className={cn(\r\n \"block overflow-hidden rounded-xl border border-gray-200 dark:border-white/10 bg-white dark:bg-white/[0.03] hover:bg-gray-50 dark:hover:bg-white/[0.05] transition-all group\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n {image && (\r\n <div className=\"aspect-video w-full overflow-hidden border-b border-gray-200 dark:border-white/10\">\r\n <img src={image} alt={title} className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-500\" />\r\n </div>\r\n )}\r\n <div className=\"p-3 space-y-1\">\r\n {siteName && <p className=\"text-[10px] font-bold uppercase tracking-wider text-blue-500\">{siteName}</p>}\r\n <h4 className=\"text-sm font-semibold text-gray-900 dark:text-white line-clamp-1\">{title || url}</h4>\r\n {description && <p className=\"text-xs text-gray-500 dark:text-white/50 line-clamp-2\">{description}</p>}\r\n <div className=\"flex items-center gap-1 text-[10px] text-gray-400 pt-1\">\r\n <ExternalLink className=\"h-3 w-3\" />\r\n <span className=\"truncate\">{new URL(url).hostname}</span>\r\n </div>\r\n </div>\r\n </a>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { Message } from './types';\r\nimport { Check, CheckCheck, MoreHorizontal, Reply, Trash2, Copy, Smile, Forward, Pin, Edit2, MapPin, User as UserIcon, FileText } from 'lucide-react';\r\nimport { Motion } from '../feedback/Motion';\r\nimport { \r\n DropdownMenu, \r\n DropdownMenuTrigger, \r\n DropdownMenuContent, \r\n DropdownMenuItem \r\n} from '../overlay/DropdownMenu';\r\nimport { Image } from '../data-display/Image';\r\nimport { AudioPlayer } from './AudioPlayer';\r\nimport { ReadReceipt } from './ReadReceipt';\r\nimport { LinkPreview } from './LinkPreview';\r\n\r\ninterface MessageBubbleProps {\r\n message: Message;\r\n isOwn: boolean;\r\n showAvatar?: boolean;\r\n showStatus?: boolean;\r\n className?: string;\r\n onReply?: () => void;\r\n onReact?: (emoji: string) => void;\r\n onDelete?: () => void;\r\n onEdit?: () => void;\r\n onForward?: () => void;\r\n onCopy?: () => void;\r\n onPin?: () => void;\r\n onSelect?: () => void;\r\n isSelected?: boolean;\r\n}\r\n\r\nexport function MessageBubble({ \r\n message, \r\n isOwn, \r\n showAvatar, \r\n showStatus = true, \r\n className,\r\n onReply,\r\n onReact,\r\n onDelete,\r\n onEdit,\r\n onForward,\r\n onCopy,\r\n onPin,\r\n onSelect,\r\n isSelected\r\n}: MessageBubbleProps) {\r\n const renderContent = () => {\r\n switch (message.type) {\r\n case 'audio':\r\n return (\r\n <AudioPlayer \r\n src={message.attachments?.[0]?.url || \"\"} \r\n duration={message.attachments?.[0]?.duration} \r\n isMe={isOwn} \r\n />\r\n );\r\n case 'location':\r\n return (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex items-center gap-2\">\r\n <MapPin className=\"h-4 w-4\" />\r\n <span className=\"text-sm font-medium\">{message.location?.address || \"Shared Location\"}</span>\r\n </div>\r\n <div className=\"aspect-video rounded-xl bg-gray-200 dark:bg-white/10 flex items-center justify-center\">\r\n <MapPin className=\"h-8 w-8 opacity-20\" />\r\n </div>\r\n </div>\r\n );\r\n case 'contact':\r\n return (\r\n <div className=\"flex items-center gap-3 p-2 rounded-xl bg-black/5 dark:bg-white/10\">\r\n <div className=\"w-10 h-10 rounded-full bg-blue-500 flex items-center justify-center text-white\">\r\n <UserIcon className=\"h-5 w-5\" />\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-bold truncate\">{message.contact?.name}</p>\r\n <p className=\"text-xs opacity-60 truncate\">{message.contact?.phone}</p>\r\n </div>\r\n </div>\r\n );\r\n case 'file':\r\n return (\r\n <div className=\"flex items-center gap-3 p-3 rounded-xl bg-black/5 dark:bg-white/10 border border-white/5\">\r\n <FileText className=\"h-8 w-8 text-blue-500\" />\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium truncate\">{message.attachments?.[0]?.name || \"File\"}</p>\r\n <p className=\"text-[10px] opacity-60 uppercase\">{message.attachments?.[0]?.size || \"Unknown size\"}</p>\r\n </div>\r\n </div>\r\n );\r\n default:\r\n const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\r\n const urls = message.content.match(urlRegex);\r\n \r\n return (\r\n <div className=\"space-y-2\">\r\n <p className=\"text-sm leading-relaxed whitespace-pre-wrap break-words\">{message.content}</p>\r\n {urls && urls.map((url, i) => (\r\n <LinkPreview \r\n key={i} \r\n url={url} \r\n className={cn(\r\n \"mt-2\",\r\n isOwn ? \"bg-white/10 border-white/20\" : \"bg-black/5 dark:bg-black/20\"\r\n )} \r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n return (\r\n <Motion \r\n preset=\"spring\"\r\n className={cn(\r\n \"flex w-full gap-2 mb-1 group relative\",\r\n isOwn ? \"justify-end\" : \"justify-start\",\r\n isSelected && \"bg-blue-500/5\",\r\n className\r\n )}\r\n onClick={() => onSelect?.()}\r\n >\r\n {/* Actions Menu (Hover) */}\r\n <div className={cn(\r\n \"absolute top-2 opacity-0 group-hover:opacity-100 transition-opacity z-10\",\r\n isOwn ? \"left-0 -translate-x-full pr-2\" : \"right-0 translate-x-full pl-2\"\r\n )}>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger className=\"p-1 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-400\">\r\n <MoreHorizontal className=\"h-4 w-4\" />\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align={isOwn ? \"end\" : \"start\"}>\r\n <DropdownMenuItem onClick={() => onReply?.()}>\r\n <Reply className=\"h-4 w-4 mr-2\" /> Reply\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onEdit?.()}>\r\n <Edit2 className=\"h-4 w-4 mr-2\" /> Edit\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onCopy?.()}>\r\n <Copy className=\"h-4 w-4 mr-2\" /> Copy\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onForward?.()}>\r\n <Forward className=\"h-4 w-4 mr-2\" /> Forward\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onPin?.()}>\r\n <Pin className=\"h-4 w-4 mr-2\" /> Pin\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onReact?.('👍')}>\r\n <Smile className=\"h-4 w-4 mr-2\" /> React\r\n </DropdownMenuItem>\r\n {isOwn && (\r\n <DropdownMenuItem onClick={() => onDelete?.()} className=\"text-red-500\">\r\n <Trash2 className=\"h-4 w-4 mr-2\" /> Delete\r\n </DropdownMenuItem>\r\n )}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n\r\n <div className={cn(\r\n \"relative max-w-[70%] px-4 py-2 rounded-2xl shadow-sm transition-all\",\r\n isOwn \r\n ? \"bg-blue-600 text-white rounded-tr-sm\" \r\n : \"bg-white dark:bg-white/[0.06] text-gray-900 dark:text-white rounded-tl-sm border border-gray-200 dark:border-transparent\",\r\n message.isPinned && \"ring-2 ring-blue-500/50\"\r\n )}>\r\n {/* Reply Context */}\r\n {message.replyTo && (\r\n <div className={cn(\r\n \"mb-2 rounded px-2 py-1 text-xs border-l-2 opacity-80\",\r\n isOwn ? \"bg-white/[0.06] border-white/50\" : \"bg-gray-100 dark:bg-black/20 border-blue-500\"\r\n )}>\r\n <p className=\"font-bold opacity-60\">Replying to</p>\r\n <p className=\"truncate\">{message.replyTo.content}</p>\r\n </div>\r\n )}\r\n\r\n {/* Attachments (Images) */}\r\n {message.attachments && message.attachments.length > 0 && message.type === 'image' && (\r\n <div className=\"mb-2 space-y-2\">\r\n {message.attachments.map(att => (\r\n <Image \r\n key={att.id} \r\n src={att.url} \r\n alt=\"Attachment\" \r\n className=\"rounded-2xl max-h-60 object-cover w-full\"\r\n />\r\n ))}\r\n </div>\r\n )}\r\n\r\n {renderContent()}\r\n\r\n <div className={cn(\r\n \"flex items-center justify-end gap-1 mt-1 text-[10px]\",\r\n isOwn ? \"text-white/60\" : \"text-gray-400\"\r\n )}>\r\n {message.isEdited && <span>edited</span>}\r\n <span>{message.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}</span>\r\n {isOwn && message.status && <ReadReceipt status={message.status} />}\r\n </div>\r\n </div>\r\n </Motion>\r\n );\r\n}\r\n","import React, { useRef, useEffect, useState, useMemo } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { Message } from './types';\r\nimport { MessageBubble } from './MessageBubble';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\nimport { MessageSquare, Calendar } from 'lucide-react';\r\n\r\ninterface MessageListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onCopy' | 'onSelect'> {\r\n messages: Message[];\r\n currentUserId: string;\r\n onReply?: (message: Message) => void;\r\n onReact?: (message: Message, emoji: string) => void;\r\n onDelete?: (message: Message) => void;\r\n onEdit?: (message: Message) => void;\r\n onForward?: (message: Message) => void;\r\n onCopy?: (message: Message) => void;\r\n onPin?: (message: Message) => void;\r\n onSelect?: (message: Message) => void;\r\n onLoadMore?: () => void;\r\n hasMore?: boolean;\r\n isLoadingMore?: boolean;\r\n selectedMessages?: string[];\r\n dateFormat?: string;\r\n groupByDate?: boolean;\r\n}\r\n\r\nexport function MessageList({ \r\n messages, \r\n currentUserId, \r\n className, \r\n onReply,\r\n onReact,\r\n onDelete,\r\n onEdit,\r\n onForward,\r\n onCopy,\r\n onPin,\r\n onSelect,\r\n onLoadMore,\r\n hasMore,\r\n isLoadingMore,\r\n selectedMessages = [],\r\n dateFormat = 'MMMM d, yyyy',\r\n groupByDate = true,\r\n ...props \r\n}: MessageListProps) {\r\n const bottomRef = useRef<HTMLDivElement>(null);\r\n const [shouldAutoScroll, setShouldAutoScroll] = useState(true);\r\n\r\n useEffect(() => {\r\n if (shouldAutoScroll) {\r\n bottomRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }, [messages, shouldAutoScroll]);\r\n\r\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\r\n const target = e.currentTarget;\r\n const isAtBottom = Math.abs(target.scrollHeight - target.clientHeight - target.scrollTop) < 50;\r\n setShouldAutoScroll(isAtBottom);\r\n\r\n if (target.scrollTop === 0 && hasMore && !isLoadingMore && onLoadMore) {\r\n onLoadMore();\r\n }\r\n };\r\n\r\n // Group messages by date\r\n const groupedMessages = useMemo(() => {\r\n if (!groupByDate) return { 'all': messages };\r\n \r\n return messages.reduce((groups, message) => {\r\n const date = message.timestamp.toLocaleDateString(undefined, { \r\n year: 'numeric', \r\n month: 'long', \r\n day: 'numeric' \r\n });\r\n if (!groups[date]) {\r\n groups[date] = [];\r\n }\r\n groups[date].push(message);\r\n return groups;\r\n }, {} as Record<string, Message[]>);\r\n }, [messages, groupByDate]);\r\n\r\n if (messages.length === 0 && !isLoadingMore) {\r\n return (\r\n <div className={cn(\"flex-1 flex items-center justify-center p-8 text-center text-gray-500 dark:text-white/40\", className)} {...props}>\r\n <div className=\"max-w-sm space-y-4\">\r\n <div className=\"w-24 h-24 bg-blue-500/10 dark:bg-white/[0.03] rounded-full flex items-center justify-center mx-auto mb-6 animate-pulse\">\r\n <MessageSquare className=\"h-12 w-12 text-blue-500\" />\r\n </div>\r\n <h3 className=\"text-xl font-medium text-gray-900 dark:text-white\">No messages yet</h3>\r\n <p>Start the conversation by sending a message below.</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <ScrollArea \r\n className={cn(\"flex-1 p-4\", className)} \r\n onScroll={handleScroll}\r\n role=\"log\"\r\n aria-live=\"polite\"\r\n aria-relevant=\"additions\"\r\n {...props}\r\n >\r\n <div className=\"space-y-6 pb-4\">\r\n {hasMore && (\r\n <div className=\"flex justify-center py-4\">\r\n {isLoadingMore ? (\r\n <div className=\"flex items-center gap-2 text-xs text-white/40\">\r\n <div className=\"w-4 h-4 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin\" />\r\n Loading older messages...\r\n </div>\r\n ) : (\r\n <button \r\n onClick={onLoadMore}\r\n className=\"text-xs text-cyan-500/60 hover:text-cyan-500 transition-colors\"\r\n >\r\n Load older messages\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {Object.entries(groupedMessages).map(([date, msgs]) => (\r\n <div key={date} className=\"space-y-4\">\r\n {groupByDate && (\r\n <div className=\"flex justify-center sticky top-0 z-10 py-2\">\r\n <div className=\"flex items-center gap-2 px-3 py-1 rounded-full bg-gray-100/80 dark:bg-white/5 backdrop-blur text-[10px] font-medium text-gray-500 dark:text-white/40 border border-gray-200 dark:border-white/10\">\r\n <Calendar className=\"h-3 w-3\" />\r\n {date}\r\n </div>\r\n </div>\r\n )}\r\n \r\n <div className=\"space-y-1\">\r\n {msgs.map((msg, index) => {\r\n const isOwn = msg.senderId === currentUserId;\r\n const prevMsg = msgs[index - 1];\r\n const nextMsg = msgs[index + 1];\r\n \r\n // Logic to group bubbles visually\r\n const isFirstInGroup = !prevMsg || prevMsg.senderId !== msg.senderId;\r\n const isLastInGroup = !nextMsg || nextMsg.senderId !== msg.senderId;\r\n\r\n return (\r\n <MessageBubble \r\n key={msg.id} \r\n message={msg} \r\n isOwn={isOwn}\r\n className={cn(\r\n !isLastInGroup && \"mb-0.5\"\r\n )}\r\n onReply={() => onReply?.(msg)}\r\n onReact={(emoji) => onReact?.(msg, emoji)}\r\n onDelete={() => onDelete?.(msg)}\r\n onEdit={() => onEdit?.(msg)}\r\n onForward={() => onForward?.(msg)}\r\n onCopy={() => onCopy?.(msg)}\r\n onPin={() => onPin?.(msg)}\r\n onSelect={() => onSelect?.(msg)}\r\n isSelected={selectedMessages.includes(msg.id)}\r\n />\r\n );\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n <div ref={bottomRef} className=\"h-px\" />\r\n </div>\r\n </ScrollArea>\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect, useMemo } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Send, Paperclip, Smile, Mic, Image as ImageIcon, AtSign, X, MapPin, Gift } from 'lucide-react';\r\nimport { Button } from '../button/Button';\r\nimport type { User, Message } from './types';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Avatar } from '../data-display/Avatar';\r\n\r\ninterface ChatInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\r\n onSend?: (content: string) => void;\r\n onAttach?: () => void;\r\n onMic?: () => void;\r\n onEmoji?: () => void;\r\n onGif?: () => void;\r\n onLocation?: () => void;\r\n onCancelReply?: () => void;\r\n placeholder?: string;\r\n users?: User[];\r\n replyingTo?: Message;\r\n isRecording?: boolean;\r\n maxLength?: number;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function ChatInput({ \r\n onSend, \r\n onAttach, \r\n onMic,\r\n onEmoji,\r\n onGif,\r\n onLocation,\r\n onCancelReply,\r\n placeholder = \"Type a message...\", \r\n users = [],\r\n replyingTo,\r\n isRecording,\r\n maxLength,\r\n disabled,\r\n className, \r\n ...props \r\n}: ChatInputProps) {\r\n const [content, setContent] = useState(\"\");\r\n const [isUploading, setIsUploading] = useState(false);\r\n const [mentionSearch, setMentionSearch] = useState<string | null>(null);\r\n const [mentionIndex, setMentionIndex] = useState(0);\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n const filteredUsers = useMemo(() => {\r\n if (mentionSearch === null) return [];\r\n return users.filter(u => \r\n u.name.toLowerCase().includes(mentionSearch.toLowerCase())\r\n ).slice(0, 5);\r\n }, [users, mentionSearch]);\r\n\r\n const handleInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n if (disabled) return;\r\n const value = e.target.value;\r\n if (maxLength && value.length > maxLength) return;\r\n \r\n setContent(value);\r\n \r\n // Mention logic\r\n const lastChar = value[e.target.selectionStart - 1];\r\n const textBeforeCursor = value.slice(0, e.target.selectionStart);\r\n const mentionMatch = textBeforeCursor.match(/@(\\w*)$/);\r\n\r\n if (mentionMatch) {\r\n setMentionSearch(mentionMatch[1] || \"\");\r\n setMentionIndex(0);\r\n } else {\r\n setMentionSearch(null);\r\n }\r\n\r\n // Auto-resize\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n textareaRef.current.style.height = `${Math.min(textareaRef.current.scrollHeight, 120)}px`;\r\n }\r\n };\r\n\r\n const insertMention = (user: User) => {\r\n if (!textareaRef.current) return;\r\n const start = textareaRef.current.selectionStart;\r\n const textBefore = content.slice(0, start).replace(/@\\w*$/, `@${user.name} `);\r\n const textAfter = content.slice(start);\r\n setContent(textBefore + textAfter);\r\n setMentionSearch(null);\r\n textareaRef.current.focus();\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n if (mentionSearch !== null && filteredUsers.length > 0) {\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n setMentionIndex(prev => (prev + 1) % filteredUsers.length);\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n setMentionIndex(prev => (prev - 1 + filteredUsers.length) % filteredUsers.length);\r\n } else if (e.key === 'Enter' || e.key === 'Tab') {\r\n e.preventDefault();\r\n insertMention(filteredUsers[mentionIndex]!);\r\n } else if (e.key === 'Escape') {\r\n setMentionSearch(null);\r\n }\r\n return;\r\n }\r\n\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n handleSend();\r\n }\r\n };\r\n\r\n const handleSend = () => {\r\n if (disabled || !content.trim()) return;\r\n onSend?.(content);\r\n setContent(\"\");\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = 'auto';\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"p-4 bg-white/80 dark:bg-black/40 backdrop-blur border-t border-gray-200 dark:border-white/10\", className)} {...props}>\r\n {replyingTo && (\r\n <div className=\"mb-3 flex items-center justify-between p-2 rounded-xl bg-blue-500/5 border-l-4 border-blue-500 animate-in slide-in-from-bottom-2\">\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-xs font-bold text-blue-500\">Replying to</p>\r\n <p className=\"text-sm text-gray-600 dark:text-white/60 truncate\">{replyingTo.content}</p>\r\n </div>\r\n <button \r\n onClick={onCancelReply}\r\n className=\"p-1 rounded-full hover:bg-gray-200 dark:hover:bg-white/10 text-gray-400\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div className=\"flex items-end gap-2\">\r\n <div className=\"flex items-center gap-1 mb-1\">\r\n <button \r\n onClick={onAttach}\r\n disabled={disabled}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-500 dark:text-white/50 transition-colors disabled:opacity-50\"\r\n >\r\n <Paperclip className=\"h-5 w-5\" />\r\n </button>\r\n <button \r\n onClick={onEmoji}\r\n disabled={disabled}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-500 dark:text-white/50 transition-colors disabled:opacity-50\"\r\n >\r\n <Smile className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"flex-1 relative\">\r\n <textarea\r\n ref={textareaRef}\r\n value={content}\r\n onChange={handleInput}\r\n onKeyDown={handleKeyDown}\r\n placeholder={isRecording ? \"Recording...\" : placeholder}\r\n disabled={disabled || isRecording}\r\n rows={1}\r\n className={cn(\r\n \"w-full resize-none rounded-2xl bg-gray-100 dark:bg-white/[0.03] border-none px-4 py-2.5 text-sm focus:ring-2 focus:ring-blue-500/50 transition-all placeholder:text-gray-400 dark:text-white\",\r\n isRecording && \"animate-pulse text-red-500\"\r\n )}\r\n />\r\n \r\n {mentionSearch !== null && filteredUsers.length > 0 && (\r\n <Surface className=\"absolute bottom-full left-0 mb-2 w-64 overflow-hidden shadow-xl animate-in fade-in slide-in-from-bottom-2\">\r\n <div className=\"p-1\">\r\n {filteredUsers.map((user, i) => (\r\n <button\r\n key={user.id}\r\n onClick={() => insertMention(user)}\r\n className={cn(\r\n \"w-full flex items-center gap-2 p-2 rounded-xl text-left transition-colors\",\r\n i === mentionIndex ? \"bg-blue-500 text-white\" : \"hover:bg-gray-100 dark:hover:bg-white/[0.06]\"\r\n )}\r\n >\r\n <Avatar src={user.avatar} alt={user.name} fallback={user.name[0]} size=\"sm\" />\r\n <span className=\"text-sm font-medium\">{user.name}</span>\r\n </button>\r\n ))}\r\n </div>\r\n </Surface>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex items-center gap-1 mb-1\">\r\n {!content.trim() && !isRecording && (\r\n <>\r\n <button \r\n onClick={onGif}\r\n disabled={disabled}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-500 dark:text-white/50 transition-colors disabled:opacity-50\"\r\n >\r\n <Gift className=\"h-5 w-5\" />\r\n </button>\r\n <button \r\n onClick={onLocation}\r\n disabled={disabled}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-500 dark:text-white/50 transition-colors disabled:opacity-50\"\r\n >\r\n <MapPin className=\"h-5 w-5\" />\r\n </button>\r\n </>\r\n )}\r\n \r\n {isRecording ? (\r\n <Button \r\n size=\"icon\" \r\n variant=\"ghost\"\r\n onClick={onMic}\r\n className=\"rounded-full bg-red-500/10 text-red-500 hover:bg-red-500/20 animate-pulse\"\r\n >\r\n <Mic className=\"h-5 w-5\" />\r\n </Button>\r\n ) : content.trim() ? (\r\n <Button \r\n size=\"icon\" \r\n onClick={handleSend}\r\n disabled={disabled}\r\n className=\"rounded-full bg-blue-500 hover:bg-blue-600 text-white shadow-lg shadow-blue-500/20\"\r\n >\r\n <Send className=\"h-5 w-5\" />\r\n </Button>\r\n ) : (\r\n <button \r\n onClick={onMic}\r\n disabled={disabled}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-500 dark:text-white/50 transition-colors disabled:opacity-50\"\r\n >\r\n <Mic className=\"h-5 w-5\" />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n {maxLength && (\r\n <div className=\"mt-1 text-[10px] text-right text-gray-400\">\r\n {content.length} / {maxLength}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { User } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { Bell, Ban, Trash2, Image, FileText, Link as LinkIcon, X } from 'lucide-react';\r\nimport { ScrollArea } from '../data-display/ScrollArea';\r\nimport { Separator } from '../data-display/Separator';\r\nimport { Switch } from '../form/Switch';\r\n\r\ninterface ChatProfileProps extends React.HTMLAttributes<HTMLDivElement> {\r\n user: User;\r\n onClose?: () => void;\r\n}\r\n\r\nexport function ChatProfile({ user, onClose, className, ...props }: ChatProfileProps) {\r\n return (\r\n <div className={cn(\"w-80 border-l border-gray-200 dark:border-white/10 bg-white dark:bg-black/20 flex flex-col\", className)} {...props}>\r\n <div className=\"h-16 flex items-center px-4 border-b border-gray-200 dark:border-white/10\">\r\n <button onClick={onClose} className=\"p-2 -ml-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06]\">\r\n <X className=\"h-5 w-5 text-gray-500\" />\r\n </button>\r\n <span className=\"ml-2 font-semibold text-gray-900 dark:text-white\">Contact Info</span>\r\n </div>\r\n\r\n <ScrollArea className=\"flex-1\">\r\n <div className=\"p-6 flex flex-col items-center text-center\">\r\n <Avatar src={user.avatar} alt={user.name} fallback={user.name[0]} className=\"h-24 w-24 mb-4 text-2xl\" />\r\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">{user.name}</h2>\r\n <p className=\"text-sm text-gray-500 dark:text-white/50 mt-1\">{user.phone || '+1 (555) 000-0000'}</p>\r\n \r\n <div className=\"mt-6 w-full\">\r\n <p className=\"text-sm text-gray-500 dark:text-white/50 mb-1 text-left\">About</p>\r\n <p className=\"text-sm text-gray-900 dark:text-white text-left\">{user.bio || \"Hey there! I am using Pixon Chat.\"}</p>\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n\r\n <div className=\"p-4 space-y-4\">\r\n <h3 className=\"text-xs font-semibold text-gray-500 dark:text-white/40 uppercase tracking-wider\">Media & Docs</h3>\r\n <div className=\"grid grid-cols-3 gap-2\">\r\n {[1, 2, 3, 4, 5, 6].map((i) => (\r\n <div key={i} className=\"aspect-square rounded-2xl bg-gray-100 dark:bg-white/[0.03] overflow-hidden relative group cursor-pointer\">\r\n <div className=\"absolute inset-0 flex items-center justify-center text-gray-400\">\r\n <Image className=\"h-6 w-6\" />\r\n </div>\r\n <div className=\"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity\" />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n\r\n <div className=\"p-4 space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-3 text-gray-700 dark:text-white/80\">\r\n <Bell className=\"h-5 w-5\" />\r\n <span className=\"text-sm font-medium\">Mute Notifications</span>\r\n </div>\r\n <Switch />\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n\r\n <div className=\"p-4 space-y-2\">\r\n <button className=\"w-full flex items-center gap-3 p-3 rounded-2xl hover:bg-red-50 dark:hover:bg-red-500/10 text-red-600 dark:text-red-400 transition-colors text-sm font-medium\">\r\n <Ban className=\"h-5 w-5\" />\r\n Block {user.name}\r\n </button>\r\n <button className=\"w-full flex items-center gap-3 p-3 rounded-2xl hover:bg-red-50 dark:hover:bg-red-500/10 text-red-600 dark:text-red-400 transition-colors text-sm font-medium\">\r\n <Trash2 className=\"h-5 w-5\" />\r\n Delete Chat\r\n </button>\r\n </div>\r\n </ScrollArea>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { X, Reply } from 'lucide-react';\r\nimport type { Message } from './types';\r\n\r\ninterface ReplyPreviewProps extends React.HTMLAttributes<HTMLDivElement> {\r\n message: Message;\r\n onCancel?: () => void;\r\n}\r\n\r\nexport function ReplyPreview({ message, onCancel, className, ...props }: ReplyPreviewProps) {\r\n return (\r\n <div \r\n className={cn(\r\n \"flex items-center gap-3 p-2 rounded-xl bg-blue-500/5 border-l-4 border-blue-500 animate-in slide-in-from-bottom-2\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <div className=\"p-1.5 rounded-lg bg-blue-500/10 text-blue-500\">\r\n <Reply className=\"h-4 w-4\" />\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-xs font-bold text-blue-500\">Replying to</p>\r\n <p className=\"text-sm text-gray-600 dark:text-white/60 truncate\">{message.content}</p>\r\n </div>\r\n {onCancel && (\r\n <button \r\n onClick={onCancel}\r\n className=\"p-1 rounded-full hover:bg-gray-200 dark:hover:bg-white/10 text-gray-400 transition-colors\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Info, AlertCircle, X, CheckCircle2 } from 'lucide-react';\r\n\r\ninterface ChatBannerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type?: 'info' | 'warning' | 'error' | 'success';\r\n message: string;\r\n action?: {\r\n label: string;\r\n onClick: () => void;\r\n };\r\n onClose?: () => void;\r\n}\r\n\r\nexport function ChatBanner({ \r\n type = 'info', \r\n message, \r\n action, \r\n onClose, \r\n className, \r\n ...props \r\n}: ChatBannerProps) {\r\n const icons = {\r\n info: Info,\r\n warning: AlertCircle,\r\n error: AlertCircle,\r\n success: CheckCircle2\r\n };\r\n\r\n const colors = {\r\n info: \"bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-500/20\",\r\n warning: \"bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20\",\r\n error: \"bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20\",\r\n success: \"bg-green-500/10 text-green-600 dark:text-green-400 border-green-500/20\"\r\n };\r\n\r\n const Icon = icons[type];\r\n\r\n return (\r\n <div \r\n className={cn(\r\n \"flex items-center gap-3 px-4 py-2 border-b text-sm animate-in slide-in-from-top duration-300\",\r\n colors[type],\r\n className\r\n )} \r\n {...props}\r\n >\r\n <Icon className=\"h-4 w-4 shrink-0\" />\r\n <p className=\"flex-1 font-medium\">{message}</p>\r\n \r\n {action && (\r\n <button \r\n onClick={action.onClick}\r\n className=\"text-xs font-bold uppercase tracking-wider hover:underline\"\r\n >\r\n {action.label}\r\n </button>\r\n )}\r\n\r\n {onClose && (\r\n <button \r\n onClick={onClose}\r\n className=\"p-1 rounded-full hover:bg-black/5 dark:hover:bg-white/5 transition-colors\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Calendar } from 'lucide-react';\r\n\r\ninterface DateSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\r\n date: string;\r\n}\r\n\r\nexport function DateSeparator({ date, className, ...props }: DateSeparatorProps) {\r\n return (\r\n <div className={cn(\"flex justify-center sticky top-0 z-10 py-4\", className)} {...props}>\r\n <div className=\"flex items-center gap-2 px-3 py-1 rounded-full bg-gray-100/80 dark:bg-white/5 backdrop-blur text-[10px] font-bold uppercase tracking-wider text-gray-500 dark:text-white/40 border border-gray-200 dark:border-white/10 shadow-sm\">\r\n <Calendar className=\"h-3 w-3\" />\r\n {date}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface OnlineIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n status?: 'online' | 'offline' | 'away' | 'busy';\r\n size?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nexport function OnlineIndicator({ status = 'offline', size = 'md', className, ...props }: OnlineIndicatorProps) {\r\n const colors = {\r\n online: \"bg-green-500\",\r\n offline: \"bg-gray-400\",\r\n away: \"bg-amber-500\",\r\n busy: \"bg-red-500\"\r\n };\r\n\r\n const sizes = {\r\n sm: \"h-2 w-2\",\r\n md: \"h-3 w-3\",\r\n lg: \"h-4 w-4\"\r\n };\r\n\r\n return (\r\n <span \r\n className={cn(\r\n \"rounded-full border-2 border-white dark:border-black shrink-0\",\r\n colors[status],\r\n sizes[size],\r\n status === 'online' && \"animate-pulse\",\r\n className\r\n )} \r\n {...props}\r\n />\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface SystemMessageProps extends React.HTMLAttributes<HTMLDivElement> {\r\n content: string;\r\n}\r\n\r\nexport function SystemMessage({ content, className, ...props }: SystemMessageProps) {\r\n return (\r\n <div className={cn(\"flex justify-center py-2\", className)} {...props}>\r\n <div className=\"px-4 py-1 rounded-lg bg-gray-100/50 dark:bg-white/[0.02] text-[11px] font-medium text-gray-500 dark:text-white/30 border border-gray-200/50 dark:border-white/5\">\r\n {content}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { GroupInfo } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { Phone, Video, MoreVertical, ArrowLeft, Users } from 'lucide-react';\r\n\r\ninterface GroupHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n group: GroupInfo;\r\n onBack?: () => void;\r\n onInfo?: () => void;\r\n isTyping?: boolean;\r\n typingUsers?: string[];\r\n}\r\n\r\nexport function GroupHeader({ \r\n group, \r\n onBack, \r\n onInfo, \r\n isTyping,\r\n typingUsers = [],\r\n className, \r\n ...props \r\n}: GroupHeaderProps) {\r\n const typingText = typingUsers.length > 0 \r\n ? `${typingUsers.join(', ')} ${typingUsers.length === 1 ? 'is' : 'are'} typing...`\r\n : 'typing...';\r\n\r\n return (\r\n <div \r\n className={cn(\r\n \"flex h-16 items-center justify-between border-b border-gray-200 dark:border-white/10 bg-white/80 dark:bg-black/40 backdrop-blur px-4 sticky top-0 z-10\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n {onBack && (\r\n <button onClick={onBack} className=\"md:hidden p-2 -ml-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06]\">\r\n <ArrowLeft className=\"h-5 w-5 text-gray-600 dark:text-white/70\" />\r\n </button>\r\n )}\r\n \r\n <div className=\"relative cursor-pointer\" onClick={onInfo}>\r\n <div className=\"flex -space-x-3\">\r\n {group.members.slice(0, 2).map((member, i) => (\r\n <Avatar \r\n key={member.id} \r\n src={member.avatar} \r\n alt={member.name} \r\n fallback={member.name[0]} \r\n className={cn(\"border-2 border-white dark:border-black\", i === 0 ? \"z-10\" : \"z-0\")}\r\n />\r\n ))}\r\n {group.members.length > 2 && (\r\n <div className=\"w-10 h-10 rounded-full bg-gray-200 dark:bg-white/10 border-2 border-white dark:border-black flex items-center justify-center text-[10px] font-bold text-gray-600 dark:text-white/60 z-0\">\r\n +{group.members.length - 2}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n \r\n <div className=\"cursor-pointer min-w-0\" onClick={onInfo}>\r\n <h3 className=\"font-semibold text-gray-900 dark:text-white leading-none truncate\">{group.name}</h3>\r\n <p className={cn(\r\n \"text-xs mt-1 truncate transition-colors\",\r\n isTyping ? \"text-blue-500 font-medium animate-pulse\" : \"text-gray-500 dark:text-white/50\"\r\n )}>\r\n {isTyping ? typingText : `${group.members.length} members`}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-1\">\r\n <button className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\">\r\n <Phone className=\"h-5 w-5\" />\r\n </button>\r\n <button className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\">\r\n <Video className=\"h-5 w-5\" />\r\n </button>\r\n <button \r\n onClick={onInfo}\r\n className=\"p-2 rounded-full hover:bg-gray-100 dark:hover:bg-white/[0.06] text-gray-600 dark:text-white/60 transition-colors\"\r\n >\r\n <MoreVertical className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport type { User } from './types';\r\nimport { Avatar } from '../data-display/Avatar';\r\nimport { Surface } from '../../primitives/Surface';\r\n\r\ninterface MentionListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\r\n users: User[];\r\n selectedIndex: number;\r\n onSelect: (user: User) => void;\r\n}\r\n\r\nexport function MentionList({ users, selectedIndex, onSelect, className, ...props }: MentionListProps) {\r\n if (users.length === 0) return null;\r\n\r\n return (\r\n <Surface \r\n className={cn(\r\n \"w-64 overflow-hidden shadow-xl animate-in fade-in slide-in-from-bottom-2\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <div className=\"p-1\">\r\n <div className=\"px-3 py-2 text-[10px] font-bold uppercase tracking-wider text-gray-400 border-b border-gray-200 dark:border-white/5 mb-1\">\r\n Mention someone\r\n </div>\r\n {users.map((user, i) => (\r\n <button\r\n key={user.id}\r\n onClick={() => onSelect(user)}\r\n className={cn(\r\n \"w-full flex items-center gap-2 p-2 rounded-xl text-left transition-colors\",\r\n i === selectedIndex ? \"bg-blue-500 text-white\" : \"hover:bg-gray-100 dark:hover:bg-white/[0.06]\"\r\n )}\r\n >\r\n <Avatar src={user.avatar} alt={user.name} fallback={user.name[0]} size=\"sm\" />\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium truncate\">{user.name}</p>\r\n {user.status && <p className={cn(\"text-[10px]\", i === selectedIndex ? \"text-white/70\" : \"text-gray-500\")}>{user.status}</p>}\r\n </div>\r\n </button>\r\n ))}\r\n </div>\r\n </Surface>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Surface } from '../../primitives/Surface';\r\nimport { Search } from 'lucide-react';\r\n\r\ninterface EmojiPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\r\n onSelect: (emoji: string) => void;\r\n}\r\n\r\nconst EMOJI_CATEGORIES = [\r\n { name: 'Smileys', emojis: ['😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '😊', '😇', '🙂', '🙃', '😉', '😌', '😍', '🥰', '😘', '😗', '😙', '😚', '😋', '😛', '😝', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🤩', '🥳', '😏', '😒', '😞', '😔', '😟', '😕', '🙁', '☹️', '😣', '😖', '😫', '😩', '🥺', '😢', '😭', '😤', '😠', '😡', '🤬', '🤯', '😳', '🥵', '🥶', '😱', '😨', '😰', '😥', '😓', '🤗', '🤔', '🤭', '🤫', '🤥', '😶', '😐', '😑', '😬', '🙄', '😯', '😦', '😧', '😮', '😲', '🥱', '😴', '🤤', '😪', '😵', '🤐', '🥴', '🤢', '🤮', '🤧', '😷', '🤒', '🤕'] },\r\n { name: 'Hearts', emojis: ['❤️', '🧡', '💛', '💚', '💙', '💜', '🖤', '🤍', '🤎', '💔', '❣️', '💕', '💞', '💓', '💗', '💖', '💘', '💝', '💟'] },\r\n { name: 'Gestures', emojis: ['👍', '👎', '👌', '🤌', '🤏', '✌️', '🤞', '🤟', '🤘', '🤙', '👈', '👉', '👆', '🖕', '👇', '☝️', '✊', '👊', '🤛', '🤜', '👏', '🙌', '👐', '🤲', '🤝', '🙏', '✍️', '💅', '🤳', '💪', '🦾', '🦵', '🦿', '🦶', '👣', '👂', '🦻', '👃', '🧠', '🫀', '🫁', '🦷', '🦴', '👀', '👁️', '👅', '👄'] },\r\n { name: 'Activities', emojis: ['⚽', '🏀', '🏈', '⚾', '🥎', '🎾', '🏐', '🏉', '🥏', '🎱', '🪀', '🏓', '🏸', '🏒', '🏑', '🥍', '🏏', '🪃', '🥅', '⛳', '🪁', '🏹', '🎣', '🤿', '🥊', '🥋', '🎽', '🛹', '🛼', '🛷', '⛸️', '🎿', '⛷️', '🏂', '🪂', '🏋️', '🤼', '🤸', '⛹️', '🤺', '🤾', '🏌️', '🏇', '🧘', '🏄', '🏊', '🤽', '🚣', '🧗', '🚵', '🚴'] },\r\n { name: 'Nature', emojis: ['🐶', '🐱', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼', '🐻❄️', '🐨', '🐯', '🦁', '🐮', '🐷', '🐽', '🐸', '🐵', '🙈', '🙉', '🙊', '🐒', '🐔', '🐧', '🐦', '🐤', '🐣', '🐥', '🦆', '🦅', '🦉', '🦇', '🐺', '🐗', '🐴', '🦄', '🐝', '🪱', '🐛', '🦋', '🐌', '🐞', '🐜', '🦟', '🪰', '🪲', '🪳', '🦗', '🕷️', '🕸️', '🦂', '🐢', '🐍', '🦎', '🦖', '🦕', '🐙', '🦑', '🦐', '🦞', '🦀', '🐡', '🐠', '🐟', '🐬', '🐳', '🐋', '🦈', '🐊', '🐅', '🐆', '🦓', '🦍', '🦧', '🦣', '🐘', '🦛', '🦏', '🐪', '🐫', '🦒', '🦘', '🦬', '🐃', '🐂', '🐄', '🐎', '🐖', '🐏', '🐑', '🐐', '🦌', '🐕', '🐩', '🦮', '🐕🦺', '🐈', '🐈⬛', '🐓', '🦃', '🦚', '🦜', '🦢', '🦩', '🕊️', '🐇', '🦝', '🦨', '🦡', '🦫', '🦦', '🦥', '🐁', '🐀', '🐿️', '🦔', '🐾', '🐉', '🐲', '🌵', '🎄', '🌲', '🌳', '🌴', '🪵', '🌱', '🌿', '☘️', '🍀', '🎍', '🪴', '🎋', '🍃', '🍂', '🍁', '🍄', '🐚', '🪨', '🌾', '💐', '🌷', '🌹', '🥀', '🌺', '🌸', '🌼', '🌻', '🌞', '🌝', '🌛', '🌜', '🌚', '🌕', '🌖', '🌗', '🌘', '🌑', '🌒', '🌓', '🌔', '🌙', '🌎', '🌍', '🌏', '🪐', '💫', '⭐️', '🌟', '✨', '⚡️', '☄️', '💥', '🔥', '🌪️', '🌈', '☀️', '🌤️', '⛅️', '🌥️', '☁️', '🌦️', '🌧️', '⛈️', '🌩️', '🌨️', '❄️', '☃️', '⛄️', '🌬️', '💨', '💧', '💦', '☔️', '☂️', '🌊', '🌫️'] }\r\n];\r\n\r\nexport function EmojiPicker({ onSelect, className, ...props }: EmojiPickerProps) {\r\n const [search, setSearch] = useState(\"\");\r\n\r\n const filteredCategories = EMOJI_CATEGORIES.map(cat => ({\r\n ...cat,\r\n emojis: cat.emojis.filter(e => search === \"\" || e.includes(search)) // Simple search, usually emojis have names\r\n })).filter(cat => cat.emojis.length > 0);\r\n\r\n return (\r\n <Surface className={cn(\"w-72 h-96 flex flex-col overflow-hidden shadow-2xl\", className)} {...props}>\r\n <div className=\"p-3 border-b border-gray-200 dark:border-white/10\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-gray-400\" />\r\n <input \r\n type=\"text\" \r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder=\"Search emoji...\" \r\n className=\"w-full h-8 pl-8 pr-3 rounded-lg bg-gray-100 dark:bg-white/5 text-xs focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all\"\r\n />\r\n </div>\r\n </div>\r\n \r\n <div className=\"flex-1 overflow-y-auto p-2 custom-scrollbar\">\r\n {filteredCategories.map(cat => (\r\n <div key={cat.name} className=\"mb-4\">\r\n <h4 className=\"text-[10px] font-bold uppercase tracking-wider text-gray-400 px-2 mb-2\">{cat.name}</h4>\r\n <div className=\"grid grid-cols-8 gap-1\">\r\n {cat.emojis.map(emoji => (\r\n <button\r\n key={emoji}\r\n onClick={() => onSelect(emoji)}\r\n className=\"h-8 w-8 flex items-center justify-center rounded-lg hover:bg-gray-100 dark:hover:bg-white/10 text-lg transition-colors\"\r\n >\r\n {emoji}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </Surface>\r\n );\r\n}\r\n","import { useState, useRef, useCallback } from 'react';\r\n\r\nexport interface VoiceRecorderHook {\r\n isRecording: boolean;\r\n duration: number;\r\n audioBlob: Blob | null;\r\n audioUrl: string | null;\r\n startRecording: () => Promise<void>;\r\n stopRecording: () => void;\r\n cancelRecording: () => void;\r\n clearAudio: () => void;\r\n}\r\n\r\nexport function useVoiceRecorder(): VoiceRecorderHook {\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [duration, setDuration] = useState(0);\r\n const [audioBlob, setAudioBlob] = useState<Blob | null>(null);\r\n const [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n \r\n const mediaRecorder = useRef<MediaRecorder | null>(null);\r\n const timerInterval = useRef<number | null>(null);\r\n const chunks = useRef<Blob[]>([]);\r\n\r\n const startRecording = useCallback(async () => {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n mediaRecorder.current = new MediaRecorder(stream);\r\n chunks.current = [];\r\n\r\n mediaRecorder.current.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n chunks.current.push(e.data);\r\n }\r\n };\r\n\r\n mediaRecorder.current.onstop = () => {\r\n const blob = new Blob(chunks.current, { type: 'audio/webm' });\r\n const url = URL.createObjectURL(blob);\r\n setAudioBlob(blob);\r\n setAudioUrl(url);\r\n \r\n // Stop all tracks\r\n stream.getTracks().forEach(track => track.stop());\r\n };\r\n\r\n mediaRecorder.current.start();\r\n setIsRecording(true);\r\n setDuration(0);\r\n\r\n timerInterval.current = window.setInterval(() => {\r\n setDuration(prev => prev + 1);\r\n }, 1000);\r\n } catch (err) {\r\n console.error('Failed to start recording', err);\r\n throw err;\r\n }\r\n }, []);\r\n\r\n const stopRecording = useCallback(() => {\r\n if (mediaRecorder.current && isRecording) {\r\n mediaRecorder.current.stop();\r\n setIsRecording(false);\r\n if (timerInterval.current) {\r\n clearInterval(timerInterval.current);\r\n }\r\n }\r\n }, [isRecording]);\r\n\r\n const cancelRecording = useCallback(() => {\r\n if (mediaRecorder.current && isRecording) {\r\n mediaRecorder.current.stop();\r\n setIsRecording(false);\r\n if (timerInterval.current) {\r\n clearInterval(timerInterval.current);\r\n }\r\n setAudioBlob(null);\r\n setAudioUrl(null);\r\n setDuration(0);\r\n }\r\n }, [isRecording]);\r\n\r\n const clearAudio = useCallback(() => {\r\n setAudioBlob(null);\r\n setAudioUrl(null);\r\n setDuration(0);\r\n }, []);\r\n\r\n return {\r\n isRecording,\r\n duration,\r\n audioBlob,\r\n audioUrl,\r\n startRecording,\r\n stopRecording,\r\n cancelRecording,\r\n clearAudio\r\n };\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Mic, Square, Trash2, Send, X } from 'lucide-react';\r\nimport { useVoiceRecorder } from '../../hooks/useVoiceRecorder';\r\nimport { Button } from '../button/Button';\r\n\r\ninterface VoiceRecorderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n onSend: (blob: Blob, duration: number) => void;\r\n onCancel: () => void;\r\n}\r\n\r\nexport function VoiceRecorder({ onSend, onCancel, className, ...props }: VoiceRecorderProps) {\r\n const { \r\n isRecording, \r\n duration, \r\n audioBlob, \r\n startRecording, \r\n stopRecording, \r\n cancelRecording \r\n } = useVoiceRecorder();\r\n\r\n useEffect(() => {\r\n startRecording();\r\n return () => cancelRecording();\r\n }, [startRecording, cancelRecording]);\r\n\r\n const formatTime = (s: number) => {\r\n const mins = Math.floor(s / 60);\r\n const secs = s % 60;\r\n return `${mins}:${secs.toString().padStart(2, '0')}`;\r\n };\r\n\r\n return (\r\n <div \r\n className={cn(\r\n \"flex items-center gap-3 p-2 rounded-2xl bg-gray-100 dark:bg-white/[0.03] border border-gray-200 dark:border-white/10 animate-in slide-in-from-bottom-2\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <div className=\"flex items-center gap-2 px-3 py-1.5 rounded-xl bg-red-500/10 text-red-500\">\r\n <div className=\"w-2 h-2 rounded-full bg-red-500 animate-pulse\" />\r\n <span className=\"text-sm font-mono font-bold\">{formatTime(duration)}</span>\r\n </div>\r\n\r\n <div className=\"flex-1 h-8 flex items-center gap-0.5 px-2\">\r\n {/* Simple Waveform Animation */}\r\n {[...Array(20)].map((_, i) => (\r\n <div \r\n key={i} \r\n className=\"w-1 bg-red-500/40 rounded-full transition-all duration-150\"\r\n style={{ \r\n height: isRecording ? `${20 + Math.random() * 80}%` : '20%',\r\n animationDelay: `${i * 0.05}s`\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div className=\"flex items-center gap-1\">\r\n <button \r\n onClick={() => { cancelRecording(); onCancel(); }}\r\n className=\"p-2 rounded-full hover:bg-gray-200 dark:hover:bg-white/10 text-gray-500 transition-colors\"\r\n >\r\n <Trash2 className=\"h-5 w-5\" />\r\n </button>\r\n \r\n {isRecording ? (\r\n <Button \r\n size=\"icon\" \r\n variant=\"ghost\"\r\n onClick={stopRecording}\r\n className=\"rounded-full bg-red-500 text-white hover:bg-red-600\"\r\n >\r\n <Square className=\"h-4 w-4 fill-current\" />\r\n </Button>\r\n ) : (\r\n <Button \r\n size=\"icon\" \r\n onClick={() => audioBlob && onSend(audioBlob, duration)}\r\n className=\"rounded-full bg-blue-500 text-white hover:bg-blue-600\"\r\n >\r\n <Send className=\"h-4 w-4\" />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Search, X, ChevronUp, ChevronDown } from 'lucide-react';\r\nimport type { Message } from './types';\r\n\r\ninterface MessageSearchProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSearch' | 'results'> {\r\n onSearch: (query: string) => void;\r\n results: Message[];\r\n onResultClick: (message: Message) => void;\r\n onClose: () => void;\r\n}\r\n\r\nexport function MessageSearch({ \r\n onSearch, \r\n results, \r\n onResultClick, \r\n onClose, \r\n className, \r\n ...props \r\n}: MessageSearchProps) {\r\n const [query, setQuery] = useState(\"\");\r\n\r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const val = e.target.value;\r\n setQuery(val);\r\n onSearch(val);\r\n };\r\n\r\n return (\r\n <div \r\n className={cn(\r\n \"flex flex-col h-full bg-white dark:bg-gray-900 border-l border-gray-200 dark:border-white/10 animate-in slide-in-from-right duration-300\",\r\n className\r\n )} \r\n {...props}\r\n >\r\n <div className=\"p-4 border-b border-gray-200 dark:border-white/10 flex items-center justify-between\">\r\n <h3 className=\"font-bold text-gray-900 dark:text-white\">Search Messages</h3>\r\n <button onClick={onClose} className=\"p-1 rounded-full hover:bg-gray-100 dark:hover:bg-white/10\">\r\n <X className=\"h-5 w-5 text-gray-500\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"p-4\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" />\r\n <input \r\n type=\"text\" \r\n value={query}\r\n onChange={handleSearch}\r\n placeholder=\"Search in conversation...\" \r\n className=\"w-full h-10 pl-10 pr-4 rounded-xl bg-gray-100 dark:bg-white/5 border-none text-sm focus:ring-2 focus:ring-blue-500/50 transition-all\"\r\n autoFocus\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex-1 overflow-y-auto p-2\">\r\n {query && results.length === 0 ? (\r\n <div className=\"p-8 text-center text-gray-500 dark:text-white/30\">\r\n <p className=\"text-sm\">No messages found for \"{query}\"</p>\r\n </div>\r\n ) : (\r\n <div className=\"space-y-1\">\r\n {results.map(msg => (\r\n <button\r\n key={msg.id}\r\n onClick={() => onResultClick(msg)}\r\n className=\"w-full p-3 rounded-xl hover:bg-gray-100 dark:hover:bg-white/5 text-left transition-all group\"\r\n >\r\n <div className=\"flex justify-between mb-1\">\r\n <span className=\"text-[10px] font-bold text-blue-500 uppercase\">\r\n {msg.timestamp.toLocaleDateString()}\r\n </span>\r\n <span className=\"text-[10px] text-gray-400\">\r\n {msg.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\r\n </span>\r\n </div>\r\n <p className=\"text-sm text-gray-700 dark:text-white/70 line-clamp-2 group-hover:text-gray-900 dark:group-hover:text-white\">\r\n {msg.content}\r\n </p>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useState, useEffect, useCallback, useRef } from 'react';\r\n\r\nexport interface ScrollValues {\r\n scrollX: number;\r\n scrollY: number;\r\n scrollProgressX: number;\r\n scrollProgressY: number;\r\n}\r\n\r\n/**\r\n * Optimized scroll hook using requestAnimationFrame for 120fps performance.\r\n */\r\nexport function useScroll(): ScrollValues {\r\n const [values, setValues] = useState<ScrollValues>({\r\n scrollX: 0,\r\n scrollY: 0,\r\n scrollProgressX: 0,\r\n scrollProgressY: 0,\r\n });\r\n\r\n const ticking = useRef(false);\r\n\r\n const handleScroll = useCallback(() => {\r\n if (!ticking.current) {\r\n window.requestAnimationFrame(() => {\r\n const x = window.scrollX;\r\n const y = window.scrollY;\r\n \r\n const width = document.documentElement.scrollWidth - document.documentElement.clientWidth;\r\n const height = document.documentElement.scrollHeight - document.documentElement.clientHeight;\r\n \r\n setValues({\r\n scrollX: x,\r\n scrollY: y,\r\n scrollProgressX: width > 0 ? x / width : 0,\r\n scrollProgressY: height > 0 ? y / height : 0,\r\n });\r\n \r\n ticking.current = false;\r\n });\r\n \r\n ticking.current = true;\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n handleScroll(); // Initial call\r\n \r\n return () => window.removeEventListener('scroll', handleScroll);\r\n }, [handleScroll]);\r\n\r\n return values;\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../utils/cn';\r\nimport { useScroll } from '../hooks/useScroll';\r\n\r\nexport interface ScrollProgressProps extends React.HTMLAttributes<HTMLDivElement> {\r\n color?: string;\r\n height?: number | string;\r\n position?: 'top' | 'bottom';\r\n}\r\n\r\nexport function ScrollProgress({ \r\n className, \r\n color = 'bg-blue-500', \r\n height = 2, \r\n position = 'top',\r\n ...props \r\n}: ScrollProgressProps) {\r\n const { scrollProgressY } = useScroll();\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"fixed left-0 right-0 z-[100] w-full pointer-events-none\",\r\n position === 'top' ? 'top-0' : 'bottom-0',\r\n className\r\n )}\r\n style={{ height }}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\"h-full transition-all duration-75 ease-out\", color)}\r\n style={{ \r\n width: `${scrollProgressY * 100}%`,\r\n boxShadow: scrollProgressY > 0 ? `0 0 10px ${color.replace('bg-', 'var(--')}` : 'none'\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { cn } from '../utils/cn';\r\n\r\ninterface DividerProps extends React.HTMLAttributes<HTMLHRElement> {\r\n orientation?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport const Divider = React.forwardRef<HTMLHRElement, DividerProps>(\r\n ({ orientation = 'horizontal', className, ...props }, ref) => {\r\n return (\r\n <hr\r\n ref={ref}\r\n className={cn(\r\n 'border-0 bg-gray-200 dark:bg-white/10',\r\n {\r\n 'h-px w-full': orientation === 'horizontal',\r\n 'h-full w-px': orientation === 'vertical',\r\n },\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\n\r\nDivider.displayName = 'Divider';\r\n","import React from 'react';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(\r\n ({ children, className, ...props }, ref) => {\r\n return (\r\n <kbd\r\n ref={ref}\r\n className={cn(\r\n 'rounded-lg border border-gray-200 dark:border-white/10 bg-gray-100 dark:bg-white/[0.03] px-2 py-1 text-[11px] font-semibold text-gray-500 dark:text-white/65',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </kbd>\r\n );\r\n }\r\n);\r\n\r\nKbd.displayName = 'Kbd';\r\n","import React, { createContext, useContext, useEffect, useState } from \"react\"\r\n\r\ntype Theme = \"dark\" | \"light\" | \"system\"\r\n\r\ntype ThemeProviderProps = {\r\n children: React.ReactNode\r\n defaultTheme?: Theme\r\n storageKey?: string\r\n}\r\n\r\ntype ThemeProviderState = {\r\n theme: Theme\r\n setTheme: (theme: Theme) => void\r\n}\r\n\r\nconst initialState: ThemeProviderState = {\r\n theme: \"system\",\r\n setTheme: () => null,\r\n}\r\n\r\nconst ThemeProviderContext = createContext<ThemeProviderState>(initialState)\r\n\r\nexport function ThemeProvider({\r\n children,\r\n defaultTheme = \"system\",\r\n storageKey = \"vite-ui-theme\",\r\n ...props\r\n}: ThemeProviderProps) {\r\n const [theme, setTheme] = useState<Theme>(\r\n () => (localStorage.getItem(storageKey) as Theme) || defaultTheme\r\n )\r\n\r\n useEffect(() => {\r\n const root = window.document.documentElement\r\n\r\n root.classList.remove(\"light\", \"dark\")\r\n\r\n if (theme === \"system\") {\r\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\")\r\n \r\n const applySystemTheme = () => {\r\n root.classList.remove(\"light\", \"dark\")\r\n root.classList.add(mediaQuery.matches ? \"dark\" : \"light\")\r\n }\r\n\r\n applySystemTheme()\r\n \r\n mediaQuery.addEventListener(\"change\", applySystemTheme)\r\n return () => mediaQuery.removeEventListener(\"change\", applySystemTheme)\r\n }\r\n\r\n root.classList.add(theme)\r\n }, [theme])\r\n\r\n const value = {\r\n theme,\r\n setTheme: (theme: Theme) => {\r\n localStorage.setItem(storageKey, theme)\r\n setTheme(theme)\r\n },\r\n }\r\n\r\n return (\r\n <ThemeProviderContext.Provider {...props} value={value}>\r\n {children}\r\n </ThemeProviderContext.Provider>\r\n )\r\n}\r\n\r\nexport const useTheme = () => {\r\n const context = useContext(ThemeProviderContext)\r\n\r\n if (context === undefined)\r\n throw new Error(\"useTheme must be used within a ThemeProvider\")\r\n\r\n return context\r\n}\r\n","import React from \"react\"\r\nimport { Moon, Sun } from \"lucide-react\"\r\nimport { useTheme } from \"./ThemeProvider\"\r\nimport { Button } from \"../components/button/Button\"\r\n\r\nexport function ThemeToggle() {\r\n const { setTheme, theme } = useTheme()\r\n\r\n return (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => setTheme(theme === \"light\" ? \"dark\" : \"light\")}\r\n >\r\n <Sun className=\"h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0\" />\r\n <Moon className=\"absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100\" />\r\n <span className=\"sr-only\">Toggle theme</span>\r\n </Button>\r\n )\r\n}\r\n","import { useState, useCallback, useEffect } from 'react';\r\n\r\ninterface AsyncState<T> {\r\n data: T | null;\r\n error: Error | null;\r\n isLoading: boolean;\r\n}\r\n\r\n/**\r\n * A hook for managing asynchronous operations.\r\n */\r\nexport function useAsync<T>(asyncFunction: () => Promise<T>, immediate = true) {\r\n const [state, setState] = useState<AsyncState<T>>({\r\n data: null,\r\n error: null,\r\n isLoading: false,\r\n });\r\n\r\n const execute = useCallback(async () => {\r\n setState({ data: null, error: null, isLoading: true });\r\n try {\r\n const response = await asyncFunction();\r\n setState({ data: response, error: null, isLoading: false });\r\n return response;\r\n } catch (error: any) {\r\n setState({ data: null, error: error as Error, isLoading: false });\r\n throw error;\r\n }\r\n }, [asyncFunction]);\r\n\r\n useEffect(() => {\r\n if (immediate) {\r\n execute();\r\n }\r\n }, [execute, immediate]);\r\n\r\n return { ...state, execute };\r\n}\r\n\r\n/**\r\n * A hook for fetching data from a URL.\r\n */\r\nexport function useFetch<T>(url: string, options?: RequestInit) {\r\n const fetcher = useCallback(() => fetch(url, options).then((res) => res.json()), [url, options]);\r\n return useAsync<T>(fetcher);\r\n}\r\n","import { useState, useCallback, useRef, useEffect } from 'react';\r\n\r\nexport interface ChatMessage {\r\n id: string;\r\n content: string;\r\n senderId: string;\r\n timestamp: Date;\r\n status: 'sending' | 'sent' | 'error';\r\n metadata?: Record<string, any>;\r\n}\r\n\r\nexport interface UseChatOptions {\r\n /** Initial messages to populate the chat */\r\n initialMessages?: ChatMessage[];\r\n /** Callback function to handle sending messages to a backend */\r\n onSendMessage?: (content: string) => Promise<void>;\r\n /** Threshold in pixels to trigger auto-scroll */\r\n scrollThreshold?: number;\r\n}\r\n\r\n/**\r\n * A comprehensive hook for managing chat state, optimistic updates, and scroll behavior.\r\n * \r\n * @example\r\n * const { messages, sendMessage, scrollRef } = useChat({\r\n * onSendMessage: async (content) => await api.post('/messages', { content })\r\n * });\r\n */\r\nexport function useChat({ \r\n initialMessages = [], \r\n onSendMessage,\r\n scrollThreshold = 100 \r\n}: UseChatOptions = {}) {\r\n const [messages, setMessages] = useState<ChatMessage[]>(initialMessages);\r\n const [isTyping, setIsTyping] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n const isAtBottom = useRef(true);\r\n\r\n const scrollToBottom = useCallback((behavior: ScrollBehavior = 'smooth') => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTo({\r\n top: scrollRef.current.scrollHeight,\r\n behavior,\r\n });\r\n }\r\n }, []);\r\n\r\n // Handle scroll events to detect if user is at bottom\r\n const handleScroll = useCallback(() => {\r\n if (scrollRef.current) {\r\n const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;\r\n isAtBottom.current = scrollHeight - scrollTop - clientHeight < scrollThreshold;\r\n }\r\n }, [scrollThreshold]);\r\n\r\n // Auto-scroll when new messages arrive if user was already at bottom\r\n useEffect(() => {\r\n if (isAtBottom.current) {\r\n scrollToBottom();\r\n }\r\n }, [messages, scrollToBottom]);\r\n\r\n /**\r\n * Sends a message with optimistic update support.\r\n */\r\n const sendMessage = useCallback(async (content: string, senderId: string) => {\r\n if (!content.trim()) return;\r\n\r\n const tempId = crypto.randomUUID();\r\n const newMessage: ChatMessage = {\r\n id: tempId,\r\n content,\r\n senderId,\r\n timestamp: new Date(),\r\n status: 'sending',\r\n };\r\n\r\n setMessages((prev) => [...prev, newMessage]);\r\n\r\n try {\r\n if (onSendMessage) {\r\n await onSendMessage(content);\r\n }\r\n setMessages((prev) =>\r\n prev.map((msg) => (msg.id === tempId ? { ...msg, status: 'sent' } : msg))\r\n );\r\n } catch (error) {\r\n setMessages((prev) =>\r\n prev.map((msg) => (msg.id === tempId ? { ...msg, status: 'error' } : msg))\r\n );\r\n }\r\n }, [onSendMessage]);\r\n\r\n /**\r\n * Clears all messages from the state.\r\n */\r\n const clearMessages = useCallback(() => {\r\n setMessages([]);\r\n }, []);\r\n\r\n return {\r\n messages,\r\n setMessages,\r\n sendMessage,\r\n clearMessages,\r\n isTyping,\r\n setIsTyping,\r\n isLoading,\r\n setIsLoading,\r\n scrollRef,\r\n handleScroll,\r\n scrollToBottom,\r\n };\r\n}\r\n","import { useState, useCallback, useMemo } from 'react';\r\nimport type { Message, MessageStatus } from '../components/chat/types';\r\n\r\nexport function useChatMessages(initialMessages: Message[] = []) {\r\n const [messages, setMessages] = useState<Message[]>(initialMessages);\r\n\r\n const addMessage = useCallback((message: Message) => {\r\n setMessages(prev => [...prev, message]);\r\n }, []);\r\n\r\n const updateMessageStatus = useCallback((id: string, status: MessageStatus) => {\r\n setMessages(prev => prev.map(m => m.id === id ? { ...m, status } : m));\r\n }, []);\r\n\r\n const deleteMessage = useCallback((id: string) => {\r\n setMessages(prev => prev.filter(m => m.id !== id));\r\n }, []);\r\n\r\n const editMessage = useCallback((id: string, content: string) => {\r\n setMessages(prev => prev.map(m => m.id === id ? { ...m, content, isEdited: true } : m));\r\n }, []);\r\n\r\n const addReaction = useCallback((messageId: string, emoji: string, userId: string) => {\r\n setMessages(prev => prev.map(m => {\r\n if (m.id !== messageId) return m;\r\n \r\n const reactions = { ...(m.reactions || {}) };\r\n const users = reactions[emoji] || [];\r\n \r\n if (users.includes(userId)) {\r\n reactions[emoji] = users.filter(id => id !== userId);\r\n if (reactions[emoji].length === 0) delete reactions[emoji];\r\n } else {\r\n reactions[emoji] = [...users, userId];\r\n }\r\n \r\n return { ...m, reactions };\r\n }));\r\n }, []);\r\n\r\n const clearMessages = useCallback(() => {\r\n setMessages([]);\r\n }, []);\r\n\r\n return {\r\n messages,\r\n setMessages,\r\n addMessage,\r\n updateMessageStatus,\r\n deleteMessage,\r\n editMessage,\r\n addReaction,\r\n clearMessages\r\n };\r\n}\r\n","import { useState, useMemo } from 'react';\r\nimport type { Message } from '../components/chat/types';\r\n\r\nexport function useChatSearch(messages: Message[]) {\r\n const [query, setQuery] = useState(\"\");\r\n\r\n const results = useMemo(() => {\r\n if (!query.trim()) return [];\r\n const lowerQuery = query.toLowerCase();\r\n return messages.filter(m => \r\n m.content.toLowerCase().includes(lowerQuery)\r\n );\r\n }, [messages, query]);\r\n\r\n return {\r\n query,\r\n setQuery,\r\n results\r\n };\r\n}\r\n","import { useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Hook that alerts when clicks happen outside of the passed ref.\r\n */\r\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\r\n handler: (event: MouseEvent | TouchEvent) => void\r\n): React.RefObject<T> {\r\n const ref = useRef<T>(null);\r\n\r\n useEffect(() => {\r\n const listener = (event: MouseEvent | TouchEvent) => {\r\n const el = ref.current;\r\n if (!el || el.contains((event?.target as Node) || null)) {\r\n return;\r\n }\r\n\r\n handler(event);\r\n };\r\n\r\n document.addEventListener('mousedown', listener);\r\n document.addEventListener('touchstart', listener);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', listener);\r\n document.removeEventListener('touchstart', listener);\r\n };\r\n }, [handler]);\r\n\r\n return ref;\r\n}\r\n","import { useState, useCallback } from 'react';\r\n\r\nexport interface UseClipboardOptions {\r\n /** Time in ms to reset the 'copied' state */\r\n timeout?: number;\r\n}\r\n\r\n/**\r\n * A hook to interact with the system clipboard.\r\n * \r\n * @example\r\n * const { copy, copied } = useClipboard();\r\n * return <button onClick={() => copy('Hello')}> {copied ? 'Copied!' : 'Copy'} </button>;\r\n */\r\nexport function useClipboard({ timeout = 2000 }: UseClipboardOptions = {}) {\r\n const [copied, setCopied] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const copy = useCallback(async (text: string) => {\r\n if (!navigator?.clipboard) {\r\n setError(new Error('Clipboard API not supported'));\r\n return;\r\n }\r\n\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), timeout);\r\n } catch (err) {\r\n setError(err instanceof Error ? err : new Error('Failed to copy'));\r\n }\r\n }, [timeout]);\r\n\r\n return { copy, copied, error };\r\n}\r\n","import { useState, useEffect } from 'react';\r\n\r\n/**\r\n * A hook that returns a debounced version of the provided value.\r\n * Useful for search inputs or any value that changes frequently.\r\n */\r\nexport function useDebounce<T>(value: T, delay: number): T {\r\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\r\n\r\n useEffect(() => {\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, delay);\r\n\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n }, [value, delay]);\r\n\r\n return debouncedValue;\r\n}\r\n","import { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface DragState {\r\n isDragging: boolean;\r\n offset: { x: number; y: number };\r\n velocity: { x: number; y: number };\r\n}\r\n\r\n/**\r\n * Hook to provide basic drag gesture support.\r\n * Zero dependencies, works with mouse and touch.\r\n */\r\nexport function useDrag(onDrag?: (state: DragState) => void) {\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [offset, setOffset] = useState({ x: 0, y: 0 });\r\n \r\n const startPos = useRef({ x: 0, y: 0 });\r\n const lastPos = useRef({ x: 0, y: 0 });\r\n const lastTime = useRef(Date.now());\r\n const velocity = useRef({ x: 0, y: 0 });\r\n\r\n const handleStart = useCallback((x: number, y: number) => {\r\n setIsDragging(true);\r\n startPos.current = { x: x - offset.x, y: y - offset.y };\r\n lastPos.current = { x, y };\r\n lastTime.current = Date.now();\r\n }, [offset]);\r\n\r\n const handleMove = useCallback((x: number, y: number) => {\r\n if (!isDragging) return;\r\n\r\n const newX = x - startPos.current.x;\r\n const newY = y - startPos.current.y;\r\n \r\n const currentTime = Date.now();\r\n const deltaTime = currentTime - lastTime.current;\r\n \r\n if (deltaTime > 0) {\r\n velocity.current = {\r\n x: (x - lastPos.current.x) / deltaTime,\r\n y: (y - lastPos.current.y) / deltaTime,\r\n };\r\n }\r\n\r\n setOffset({ x: newX, y: newY });\r\n lastPos.current = { x, y };\r\n lastTime.current = currentTime;\r\n\r\n onDrag?.({ isDragging: true, offset: { x: newX, y: newY }, velocity: velocity.current });\r\n }, [isDragging, onDrag]);\r\n\r\n const handleEnd = useCallback(() => {\r\n setIsDragging(false);\r\n onDrag?.({ isDragging: false, offset, velocity: velocity.current });\r\n }, [offset, onDrag]);\r\n\r\n useEffect(() => {\r\n const onMouseMove = (e: MouseEvent) => handleMove(e.clientX, e.clientY);\r\n const onTouchMove = (e: TouchEvent) => {\r\n if (e.touches[0]) handleMove(e.touches[0].clientX, e.touches[0].clientY);\r\n };\r\n const onMouseUp = () => handleEnd();\r\n const onTouchEnd = () => handleEnd();\r\n\r\n if (isDragging) {\r\n window.addEventListener('mousemove', onMouseMove);\r\n window.addEventListener('mouseup', onMouseUp);\r\n window.addEventListener('touchmove', onTouchMove);\r\n window.addEventListener('touchend', onTouchEnd);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', onMouseMove);\r\n window.removeEventListener('mouseup', onMouseUp);\r\n window.removeEventListener('touchmove', onTouchMove);\r\n window.removeEventListener('touchend', onTouchEnd);\r\n };\r\n }, [isDragging, handleMove, handleEnd]);\r\n\r\n return {\r\n isDragging,\r\n offset,\r\n dragProps: {\r\n onMouseDown: (e: React.MouseEvent) => handleStart(e.clientX, e.clientY),\r\n onTouchStart: (e: React.TouchEvent) => {\r\n if (e.touches[0]) handleStart(e.touches[0].clientX, e.touches[0].clientY);\r\n },\r\n style: { cursor: isDragging ? 'grabbing' : 'grab', touchAction: 'none' }\r\n }\r\n };\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\nexport interface ElementScrollValues {\r\n progress: number; // 0 to 1\r\n scrollY: number;\r\n isIntersecting: boolean;\r\n}\r\n\r\n/**\r\n * Hook to track the scroll progress of a specific element relative to the viewport.\r\n * Perfect for parallax effects on specific sections.\r\n */\r\nexport function useElementScroll(ref: React.RefObject<HTMLElement>): ElementScrollValues {\r\n const [values, setValues] = useState<ElementScrollValues>({\r\n progress: 0,\r\n scrollY: 0,\r\n isIntersecting: false,\r\n });\r\n\r\n const ticking = useRef(false);\r\n\r\n useEffect(() => {\r\n const element = ref.current;\r\n if (!element) return;\r\n\r\n const updateScroll = () => {\r\n if (!ticking.current) {\r\n window.requestAnimationFrame(() => {\r\n const rect = element.getBoundingClientRect();\r\n const windowHeight = window.innerHeight;\r\n \r\n // Calculate how much of the element has passed through the viewport\r\n // 0 = element top is at window bottom\r\n // 1 = element bottom is at window top\r\n const totalDistance = windowHeight + rect.height;\r\n const currentDistance = windowHeight - rect.top;\r\n const progress = Math.max(0, Math.min(1, currentDistance / totalDistance));\r\n\r\n setValues({\r\n progress,\r\n scrollY: window.scrollY,\r\n isIntersecting: rect.top < windowHeight && rect.bottom > 0,\r\n });\r\n \r\n ticking.current = false;\r\n });\r\n ticking.current = true;\r\n }\r\n };\r\n\r\n window.addEventListener('scroll', updateScroll, { passive: true });\r\n window.addEventListener('resize', updateScroll);\r\n updateScroll();\r\n\r\n return () => {\r\n window.removeEventListener('scroll', updateScroll);\r\n window.removeEventListener('resize', updateScroll);\r\n };\r\n }, [ref]);\r\n\r\n return values;\r\n}\r\n","import { useLayoutEffect, useRef } from 'react';\r\n\r\n/**\r\n * Hook to implement the FLIP (First, Last, Invert, Play) technique.\r\n * Enables smooth layout transitions when elements change position or size.\r\n */\r\nexport function useFlip(id: string, dependencies: any[]) {\r\n const lastRectRef = useRef<DOMRect | null>(null);\r\n\r\n useLayoutEffect(() => {\r\n const element = document.querySelector(`[data-flip-id=\"${id}\"]`) as HTMLElement;\r\n if (!element) return;\r\n\r\n const first = lastRectRef.current;\r\n const last = element.getBoundingClientRect();\r\n\r\n if (first) {\r\n const deltaX = first.left - last.left;\r\n const deltaY = first.top - last.top;\r\n const deltaW = first.width / last.width;\r\n const deltaH = first.height / last.height;\r\n\r\n // Only animate if there's a significant change\r\n if (Math.abs(deltaX) > 0.5 || Math.abs(deltaY) > 0.5 || Math.abs(deltaW - 1) > 0.01 || Math.abs(deltaH - 1) > 0.01) {\r\n element.animate([\r\n {\r\n transformOrigin: 'top left',\r\n transform: `translate(${deltaX}px, ${deltaY}px) scale(${deltaW}, ${deltaH})`\r\n },\r\n {\r\n transformOrigin: 'top left',\r\n transform: 'none'\r\n }\r\n ], {\r\n duration: 400,\r\n easing: 'cubic-bezier(0.2, 0.8, 0.2, 1)',\r\n });\r\n }\r\n }\r\n\r\n lastRectRef.current = last;\r\n }, dependencies);\r\n\r\n return { 'data-flip-id': id };\r\n}\r\n","import type { FormEvent } from 'react';\r\nimport { useState, useCallback } from 'react';\r\n\r\ninterface UseFormOptions<T> {\r\n initialValues: T;\r\n onSubmit: (values: T) => void | Promise<void>;\r\n}\r\n\r\nexport function useForm<T extends Record<string, unknown>>({\r\n initialValues,\r\n onSubmit,\r\n}: UseFormOptions<T>) {\r\n const [values, setValues] = useState<T>(initialValues);\r\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n const handleChange = useCallback((\r\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>\r\n ) => {\r\n const { name, value, type } = e.target;\r\n const val = type === 'checkbox' ? (e.target as HTMLInputElement).checked : value;\r\n\r\n setValues((prev) => ({ ...prev, [name]: val }));\r\n \r\n // Clear error when user starts typing\r\n if (errors[name as keyof T]) {\r\n setErrors((prev) => ({ ...prev, [name]: '' }));\r\n }\r\n }, [errors]);\r\n\r\n const handleSubmit = useCallback(async (e: FormEvent<HTMLFormElement>) => {\r\n e.preventDefault();\r\n const form = e.currentTarget;\r\n \r\n if (!form.checkValidity()) {\r\n const newErrors: Partial<Record<keyof T, string>> = {};\r\n Array.from(form.elements).forEach((element) => {\r\n const input = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (input.name && !input.validity.valid) {\r\n newErrors[input.name as keyof T] = input.validationMessage;\r\n }\r\n });\r\n setErrors(newErrors);\r\n return;\r\n }\r\n\r\n setIsSubmitting(true);\r\n try {\r\n await onSubmit(values);\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n }, [values, onSubmit]);\r\n\r\n const register = useCallback((name: keyof T) => ({\r\n name: name as string,\r\n value: values[name] as string | number | readonly string[] | undefined,\r\n onChange: handleChange,\r\n error: errors[name],\r\n }), [values, errors, handleChange]);\r\n\r\n return {\r\n values,\r\n errors,\r\n isSubmitting,\r\n handleChange,\r\n handleSubmit,\r\n register,\r\n setValues,\r\n setErrors,\r\n };\r\n}\r\n","import { useState, useCallback, useMemo } from 'react';\r\n\r\nexport interface HistoryState<T> {\r\n past: T[];\r\n present: T;\r\n future: T[];\r\n}\r\n\r\n/**\r\n * A generic hook for managing state with Undo and Redo capabilities.\r\n * \r\n * @example\r\n * const { state, set, undo, redo, canUndo, canRedo } = useHistory(initialData);\r\n */\r\nexport function useHistory<T>(initialState: T) {\r\n const [history, setHistory] = useState<HistoryState<T>>({\r\n past: [],\r\n present: initialState,\r\n future: [],\r\n });\r\n\r\n const canUndo = history.past.length > 0;\r\n const canRedo = history.future.length > 0;\r\n\r\n const undo = useCallback(() => {\r\n if (!canUndo) return;\r\n\r\n setHistory((prev) => {\r\n const previous = prev.past[prev.past.length - 1];\r\n if (previous === undefined) return prev;\r\n \r\n const newPast = prev.past.slice(0, prev.past.length - 1);\r\n\r\n return {\r\n past: newPast,\r\n present: previous,\r\n future: [prev.present, ...prev.future],\r\n };\r\n });\r\n }, [canUndo]);\r\n\r\n const redo = useCallback(() => {\r\n if (!canRedo) return;\r\n\r\n setHistory((prev) => {\r\n const next = prev.future[0];\r\n if (next === undefined) return prev;\r\n\r\n const newFuture = prev.future.slice(1);\r\n\r\n return {\r\n past: [...prev.past, prev.present],\r\n present: next,\r\n future: newFuture,\r\n };\r\n });\r\n }, [canRedo]);\r\n\r\n const set = useCallback((newPresent: T | ((prev: T) => T)) => {\r\n setHistory((prev) => {\r\n const resolved = typeof newPresent === 'function' \r\n ? (newPresent as (p: T) => T)(prev.present) \r\n : newPresent;\r\n\r\n if (prev.present === resolved) return prev;\r\n\r\n return {\r\n past: [...prev.past, prev.present],\r\n present: resolved,\r\n future: [],\r\n };\r\n });\r\n }, []);\r\n\r\n const clear = useCallback(() => {\r\n setHistory({\r\n past: [],\r\n present: initialState,\r\n future: [],\r\n });\r\n }, [initialState]);\r\n\r\n return {\r\n state: history.present,\r\n set,\r\n undo,\r\n redo,\r\n clear,\r\n canUndo,\r\n canRedo,\r\n history,\r\n };\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Hook to detect user inactivity.\r\n * Useful for dimming UI or triggering ambient animations.\r\n */\r\nexport function useIdle(timeout: number = 3000): boolean {\r\n const [isIdle, setIsIdle] = useState(false);\r\n const timeoutId = useRef<NodeJS.Timeout>();\r\n\r\n useEffect(() => {\r\n const handleActivity = () => {\r\n setIsIdle(false);\r\n if (timeoutId.current) clearTimeout(timeoutId.current);\r\n \r\n timeoutId.current = setTimeout(() => {\r\n setIsIdle(true);\r\n }, timeout);\r\n };\r\n\r\n const events = ['mousemove', 'mousedown', 'keydown', 'touchstart', 'scroll'];\r\n \r\n events.forEach(event => {\r\n window.addEventListener(event, handleActivity);\r\n });\r\n\r\n handleActivity(); // Initialize\r\n\r\n return () => {\r\n events.forEach(event => {\r\n window.removeEventListener(event, handleActivity);\r\n });\r\n if (timeoutId.current) clearTimeout(timeoutId.current);\r\n };\r\n }, [timeout]);\r\n\r\n return isIdle;\r\n}\r\n","import { useEffect, useRef, useCallback } from 'react';\r\n\r\nexport interface UseInfiniteScrollOptions {\r\n /** Callback function to load more data */\r\n onLoadMore: () => void;\r\n /** Whether more data is currently being loaded */\r\n isLoading: boolean;\r\n /** Whether there is more data to load */\r\n hasMore: boolean;\r\n /** Distance from the bottom in pixels to trigger loading */\r\n threshold?: number;\r\n /** Root element for the IntersectionObserver (defaults to viewport) */\r\n root?: Element | null;\r\n}\r\n\r\n/**\r\n * A hook to implement infinite scrolling using the Intersection Observer API.\r\n * \r\n * @example\r\n * const loaderRef = useInfiniteScroll({ onLoadMore: fetchNextPage, hasMore, isLoading });\r\n * return <div ref={loaderRef}>{isLoading && <Spinner />}</div>;\r\n */\r\nexport function useInfiniteScroll({\r\n onLoadMore,\r\n isLoading,\r\n hasMore,\r\n threshold = 100,\r\n root = null,\r\n}: UseInfiniteScrollOptions) {\r\n const observerRef = useRef<IntersectionObserver | null>(null);\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleObserver = useCallback(\r\n (entries: IntersectionObserverEntry[]) => {\r\n const target = entries[0];\r\n if (target && target.isIntersecting && hasMore && !isLoading) {\r\n onLoadMore();\r\n }\r\n },\r\n [hasMore, isLoading, onLoadMore]\r\n );\r\n\r\n useEffect(() => {\r\n const element = triggerRef.current;\r\n if (!element) return;\r\n\r\n observerRef.current = new IntersectionObserver(handleObserver, {\r\n root,\r\n rootMargin: `0px 0px ${threshold}px 0px`,\r\n threshold: 0.1,\r\n });\r\n\r\n observerRef.current.observe(element);\r\n\r\n return () => {\r\n if (observerRef.current) {\r\n observerRef.current.disconnect();\r\n }\r\n };\r\n }, [handleObserver, root, threshold]);\r\n\r\n return triggerRef;\r\n}\r\n","import type { RefObject } from 'react';\r\nimport { useState, useEffect, useRef } from 'react';\r\n\r\ninterface UseIntersectionOptions extends IntersectionObserverInit {\r\n freezeOnceVisible?: boolean;\r\n}\r\n\r\nexport function useIntersection(\r\n elementRef: RefObject<Element>,\r\n {\r\n threshold = 0,\r\n root = null,\r\n rootMargin = '0%',\r\n freezeOnceVisible = false,\r\n }: UseIntersectionOptions = {}\r\n): IntersectionObserverEntry | undefined {\r\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\r\n\r\n const frozen = entry?.isIntersecting && freezeOnceVisible;\r\n\r\n const updateEntry = ([entry]: IntersectionObserverEntry[]): void => {\r\n setEntry(entry);\r\n };\r\n\r\n useEffect(() => {\r\n const node = elementRef?.current;\r\n const hasIOSupport = !!window.IntersectionObserver;\r\n\r\n if (!hasIOSupport || frozen || !node) return;\r\n\r\n const observerParams = { threshold, root, rootMargin };\r\n const observer = new IntersectionObserver(updateEntry, observerParams);\r\n\r\n observer.observe(node);\r\n\r\n return () => observer.disconnect();\r\n }, [elementRef, threshold, root, rootMargin, frozen]);\r\n\r\n return entry;\r\n}\r\n","import { useState, useCallback } from 'react';\r\n\r\nexport interface KanbanBoardTask {\r\n id: string;\r\n columnId: string;\r\n title: string;\r\n description?: string;\r\n priority?: 'low' | 'medium' | 'high';\r\n assignee?: {\r\n name: string;\r\n avatar?: string;\r\n };\r\n tags?: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface KanbanBoardColumn {\r\n id: string;\r\n title: string;\r\n taskIds: string[];\r\n}\r\n\r\nexport interface KanbanBoardState {\r\n columns: Record<string, KanbanBoardColumn>;\r\n columnOrder: string[];\r\n tasks: Record<string, KanbanBoardTask>;\r\n}\r\n\r\n/**\r\n * A specialized hook for managing Kanban board logic, including task movement and reordering.\r\n * \r\n * @example\r\n * const { board, moveTask } = useKanban(initialData);\r\n */\r\nexport function useKanban(initialBoard: KanbanBoardState) {\r\n const [board, setBoard] = useState<KanbanBoardState>(initialBoard);\r\n\r\n /**\r\n * Moves a task within the same column or to a different column.\r\n */\r\n const moveTask = useCallback((\r\n taskId: string,\r\n sourceColumnId: string,\r\n destinationColumnId: string,\r\n destinationIndex: number\r\n ) => {\r\n setBoard((prev) => {\r\n const sourceColumn = prev.columns[sourceColumnId];\r\n const destColumn = prev.columns[destinationColumnId];\r\n const task = prev.tasks[taskId];\r\n \r\n if (!sourceColumn || !destColumn || !task) return prev;\r\n\r\n const newTaskIds = Array.from(sourceColumn.taskIds);\r\n newTaskIds.splice(newTaskIds.indexOf(taskId), 1);\r\n\r\n const newSourceColumn: KanbanBoardColumn = {\r\n ...sourceColumn,\r\n taskIds: newTaskIds,\r\n };\r\n\r\n const newDestTaskIds = sourceColumnId === destinationColumnId \r\n ? newTaskIds \r\n : Array.from(destColumn.taskIds);\r\n \r\n newDestTaskIds.splice(destinationIndex, 0, taskId);\r\n\r\n const newDestColumn: KanbanBoardColumn = {\r\n ...destColumn,\r\n taskIds: newDestTaskIds,\r\n };\r\n\r\n return {\r\n ...prev,\r\n columns: {\r\n ...prev.columns,\r\n [sourceColumnId]: newSourceColumn,\r\n [destinationColumnId]: newDestColumn,\r\n },\r\n tasks: {\r\n ...prev.tasks,\r\n [taskId]: {\r\n ...task,\r\n columnId: destinationColumnId,\r\n },\r\n },\r\n };\r\n });\r\n }, []);\r\n\r\n /**\r\n * Reorders columns in the board.\r\n */\r\n const moveColumn = useCallback((columnId: string, destinationIndex: number) => {\r\n setBoard((prev) => {\r\n const newColumnOrder = Array.from(prev.columnOrder);\r\n newColumnOrder.splice(newColumnOrder.indexOf(columnId), 1);\r\n newColumnOrder.splice(destinationIndex, 0, columnId);\r\n\r\n return {\r\n ...prev,\r\n columnOrder: newColumnOrder,\r\n };\r\n });\r\n }, []);\r\n\r\n /**\r\n * Adds a new task to a specific column.\r\n */\r\n const addTask = useCallback((columnId: string, task: KanbanBoardTask) => {\r\n setBoard((prev) => {\r\n const column = prev.columns[columnId];\r\n if (!column) return prev;\r\n\r\n const newColumn: KanbanBoardColumn = {\r\n ...column,\r\n taskIds: [...column.taskIds, task.id],\r\n };\r\n\r\n return {\r\n ...prev,\r\n tasks: {\r\n ...prev.tasks,\r\n [task.id]: task,\r\n },\r\n columns: {\r\n ...prev.columns,\r\n [columnId]: newColumn,\r\n },\r\n };\r\n });\r\n }, []);\r\n\r\n /**\r\n * Removes a task from the board.\r\n */\r\n const removeTask = useCallback((taskId: string) => {\r\n setBoard((prev) => {\r\n const task = prev.tasks[taskId];\r\n if (!task) return prev;\r\n\r\n const column = prev.columns[task.columnId];\r\n if (!column) return prev;\r\n\r\n const newTasks = { ...prev.tasks };\r\n delete newTasks[taskId];\r\n\r\n const newColumn: KanbanBoardColumn = {\r\n ...column,\r\n taskIds: column.taskIds.filter((id) => id !== taskId),\r\n };\r\n\r\n return {\r\n ...prev,\r\n tasks: newTasks,\r\n columns: {\r\n ...prev.columns,\r\n [task.columnId]: newColumn,\r\n },\r\n };\r\n });\r\n }, []);\r\n\r\n return {\r\n board,\r\n setBoard,\r\n moveTask,\r\n moveColumn,\r\n addTask,\r\n removeTask,\r\n };\r\n}\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport type ShortcutHandler = (event: KeyboardEvent) => void;\r\n\r\nexport interface ShortcutMap {\r\n /** \r\n * Key combination string (e.g., 'mod+s', 'shift+enter', 'escape').\r\n * 'mod' maps to Command on Mac and Ctrl on Windows/Linux.\r\n */\r\n [shortcut: string]: ShortcutHandler;\r\n}\r\n\r\n/**\r\n * A hook to manage global keyboard shortcuts with automatic cleanup.\r\n * \r\n * @example\r\n * useKeyboardShortcuts({\r\n * 'mod+s': (e) => { e.preventDefault(); save(); },\r\n * 'escape': () => close(),\r\n * });\r\n */\r\nexport function useKeyboardShortcuts(shortcuts: ShortcutMap) {\r\n const shortcutsRef = useRef(shortcuts);\r\n shortcutsRef.current = shortcuts;\r\n\r\n useEffect(() => {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n const keys = [];\r\n const isMac = typeof window !== 'undefined' && /Mac|iPod|iPhone|iPad/.test(navigator.platform);\r\n \r\n if (event.ctrlKey || event.metaKey) {\r\n // Handle 'mod' abstraction\r\n keys.push('mod');\r\n }\r\n \r\n if (event.shiftKey) keys.push('shift');\r\n if (event.altKey) keys.push('alt');\r\n \r\n const key = event.key.toLowerCase();\r\n if (!['control', 'meta', 'shift', 'alt'].includes(key)) {\r\n keys.push(key);\r\n }\r\n\r\n const shortcutStr = keys.join('+');\r\n \r\n // Try exact match first, then fallback to single key\r\n const handler = shortcutsRef.current[shortcutStr] || shortcutsRef.current[key];\r\n\r\n if (handler) {\r\n handler(event);\r\n }\r\n };\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n return () => window.removeEventListener('keydown', handleKeyDown);\r\n }, []);\r\n}\r\n","import { useEffect, useRef } from 'react';\r\n\r\n/**\r\n * A hook that runs an effect only once when the component mounts.\r\n */\r\nexport function useOnMount(effect: () => void) {\r\n const initialized = useRef(false);\r\n\r\n useEffect(() => {\r\n if (!initialized.current) {\r\n initialized.current = true;\r\n effect();\r\n }\r\n }, []);\r\n}\r\n\r\n/**\r\n * A hook that runs an effect only once when the component unmounts.\r\n */\r\nexport function useOnUnmount(effect: () => void) {\r\n useEffect(() => {\r\n return () => {\r\n effect();\r\n };\r\n }, []);\r\n}\r\n","import { useState, useCallback, useEffect } from 'react';\r\n\r\n/**\r\n * A hook to manage state synchronized with localStorage.\r\n * \r\n * @example\r\n * const [theme, setTheme] = useLocalStorage('theme', 'dark');\r\n */\r\nexport function useLocalStorage<T>(key: string, initialValue: T) {\r\n // State to store our value\r\n // Pass initial state function to useState so logic is only executed once\r\n const [storedValue, setStoredValue] = useState<T>(() => {\r\n if (typeof window === 'undefined') {\r\n return initialValue;\r\n }\r\n try {\r\n const item = window.localStorage.getItem(key);\r\n return item ? JSON.parse(item) : initialValue;\r\n } catch (error) {\r\n console.warn(`Error reading localStorage key \"${key}\":`, error);\r\n return initialValue;\r\n }\r\n });\r\n\r\n // Return a wrapped version of useState's setter function that\r\n // persists the new value to localStorage.\r\n const setValue = useCallback((value: T | ((val: T) => T)) => {\r\n try {\r\n // Allow value to be a function so we have same API as useState\r\n const valueToStore = value instanceof Function ? value(storedValue) : value;\r\n setStoredValue(valueToStore);\r\n if (typeof window !== 'undefined') {\r\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\r\n }\r\n } catch (error) {\r\n console.warn(`Error setting localStorage key \"${key}\":`, error);\r\n }\r\n }, [key, storedValue]);\r\n\r\n return [storedValue, setValue] as const;\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\nexport interface MousePosition {\r\n x: number;\r\n y: number;\r\n elementX: number;\r\n elementY: number;\r\n percentageX: number;\r\n percentageY: number;\r\n}\r\n\r\n/**\r\n * Hook to track mouse position relative to the window or a specific element.\r\n * Uses requestAnimationFrame for 120fps performance.\r\n */\r\nexport function useMousePosition(ref?: React.RefObject<HTMLElement>): MousePosition {\r\n const [position, setPosition] = useState<MousePosition>({\r\n x: 0,\r\n y: 0,\r\n elementX: 0,\r\n elementY: 0,\r\n percentageX: 0,\r\n percentageY: 0,\r\n });\r\n\r\n const requestRef = useRef<number>();\r\n const latestMousePos = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\r\n\r\n useEffect(() => {\r\n const handleMouseMove = (event: MouseEvent) => {\r\n latestMousePos.current = { x: event.clientX, y: event.clientY };\r\n \r\n if (!requestRef.current) {\r\n requestRef.current = requestAnimationFrame(updatePosition);\r\n }\r\n };\r\n\r\n const updatePosition = () => {\r\n const { x, y } = latestMousePos.current;\r\n let elementX = 0;\r\n let elementY = 0;\r\n let percentageX = 0;\r\n let percentageY = 0;\r\n\r\n if (ref?.current) {\r\n const rect = ref.current.getBoundingClientRect();\r\n elementX = x - rect.left;\r\n elementY = y - rect.top;\r\n percentageX = Math.max(0, Math.min(100, (elementX / rect.width) * 100));\r\n percentageY = Math.max(0, Math.min(100, (elementY / rect.height) * 100));\r\n }\r\n\r\n setPosition({\r\n x,\r\n y,\r\n elementX,\r\n elementY,\r\n percentageX,\r\n percentageY,\r\n });\r\n\r\n requestRef.current = undefined;\r\n };\r\n\r\n window.addEventListener('mousemove', handleMouseMove);\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', handleMouseMove);\r\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\r\n };\r\n }, [ref]);\r\n\r\n return position;\r\n}\r\n","import { useState, useEffect } from 'react';\r\n\r\nexport interface Orientation {\r\n alpha: number | null; // rotation around z-axis\r\n beta: number | null; // rotation around x-axis\r\n gamma: number | null; // rotation around y-axis\r\n absolute: boolean;\r\n}\r\n\r\n/**\r\n * Hook to track device orientation.\r\n * Useful for mobile parallax and tilt effects.\r\n */\r\nexport function useOrientation(): Orientation {\r\n const [orientation, setOrientation] = useState<Orientation>({\r\n alpha: null,\r\n beta: null,\r\n gamma: null,\r\n absolute: false,\r\n });\r\n\r\n useEffect(() => {\r\n const handleOrientation = (event: DeviceOrientationEvent) => {\r\n setOrientation({\r\n alpha: event.alpha,\r\n beta: event.beta,\r\n gamma: event.gamma,\r\n absolute: event.absolute,\r\n });\r\n };\r\n\r\n // Check if DeviceOrientationEvent is supported and if permission is needed (iOS)\r\n if (typeof window !== 'undefined' && 'DeviceOrientationEvent' in window) {\r\n window.addEventListener('deviceorientation', handleOrientation);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('deviceorientation', handleOrientation);\r\n };\r\n }, []);\r\n\r\n return orientation;\r\n}\r\n","import { useRef, useEffect } from 'react';\r\n\r\n/**\r\n * A hook that stores the previous value of a variable.\r\n */\r\nexport function usePrevious<T>(value: T): T | undefined {\r\n const ref = useRef<T>();\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n\r\n return ref.current;\r\n}\r\n","import { useEffect, useRef, useCallback } from 'react';\r\n\r\nexport function useReadReceipts(onRead: (messageId: string) => void) {\r\n const observer = useRef<IntersectionObserver | null>(null);\r\n\r\n const registerMessage = useCallback((el: HTMLElement | null, messageId: string, isMe: boolean) => {\r\n if (!el || isMe || !observer.current) return;\r\n \r\n el.dataset.messageId = messageId;\r\n observer.current.observe(el);\r\n }, []);\r\n\r\n useEffect(() => {\r\n observer.current = new IntersectionObserver((entries) => {\r\n entries.forEach(entry => {\r\n if (entry.isIntersecting) {\r\n const messageId = (entry.target as HTMLElement).dataset.messageId;\r\n if (messageId) {\r\n onRead(messageId);\r\n observer.current?.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n }, { threshold: 0.5 });\r\n\r\n return () => {\r\n observer.current?.disconnect();\r\n };\r\n }, [onRead]);\r\n\r\n return { registerMessage };\r\n}\r\n","import { useState, useEffect } from 'react';\r\n\r\n/**\r\n * Hook to detect if the user has requested reduced motion via system settings.\r\n * Useful for disabling heavy animations for accessibility.\r\n */\r\nexport function useReducedMotion(): boolean {\r\n const [reducedMotion, setReducedMotion] = useState(false);\r\n\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n setReducedMotion(mediaQuery.matches);\r\n\r\n const handler = (event: MediaQueryListEvent) => {\r\n setReducedMotion(event.matches);\r\n };\r\n\r\n mediaQuery.addEventListener('change', handler);\r\n return () => mediaQuery.removeEventListener('change', handler);\r\n }, []);\r\n\r\n return reducedMotion;\r\n}\r\n","import type { RefObject } from 'react';\r\nimport { useState, useEffect, useLayoutEffect } from 'react';\r\n\r\nexport type Breakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\r\n\r\nconst breakpoints: Record<Breakpoint, number> = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n};\r\n\r\nexport function useMediaQuery(query: string): boolean {\r\n const [matches, setMatches] = useState(false);\r\n\r\n useEffect(() => {\r\n const media = window.matchMedia(query);\r\n setMatches(media.matches);\r\n \r\n const listener = () => setMatches(media.matches);\r\n media.addEventListener('change', listener);\r\n return () => media.removeEventListener('change', listener);\r\n }, [query]);\r\n\r\n return matches;\r\n}\r\n\r\nexport function useBreakpoint(breakpoint: Breakpoint): boolean {\r\n return useMediaQuery(`(min-width: ${breakpoints[breakpoint]}px)`);\r\n}\r\n\r\ninterface ContainerSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport function useContainerQuery(ref: RefObject<HTMLElement>): ContainerSize {\r\n const [size, setSize] = useState<ContainerSize>({ width: 0, height: 0 });\r\n\r\n useLayoutEffect(() => {\r\n if (!ref.current) return;\r\n\r\n const observer = new ResizeObserver((entries) => {\r\n for (const entry of entries) {\r\n setSize({\r\n width: entry.contentRect.width,\r\n height: entry.contentRect.height,\r\n });\r\n }\r\n });\r\n\r\n observer.observe(ref.current);\r\n return () => observer.disconnect();\r\n }, [ref]);\r\n\r\n return size;\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\nexport type ScrollDirection = 'up' | 'down' | null;\r\n\r\n/**\r\n * Hook to detect scroll direction with a threshold to prevent jitter.\r\n */\r\nexport function useScrollDirection(threshold: number = 10): ScrollDirection {\r\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>(null);\r\n const lastScrollY = useRef(0);\r\n\r\n useEffect(() => {\r\n const updateScrollDirection = () => {\r\n const scrollY = window.scrollY;\r\n\r\n if (Math.abs(scrollY - lastScrollY.current) < threshold) {\r\n return;\r\n }\r\n\r\n const direction = scrollY > lastScrollY.current ? 'down' : 'up';\r\n \r\n if (direction !== scrollDirection && (scrollY > 0 || direction === 'down')) {\r\n setScrollDirection(direction);\r\n }\r\n \r\n lastScrollY.current = scrollY > 0 ? scrollY : 0;\r\n };\r\n\r\n const onScroll = () => {\r\n window.requestAnimationFrame(updateScrollDirection);\r\n };\r\n\r\n window.addEventListener('scroll', onScroll);\r\n\r\n return () => window.removeEventListener('scroll', onScroll);\r\n }, [scrollDirection, threshold]);\r\n\r\n return scrollDirection;\r\n}\r\n","import { useLayoutEffect } from 'react';\r\n\r\n/**\r\n * Hook to lock body scroll.\r\n * Useful for modals, drawers, and overlays.\r\n * Handles scrollbar width to prevent layout shift.\r\n */\r\nexport function useScrollLock(lock: boolean = true) {\r\n useLayoutEffect(() => {\r\n if (!lock) return;\r\n\r\n // Get original body overflow and padding\r\n const originalStyle = window.getComputedStyle(document.body).overflow;\r\n const originalPaddingRight = window.getComputedStyle(document.body).paddingRight;\r\n\r\n // Calculate scrollbar width\r\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\r\n\r\n // Apply lock\r\n document.body.style.overflow = 'hidden';\r\n if (scrollbarWidth > 0) {\r\n document.body.style.paddingRight = `${parseFloat(originalPaddingRight) + scrollbarWidth}px`;\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = originalStyle;\r\n document.body.style.paddingRight = originalPaddingRight;\r\n };\r\n }, [lock]);\r\n}\r\n","/**\r\n * Utility to map a value from one range to another.\r\n */\r\nfunction interpolate(\r\n value: number,\r\n inputRange: [number, number],\r\n outputRange: [number, number]\r\n): number {\r\n const [inputMin, inputMax] = inputRange;\r\n const [outputMin, outputMax] = outputRange;\r\n \r\n const progress = (value - inputMin) / (inputMax - inputMin);\r\n const clampedProgress = Math.max(0, Math.min(1, progress));\r\n \r\n return outputMin + clampedProgress * (outputMax - outputMin);\r\n}\r\n\r\n/**\r\n * Hook to map a value (usually scroll progress) to a specific output range.\r\n * Useful for parallax translations, rotations, and opacity changes.\r\n */\r\nexport function useScrollTransform(\r\n value: number,\r\n inputRange: [number, number],\r\n outputRange: [number, number]\r\n): number {\r\n return interpolate(value, inputRange, outputRange);\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\n/**\r\n * Hook to track scroll velocity.\r\n * Useful for intensity-based animations (e.g., faster scroll = more blur).\r\n */\r\nexport function useScrollVelocity(): number {\r\n const [velocity, setVelocity] = useState(0);\r\n const lastScrollY = useRef(0);\r\n const lastTime = useRef(Date.now());\r\n const requestRef = useRef<number>();\r\n\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n const currentScrollY = window.scrollY;\r\n const currentTime = Date.now();\r\n const deltaTime = currentTime - lastTime.current;\r\n\r\n if (deltaTime > 0) {\r\n const distance = currentScrollY - lastScrollY.current;\r\n const currentVelocity = distance / deltaTime;\r\n setVelocity(currentVelocity);\r\n }\r\n\r\n lastScrollY.current = currentScrollY;\r\n lastTime.current = currentTime;\r\n\r\n // Decay velocity if no scroll event occurs\r\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\r\n requestRef.current = requestAnimationFrame(decayVelocity);\r\n };\r\n\r\n const decayVelocity = () => {\r\n setVelocity(prev => {\r\n if (Math.abs(prev) < 0.01) return 0;\r\n return prev * 0.9; // Decay factor\r\n });\r\n requestRef.current = requestAnimationFrame(decayVelocity);\r\n };\r\n\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n\r\n return () => {\r\n window.removeEventListener('scroll', handleScroll);\r\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\r\n };\r\n }, []);\r\n\r\n return velocity;\r\n}\r\n","import { useMemo } from 'react';\r\n\r\n/**\r\n * A lightweight fuzzy search utility.\r\n */\r\nfunction fuzzyMatch(query: string, text: string): boolean {\r\n const q = query.toLowerCase().replace(/\\s/g, '');\r\n const t = text.toLowerCase();\r\n let queryIdx = 0;\r\n for (let textIdx = 0; textIdx < t.length && queryIdx < q.length; textIdx++) {\r\n if (t[textIdx] === q[queryIdx]) queryIdx++;\r\n }\r\n return queryIdx === q.length;\r\n}\r\n\r\n/**\r\n * A hook for filtering data using a lightweight fuzzy search algorithm.\r\n * \r\n * @example\r\n * const filtered = useSearch(users, query, ['name', 'email']);\r\n */\r\nexport function useSearch<T>(\r\n data: T[], \r\n query: string, \r\n keys: (keyof T)[]\r\n): T[] {\r\n return useMemo(() => {\r\n if (!query.trim()) return data;\r\n\r\n return data.filter((item) =>\r\n keys.some((key) => {\r\n const value = item[key];\r\n if (value === null || value === undefined) return false;\r\n return fuzzyMatch(query, String(value));\r\n })\r\n );\r\n }, [data, query, keys]);\r\n}\r\n","import { useState, useEffect, useCallback } from 'react';\r\n\r\n/**\r\n * A hook for managing state in sessionStorage with automatic synchronization.\r\n */\r\nexport function useSessionStorage<T>(key: string, initialValue: T) {\r\n const readValue = useCallback((): T => {\r\n if (typeof window === 'undefined') return initialValue;\r\n\r\n try {\r\n const item = window.sessionStorage.getItem(key);\r\n return item ? (JSON.parse(item) as T) : initialValue;\r\n } catch (error) {\r\n console.warn(`Error reading sessionStorage key \"${key}\":`, error);\r\n return initialValue;\r\n }\r\n }, [initialValue, key]);\r\n\r\n const [storedValue, setStoredValue] = useState<T>(readValue);\r\n\r\n const setValue = useCallback((value: T | ((val: T) => T)) => {\r\n try {\r\n const valueToStore = value instanceof Function ? value(storedValue) : value;\r\n setStoredValue(valueToStore);\r\n if (typeof window !== 'undefined') {\r\n window.sessionStorage.setItem(key, JSON.stringify(valueToStore));\r\n }\r\n } catch (error) {\r\n console.warn(`Error setting sessionStorage key \"${key}\":`, error);\r\n }\r\n }, [key, storedValue]);\r\n\r\n useEffect(() => {\r\n setStoredValue(readValue());\r\n }, [readValue]);\r\n\r\n return [storedValue, setValue] as const;\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\ninterface SpringConfig {\r\n stiffness?: number;\r\n damping?: number;\r\n mass?: number;\r\n precision?: number;\r\n}\r\n\r\n/**\r\n * A lightweight spring physics hook for smooth value transitions.\r\n * Zero dependencies, high performance using requestAnimationFrame.\r\n */\r\nexport function useSpring(\r\n targetValue: number,\r\n config: SpringConfig = {}\r\n): number {\r\n const {\r\n stiffness = 0.15,\r\n damping = 0.8,\r\n mass = 1,\r\n precision = 0.01\r\n } = config;\r\n\r\n const [currentValue, setCurrentValue] = useState(targetValue);\r\n const velocityRef = useRef(0);\r\n const currentRef = useRef(targetValue);\r\n const requestRef = useRef<number>();\r\n\r\n useEffect(() => {\r\n const animate = () => {\r\n const distance = targetValue - currentRef.current;\r\n const force = distance * stiffness;\r\n const acceleration = force / mass;\r\n \r\n velocityRef.current = (velocityRef.current + acceleration) * damping;\r\n currentRef.current += velocityRef.current;\r\n\r\n if (Math.abs(distance) < precision && Math.abs(velocityRef.current) < precision) {\r\n currentRef.current = targetValue;\r\n setCurrentValue(targetValue);\r\n requestRef.current = undefined;\r\n return;\r\n }\r\n\r\n setCurrentValue(currentRef.current);\r\n requestRef.current = requestAnimationFrame(animate);\r\n };\r\n\r\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\r\n requestRef.current = requestAnimationFrame(animate);\r\n\r\n return () => {\r\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\r\n };\r\n }, [targetValue, stiffness, damping, mass, precision]);\r\n\r\n return currentValue;\r\n}\r\n","/**\r\n * Hook to calculate stagger delays for group animations.\r\n */\r\nexport function useStagger(index: number, staggerDelay: number = 100, baseDelay: number = 0) {\r\n return baseDelay + (index * staggerDelay);\r\n}\r\n\r\n/**\r\n * Hook to manage a sequence of animations.\r\n */\r\nexport function useSequence(count: number, interval: number = 100) {\r\n // This could be expanded to return an array of booleans or progress values\r\n // for each item in the sequence.\r\n return Array.from({ length: count }, (_, i) => i * interval);\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\nconst GLYPHS = '01XYZ#%&@$+-/<>!_';\r\n\r\n/**\r\n * Hook to create a \"hacker\" style text scramble reveal effect.\r\n */\r\nexport function useTextScramble(text: string, duration = 800, enabled = true) {\r\n const [output, setOutput] = useState(text);\r\n const frameRef = useRef<number>();\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setOutput(text);\r\n return;\r\n }\r\n\r\n const start = Date.now();\r\n\r\n const tick = () => {\r\n const elapsed = Date.now() - start;\r\n const progress = Math.min(elapsed / duration, 1);\r\n \r\n const scrambled = text.split('').map((char, i) => {\r\n if (char === ' ') return ' ';\r\n // Reveal character based on progress and position\r\n if (progress > (i / text.length)) return char;\r\n // Otherwise show a random glyph\r\n return GLYPHS[Math.floor(Math.random() * GLYPHS.length)];\r\n }).join('');\r\n\r\n setOutput(scrambled);\r\n\r\n if (progress < 1) {\r\n frameRef.current = requestAnimationFrame(tick);\r\n }\r\n };\r\n\r\n frameRef.current = requestAnimationFrame(tick);\r\n\r\n return () => {\r\n if (frameRef.current) cancelAnimationFrame(frameRef.current);\r\n };\r\n }, [text, duration, enabled]);\r\n\r\n return output;\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\n\r\n/**\r\n * A hook that returns a throttled version of the provided value.\r\n * Useful for scroll or resize events.\r\n */\r\nexport function useThrottle<T>(value: T, limit: number): T {\r\n const [throttledValue, setThrottledValue] = useState<T>(value);\r\n const lastRan = useRef(Date.now());\r\n\r\n useEffect(() => {\r\n const handler = setTimeout(() => {\r\n if (Date.now() - lastRan.current >= limit) {\r\n setThrottledValue(value);\r\n lastRan.current = Date.now();\r\n }\r\n }, limit - (Date.now() - lastRan.current));\r\n\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n }, [value, limit]);\r\n\r\n return throttledValue;\r\n}\r\n","import { useState, useEffect, useCallback, useRef } from 'react';\r\n\r\nexport function useTimer(initialSeconds: number = 0) {\r\n const [seconds, setSeconds] = useState(initialSeconds);\r\n const [isActive, setIsActive] = useState(false);\r\n const intervalRef = useRef<any>(null);\r\n\r\n const start = useCallback(() => {\r\n if (!isActive) {\r\n setIsActive(true);\r\n intervalRef.current = setInterval(() => {\r\n setSeconds((prev) => prev + 1);\r\n }, 1000);\r\n }\r\n }, [isActive]);\r\n\r\n const pause = useCallback(() => {\r\n if (isActive && intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n setIsActive(false);\r\n }\r\n }, [isActive]);\r\n\r\n const reset = useCallback(() => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n }\r\n setIsActive(false);\r\n setSeconds(0);\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n const formatTime = (totalSeconds: number) => {\r\n const hours = Math.floor(totalSeconds / 3600);\r\n const minutes = Math.floor((totalSeconds % 3600) / 60);\r\n const secs = totalSeconds % 60;\r\n return [hours, minutes, secs]\r\n .map((v) => (v < 10 ? '0' + v : v))\r\n .filter((v, i) => v !== '00' || i > 0)\r\n .join(':');\r\n };\r\n\r\n return {\r\n seconds,\r\n isActive,\r\n start,\r\n pause,\r\n reset,\r\n formattedTime: formatTime(seconds),\r\n };\r\n}\r\n","import { useContext } from 'react';\r\nimport { ToastContext } from '../components/feedback/ToastProvider';\r\n\r\nexport function useToast() {\r\n const context = useContext(ToastContext);\r\n if (!context) {\r\n throw new Error('useToast must be used within a ToastProvider');\r\n }\r\n return context;\r\n}\r\n","import { useState, useCallback } from 'react';\r\n\r\n/**\r\n * A hook for toggling a boolean value.\r\n */\r\nexport function useToggle(initialValue: boolean = false): [boolean, () => void, (value: boolean) => void] {\r\n const [value, setValue] = useState(initialValue);\r\n\r\n const toggle = useCallback(() => {\r\n setValue((v) => !v);\r\n }, []);\r\n\r\n return [value, toggle, setValue];\r\n}\r\n","import { useState, useCallback, useRef, useEffect } from 'react';\r\n\r\nexport function useTypingIndicator(timeout = 3000) {\r\n const [isTyping, setIsTyping] = useState(false);\r\n const timerRef = useRef<number | null>(null);\r\n\r\n const setTyping = useCallback((typing: boolean) => {\r\n setIsTyping(typing);\r\n \r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current);\r\n }\r\n\r\n if (typing) {\r\n timerRef.current = window.setTimeout(() => {\r\n setIsTyping(false);\r\n }, timeout);\r\n }\r\n }, [timeout]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timerRef.current) clearTimeout(timerRef.current);\r\n };\r\n }, []);\r\n\r\n return { isTyping, setTyping };\r\n}\r\n","import { flushSync } from 'react-dom';\r\n\r\n/**\r\n * Hook to wrap the native View Transitions API.\r\n * Allows for seamless transitions between DOM states.\r\n */\r\nexport function useViewTransition() {\r\n const startTransition = (updateCallback: () => void) => {\r\n // Fallback for browsers that don't support the View Transitions API\r\n if (!document.startViewTransition) {\r\n updateCallback();\r\n return;\r\n }\r\n\r\n document.startViewTransition(() => {\r\n // flushSync is required to ensure React updates the DOM synchronously\r\n // so the browser can capture the new state for the transition.\r\n flushSync(() => {\r\n updateCallback();\r\n });\r\n });\r\n };\r\n\r\n return { startTransition };\r\n}\r\n","import { useState, useMemo, useRef, useCallback, useLayoutEffect } from 'react';\r\n\r\nexport interface UseVirtualListOptions {\r\n /** Total number of items in the list */\r\n itemCount: number;\r\n /** Estimated height of a single item in pixels */\r\n itemHeight?: number;\r\n /** Number of items to render outside the visible area */\r\n overscan?: number;\r\n}\r\n\r\n/**\r\n * A high-performance hook for virtualizing long lists with dynamic or fixed heights.\r\n * Supports 120fps scrolling by only rendering visible items.\r\n * \r\n * @example\r\n * const { containerRef, visibleItems, totalHeight } = useVirtualList({ itemCount: 10000 });\r\n */\r\nexport function useVirtualList({ \r\n itemCount, \r\n itemHeight = 50, \r\n overscan = 5 \r\n}: UseVirtualListOptions) {\r\n const [scrollTop, setScrollTop] = useState(0);\r\n const [containerHeight, setContainerHeight] = useState(0);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n \r\n // Cache for measured heights if dynamic heights are needed in the future\r\n const heightsRef = useRef<Record<number, number>>({});\r\n\r\n useLayoutEffect(() => {\r\n if (containerRef.current) {\r\n const observer = new ResizeObserver((entries) => {\r\n for (const entry of entries) {\r\n setContainerHeight(entry.contentRect.height);\r\n }\r\n });\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }\r\n }, []);\r\n\r\n const onScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {\r\n setScrollTop(e.currentTarget.scrollTop);\r\n }, []);\r\n\r\n const { visibleItems, totalHeight, startIndex } = useMemo(() => {\r\n const rangeStart = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\r\n const rangeEnd = Math.min(itemCount, Math.ceil((scrollTop + containerHeight) / itemHeight) + overscan);\r\n\r\n const visible = [];\r\n for (let i = rangeStart; i < rangeEnd; i++) {\r\n visible.push({\r\n index: i,\r\n offsetTop: i * itemHeight,\r\n });\r\n }\r\n\r\n return {\r\n visibleItems: visible,\r\n totalHeight: itemCount * itemHeight,\r\n startIndex: rangeStart,\r\n };\r\n }, [scrollTop, containerHeight, itemCount, itemHeight, overscan]);\r\n\r\n return {\r\n containerRef,\r\n visibleItems,\r\n totalHeight,\r\n startIndex,\r\n onScroll,\r\n scrollToIndex: (index: number) => {\r\n if (containerRef.current) {\r\n containerRef.current.scrollTop = index * itemHeight;\r\n }\r\n }\r\n };\r\n}\r\n","/**\r\n * Formats a date into a readable string.\r\n */\r\nexport function formatDate(date: Date | string | number, options: Intl.DateTimeFormatOptions = {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric'\r\n}): string {\r\n const d = new Date(date);\r\n return new Intl.DateTimeFormat('en-US', options).format(d);\r\n}\r\n\r\n/**\r\n * Formats a number with locale-specific separators.\r\n */\r\nexport function formatNumber(num: number): string {\r\n return new Intl.NumberFormat('en-US').format(num);\r\n}\r\n\r\n/**\r\n * Formats a number as currency.\r\n */\r\nexport function formatCurrency(amount: number, currency: string = 'USD'): string {\r\n return new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency,\r\n }).format(amount);\r\n}\r\n","/**\r\n * Truncates a string to a specified length and adds an ellipsis.\r\n */\r\nexport function truncate(str: string, length: number): string {\r\n if (str.length <= length) return str;\r\n return str.slice(0, length) + '...';\r\n}\r\n\r\n/**\r\n * Converts a string into a URL-friendly slug.\r\n */\r\nexport function slugify(str: string): string {\r\n return str\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^\\w\\s-]/g, '')\r\n .replace(/[\\s_-]+/g, '-')\r\n .replace(/^-+|-+$/g, '');\r\n}\r\n"]}
|