@algorithm-shift/design-system 1.3.103 → 1.3.104
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.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Layout/Modal.tsx","../src/lib/utils.ts","../src/components/Wrappers/Portal.tsx","../src/components/Layout/Flex.tsx","../src/components/Layout/Grid.tsx","../src/components/Layout/Container.tsx","../src/components/Layout/Accordion.tsx","../src/components/Layout/Slot.tsx","../src/components/Layout/AccordionGroup.tsx","../src/components/Layout/TabList.tsx","../src/components/Layout/TabGroup.tsx","../src/components/Layout/Repeater.tsx","../src/components/ui/button.tsx","../src/components/Basic/Button/Button.tsx","../src/components/Basic/Image/Image.tsx","../src/hooks/useFileService.ts","../src/components/Basic/Shape/Shape.tsx","../src/components/Basic/Typography/Typography.tsx","../src/components/Basic/Breadcrumb/Breadcrumb.tsx","../src/components/Basic/ButtonGroup/ButtonGroup.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/Basic/Icon/Icon.tsx","../src/components/Inputs/TextInput/TextInput.tsx","../src/components/ui/input.tsx","../src/components/Inputs/NumberInput/NumberInput.tsx","../src/components/Inputs/EmailInput/EmailInput.tsx","../src/components/Inputs/PasswordInput/PasswordInput.tsx","../src/components/Inputs/Textarea/Textarea.tsx","../src/components/ui/textarea.tsx","../src/components/Inputs/UrlInput/UrlInput.tsx","../src/components/Inputs/Checkbox/Checkbox.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/label.tsx","../src/components/Inputs/RadioInput/RadioInput.tsx","../src/components/ui/radio-group.tsx","../src/components/Inputs/MultiCheckbox/MultiCheckbox.tsx","../src/components/Inputs/RichText/RichText.tsx","../src/components/Global/TinyMceEditor.tsx","../src/components/Inputs/Dropdown/Dropdown.tsx","../src/components/ui/select.tsx","../src/components/Inputs/Dropdown/LazyDropdown.tsx","../src/hooks/useLazyDropdown.ts","../src/components/Inputs/SwitchToggle/SwitchToggle.tsx","../src/components/ui/switch.tsx","../src/components/Inputs/PhoneInput/PhoneInput.tsx","../src/components/Inputs/SearchInput/SearchInput.tsx","../src/components/Inputs/FileInput/FileInput.tsx","../src/components/Inputs/DatePicker/DatePicker.tsx","../src/components/ui/calendar.tsx","../src/components/ui/popover.tsx","../src/components/Inputs/DateRange/DateRange.tsx","../src/components/Inputs/TextInputGroup/TextInputGroup.tsx","../src/components/Inputs/Multiselect/MultiSelect.tsx","../src/components/ui/data-table.tsx","../src/components/ui/table.tsx","../src/lib/table/useDynamicColumns.ts","../src/lib/table/cellRendererFactory.tsx","../src/lib/dayjs-setup.ts","../src/lib/table/valueFormatter.ts","../src/components/DataDisplay/Table/Table.tsx","../src/components/ui/pagination.tsx","../src/components/DataDisplay/Pagination/Pagination.tsx","../src/components/DataDisplay/HistoryTimeline/HistoryTimeline.tsx","../src/components/ui/accordion.tsx","../src/components/ui/card.tsx","../src/components/Navigation/Tabs/Tabs.tsx","../src/components/ui/dialog.tsx","../src/components/ui/sonner-toast.tsx","../src/components/Navigation/Stages/Stages.tsx","../src/components/ui/tooltip.tsx","../src/components/Navigation/Spacer/Spacer.tsx","../src/components/Navigation/Profile/Profile.tsx","../src/components/Navigation/Notification/Notification.tsx","../src/components/Navigation/Logo/Logo.tsx","../src/components/Navigation/Navbar/Navbar.tsx","../src/components/ui/avatar.tsx","../src/components/Chart/BarChart.tsx","../src/components/Chart/PieChart.tsx","../src/components/Blocks/EmailComposer.tsx","../src/components/ui/sonner.tsx"],"sourcesContent":["import './global.css'\r\n\r\nexport * from \"@/components\";\r\nexport * from \"@/lib/utils\";\r\n","import React, { useEffect } from 'react';\r\n\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport Portal from '../Wrappers/Portal';\r\n\r\ninterface ModalProps {\r\n isOpen: boolean | string;\r\n onModalClose?: () => void;\r\n onModalOpen?: () => void;\r\n title: string;\r\n children: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg' | 'xl';\r\n showCloseButton?: boolean;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onModalClose,\r\n onModalOpen,\r\n title,\r\n children,\r\n size = 'md',\r\n showCloseButton = true,\r\n className = '',\r\n style = {}\r\n}: ModalProps) {\r\n useEffect(() => {\r\n if (isOpen && onModalOpen) {\r\n onModalOpen();\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onModalClose?.();\r\n }\r\n };\r\n\r\n if (isOpen) {\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 }, [isOpen, onModalClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n const sizeClasses = {\r\n sm: 'w-md',\r\n md: 'w-lg',\r\n lg: 'w-2xl',\r\n xl: 'w-4xl'\r\n };\r\n\r\n return (\r\n <Portal>\r\n <div className=\"fixed inset-0 bg-black/60 z-40 flex items-center justify-center\">\r\n <div className=\"fixed flex items-center justify-center z-50 shadow-lg rounded-md\">\r\n <div\r\n className={cn(\r\n 'bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-h-[90vh] overflow-hidden',\r\n className,\r\n `${sizeClasses[size]}`\r\n )}\r\n style={style}\r\n >\r\n {/* Header */}\r\n {(title || showCloseButton) && (\r\n <div className=\"flex items-center justify-between p-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n {title && (\r\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n )}\r\n {showCloseButton && (\r\n <button\r\n onClick={onModalClose}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors cursor-pointer\"\r\n aria-label=\"Close modal\"\r\n >\r\n <FontAwesomeIcon icon={faTimes} className=\"w-5 h-5\" />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"p-4 py-3 overflow-y-auto max-h-[calc(90vh-140px)] min-h-[90px]\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport function getInitials(name: string) {\r\n const words = name.split(' ');\r\n if (words.length === 0) {\r\n return '';\r\n }\r\n if (words.length === 1) {\r\n return words[0].charAt(0);\r\n }\r\n return words[0].charAt(0) + words[1].charAt(0);\r\n}","import React from 'react';\r\n\r\nimport ReactDOM from 'react-dom';\r\n\r\ntype PortalProps = {\r\n children: React.ReactNode;\r\n container?: HTMLElement;\r\n};\r\n\r\nconst Portal: React.FC<PortalProps> = ({ children, container }) => {\r\n // Default to rendering into document.body if no container is given\r\n const target = container || document.body;\r\n\r\n return ReactDOM.createPortal(children, target);\r\n};\r\n\r\nexport default Portal;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Flex = ({\r\n children, className, style, ...props\r\n}: ElementProps) => {\r\n return (\r\n <div {...props} className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Flex;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Grid = ({\r\n children, className, style, ...props\r\n}: ElementProps) => {\r\n return (\r\n <div {...props} className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Grid;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Container = ({\r\n children, className, style, ...props\r\n}: ElementProps) => {\r\n return (\r\n <div {...props} className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Container;\r\n","import React, { useState } from 'react';\r\n\r\nimport { AccordionProps } from '@/types/global';\r\n\r\nconst Accordion = ({\r\n children, name = 'Accordion', style, className\r\n}: AccordionProps) => {\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const onToggleCollapse = () => {\r\n setIsOpen(prev => !prev);\r\n };\r\n\r\n return (\r\n <div className={`bg-white border rounded overflow-hidden ${className} min-h-auto`} style={{ backgroundColor: style?.backgroundColor }}>\r\n <div\r\n className='flex justify-between items-center p-2 px-4 border-b bg-transparent cursor-pointer'\r\n onClick={onToggleCollapse}\r\n role='presentation'\r\n >\r\n <span className='text-[14px] text-[#000]'>{name}</span>\r\n <button\r\n className='ml-2 px-2 py-1 text-sm text-[#000] rounded transition'\r\n style={{ color: style?.color }}\r\n >\r\n {isOpen ? '−' : '+'}\r\n </button>\r\n </div>\r\n <div className={` bg-white relative transition-all duration-200 ${isOpen ? 'min-h-30 p-4' : 'max-h-0 p-0 overflow-hidden'}`}>\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Accordion;\r\n","import { ElementProps } from '@/types/global';\r\n\r\nconst Slot = ({\r\n children\r\n}: ElementProps) => {\r\n return (\r\n <>\r\n {children}\r\n </>\r\n );\r\n};\r\n\r\nexport default Slot;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst AccordionGroup = ({ children, style, className }: ElementProps) => {\r\n return (\r\n <div className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AccordionGroup;\r\n","'use client';\r\n\r\nimport { TabListProps } from \"@/types/global\";\r\n\r\nexport default function TabList({\r\n children, style, className, activeTab, tabId\r\n}: TabListProps) {\r\n\r\n return (\r\n <div\r\n className={`min-h-30 ${className} ${activeTab === tabId ? 'visible' : 'hidden'}`}\r\n style={style}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\nimport { TabGroupProps } from '@/types/global';\r\nimport { useEffect, useMemo, useState } from 'react';\r\n\r\nexport default function TabGroupComponent({\r\n children, style, className, list, activeTab, onTabChange,\r\n}: TabGroupProps) {\r\n const [mounted, setMounted] = useState(false)\r\n\r\n useEffect(() => {\r\n // Handle tab change side effects if needed\r\n if (list && list.length > 0 && !activeTab && onTabChange && !mounted) {\r\n onTabChange(list[0]?.tabId);\r\n setMounted(true);\r\n }\r\n\r\n }, [list, activeTab, onTabChange, mounted]);\r\n\r\n const formatedList = useMemo(\r\n () => Array.isArray(list)\r\n ? [...list].sort((a, b) => (a.orderNumber ?? 0) - (b.orderNumber ?? 0))\r\n : [],\r\n [list]\r\n );\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className=\"flex border-b border-gray-200 gap-1\">\r\n {formatedList.map((tab: any) => (\r\n <button\r\n key={tab.tabId}\r\n data-id={tab.tabId}\r\n className={`px-4 py-2 text-sm border-b-2 font-medium transition-colors cursor-pointer ${activeTab === tab.tabId\r\n ? ' bg-blue-500 text-white'\r\n : 'bg-gray-100 '}`}\r\n onClick={() => onTabChange && onTabChange(tab.tabId)}\r\n >\r\n {tab.name || 'Tab List'}\r\n </button>\r\n ))}\r\n </div>\r\n {children}\r\n </div>\r\n );\r\n}","import React from 'react';\r\n\r\nexport interface RepeaterProps<T> {\r\n data: T[];\r\n count?: number; // optionally limit how many to render\r\n render: (item: T, index: number, array: T[]) => React.ReactNode;\r\n emptyFallback?: React.ReactNode;\r\n wrapper?: (children: React.ReactNode) => React.ReactNode;\r\n className?: string;\r\n loading?: boolean;\r\n loadingText?: string;\r\n}\r\n\r\nfunction Repeater<T>({\r\n data = [],\r\n count,\r\n render,\r\n emptyFallback = null,\r\n wrapper,\r\n className,\r\n loading = false,\r\n loadingText = 'Loading...',\r\n}: RepeaterProps<T>) {\r\n const list = React.useMemo(\r\n () => (typeof count === 'number' ? data.slice(0, count) : data),\r\n [data, count]\r\n );\r\n\r\n if (loading) {\r\n return (\r\n <div className={className}>{loadingText}</div>\r\n );\r\n }\r\n\r\n if (!list.length) {\r\n return emptyFallback ? <>{emptyFallback}</> : (\r\n <div className={className}>No items to display.</div>\r\n );\r\n }\r\n\r\n const content = list.map((item, i) => (\r\n <React.Fragment key={i}>{render(item, i, list)}</React.Fragment>\r\n ));\r\n\r\n return wrapper ? (\r\n <>{wrapper(content)}</>\r\n ) : (\r\n <div className={className}>{content}</div>\r\n );\r\n}\r\n\r\nexport default React.memo(Repeater) as typeof Repeater;","import * as React from \"react\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant,\r\n size,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { ButtonProps } from '@/types/global';\r\nimport { Button } from '@/components/ui/button';\r\n\r\nconst ButtonWrapper = ({\r\n className,\r\n style,\r\n textContent = 'Button',\r\n loadingText = 'Loading...',\r\n loading = false,\r\n ...props\r\n}: ButtonProps) => {\r\n\r\n return (\r\n <Button\r\n {...props}\r\n className={className}\r\n style={style}\r\n disabled={props.disabled || loading}\r\n >\r\n {loading ? loadingText : textContent}\r\n </Button>\r\n );\r\n};\r\n\r\nexport default ButtonWrapper;","\r\nimport { useRef, useState } from 'react';\r\n\r\nimport { useParams } from 'next/navigation';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport { ImageProps } from '@/types/global';\r\nimport { useFileService } from '@/hooks/useFileService';\r\n\r\nconst ImageControl = ({\r\n className,\r\n style,\r\n imageUrl,\r\n altText = 'Preview',\r\n apiUrl,\r\n ...props\r\n}: ImageProps) => {\r\n\r\n const defaultImgClass = cn(\r\n 'w-full h-full',\r\n className\r\n );\r\n\r\n const placeholder = 'https://placehold.co/400';\r\n const url = imageUrl || placeholder;\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const params = useParams();\r\n const [loader, setLoader] = useState(false);\r\n\r\n const onClickImage = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n const { uploadFile } = useFileService({\r\n axiosInstance: props.axiosInstance,\r\n apiUrl,\r\n onSuccess: async (result) => {\r\n if (!result?.data?.url && !props.onSuccess) {\r\n setLoader(false);\r\n return;\r\n }\r\n props.onSuccess?.({ url: result.data.url || '', fileName: result.data.originalname || '' });\r\n setLoader(false);\r\n }\r\n });\r\n\r\n const onChangeFile = async (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n const file = e.target.files?.[0];\r\n if (!file) return;\r\n setLoader(true);\r\n uploadFile(file, {\r\n key: file.name\r\n });\r\n };\r\n\r\n if (loader) {\r\n return (\r\n <div className=\"flex items-center justify-center\">\r\n <div className=\"h-10 w-10 animate-spin rounded-full border-4 border-gray-300 border-t-blue-500\" />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n onClick={props.enableUpload ? onClickImage : undefined}\r\n role=\"button\"\r\n className={props.enableUpload ? 'cursor-pointer' : ''}\r\n >\r\n <img\r\n src={url} alt={altText} className={defaultImgClass} style={style}\r\n />\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n accept=\"image/*\"\r\n className=\"hidden\"\r\n onChange={onChangeFile}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default ImageControl;\r\n","import axios from 'axios';\r\nimport { useState } from 'react';\r\n\r\nexport interface FileServiceOptions {\r\n onSuccess?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n axiosInstance?: typeof axios;\r\n apiUrl?: string;\r\n}\r\n\r\nexport interface UseFileServiceResult {\r\n loading: boolean;\r\n error: any;\r\n data: any;\r\n uploadFile: (file: File, params?: Record<string, any>) => Promise<any>;\r\n getSignedUrl: (bucket: string, key: string, expiresIn?: number) => Promise<any>;\r\n getObject: (bucket: string, key: string) => Promise<any>;\r\n}\r\n\r\nexport function useFileService(options: FileServiceOptions): UseFileServiceResult {\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<any>(null);\r\n const [data, setData] = useState<any>(null);\r\n\r\n // Upload file\r\n const uploadFile = async (file: File, params: Record<string, any> = {}) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n Object.entries(params).forEach(([key, value]) => {\r\n formData.append(key, value as string);\r\n });\r\n\r\n const axiosClient = options.axiosInstance ?? axios;\r\n const apiUrl = options.apiUrl ?? '/fileservice/upload';\r\n\r\n const result = await axiosClient.post(`${apiUrl}`, formData, {\r\n withCredentials: true,\r\n });\r\n\r\n setData(result);\r\n if (result.status === 200) {\r\n options?.onSuccess?.(result.data);\r\n } else {\r\n const err = new Error(`Fetch failed with status ${result.status}`);\r\n throw err;\r\n }\r\n return result;\r\n\r\n } catch (err) {\r\n setError(err);\r\n options?.onError?.(err);\r\n throw err;\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // Get signed URL\r\n const getSignedUrl = async (bucket: string, key: string, expiresIn?: number) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n\r\n const axiosClient = options.axiosInstance ?? axios;\r\n const apiUrl = '/fileservice/signed-url';\r\n\r\n const result = await axiosClient.get(`${apiUrl}?bucket=${encodeURIComponent(bucket)}&key=${encodeURIComponent(key)}${expiresIn ? `&expiresIn=${expiresIn}` : ''}`, {\r\n withCredentials: true,\r\n });\r\n\r\n setData(result);\r\n if (result.status === 200) {\r\n options?.onSuccess?.(result.data);\r\n } else {\r\n const err = new Error(`Fetch failed with status ${result.status}`);\r\n throw err;\r\n }\r\n return result;\r\n } catch (err) {\r\n setError(err);\r\n options?.onError?.(err);\r\n throw err;\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // // Get object\r\n const getObject = async (bucket: string, key: string) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const axiosClient = options.axiosInstance ?? axios;\r\n const apiUrl = '/fileservice/object';\r\n\r\n const result = await axiosClient.get(`${apiUrl}?bucket=${encodeURIComponent(bucket)}&key=${encodeURIComponent(key)}`, {\r\n withCredentials: true,\r\n });\r\n\r\n setData(result);\r\n if (result.status === 200) {\r\n options?.onSuccess?.(result.data);\r\n } else {\r\n const err = new Error(`Fetch failed with status ${result.status}`);\r\n throw err;\r\n }\r\n return result;\r\n } catch (err) {\r\n setError(err);\r\n options?.onError?.(err);\r\n throw err;\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return {\r\n loading,\r\n error,\r\n data,\r\n uploadFile,\r\n getSignedUrl,\r\n getObject,\r\n };\r\n}\r\n","import { ElementProps } from '@/types/global';\r\n\r\nconst Shape = ({\r\n children,\r\n className, \r\n style\r\n}: ElementProps) => {\r\n\r\n return (\r\n <div className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Shape;\r\n","import React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport { TypographyProps } from '@/types/global';\r\n\r\nconst Typography = ({\r\n className,\r\n style,\r\n tagName,\r\n textContent,\r\n onClick,\r\n}: TypographyProps) => {\r\n const Tag = tagName || 'h1';\r\n\r\n return React.createElement(\r\n Tag,\r\n {\r\n style,\r\n className: cn(className, 'pointer-events-auto'),\r\n onClick,\r\n },\r\n [\r\n React.createElement('span', {\r\n key: 'html',\r\n className: 'pointer-events-none',\r\n dangerouslySetInnerHTML: { __html: textContent || '--' },\r\n }),\r\n ]\r\n );\r\n};\r\n\r\nexport default Typography;\r\n","import { cn } from \"@/lib/utils\";\r\nimport { ChevronRight } from \"lucide-react\";\r\nimport { BreadcrumbProps } from \"@/types/global\";\r\nimport Link from \"next/link\";\r\n\r\nconst Breadcrumb = ({ list = [], className, style }: BreadcrumbProps) => {\r\n return (\r\n <nav\r\n aria-label=\"breadcrumb\"\r\n className={cn(\"flex items-center text-sm text-muted-foreground\", className)}\r\n style={style}\r\n >\r\n {list.map((item: { url: string; header: string, id: string }, index: number) => {\r\n const isLast = index === list.length - 1;\r\n\r\n return (\r\n <div key={item.id} className=\"flex items-center\">\r\n {item.url && !isLast ? (\r\n <Link\r\n href={item.url}\r\n className=\"hover:text-foreground transition-colors\"\r\n >\r\n {item.header}\r\n </Link>\r\n ) : (\r\n <span className=\"text-foreground font-medium\">{item.header}</span>\r\n )}\r\n\r\n {!isLast && (\r\n <ChevronRight className=\"mx-2 h-4 w-4 text-muted-foreground\" />\r\n )}\r\n </div>\r\n );\r\n })}\r\n </nav>\r\n );\r\n}\r\n\r\nexport default Breadcrumb;","import { ChevronDown } from 'lucide-react';\r\nimport Link from 'next/link';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n} from '@/components/ui/dropdown-menu';\r\nimport { ButtonGroupProps } from '@/types/global';\r\n\r\nexport default function ButtonGroup({ style, textContent, className, list = [], onGroupItemClick, onClick }: ButtonGroupProps) {\r\n const data = Array.isArray(list) ? list : [];\r\n const bgColor = style?.backgroundColor || '';\r\n\r\n return (\r\n <div className={'inline-flex rounded-md overflow-hidden border border-teal-200 bg-teal-700 items-center focus:ring-0'} style={{ backgroundColor: bgColor }}>\r\n <Button\r\n className={`rounded-none border-r px-4 py-2 text-whit focus:ring-0 ${className || ''}`}\r\n style={{ backgroundColor: bgColor }}\r\n onClick={(e) => onClick?.(e)}\r\n >\r\n {textContent || 'Button'}\r\n </Button>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n className=\"rounded-none bg-teal-700 px-4 py-2 text-white ring-0 shadow-none hover:bg-teal-600 focus:ring-0\"\r\n aria-label=\"Open Dropdown\"\r\n style={{ backgroundColor: bgColor }}\r\n >\r\n <ChevronDown className=\"w-4 h-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n align=\"end\"\r\n className=\"bg-white min-w-[120px]\"\r\n >\r\n {data.map((item: { url: string; header: string, id: string }) => (\r\n <DropdownMenuItem\r\n key={item.id} className=\"text-black\" onSelect={() => onGroupItemClick?.({\r\n item\r\n })}\r\n >\r\n <Link href={item.url || '#'}>{item.header}</Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction DropdownMenu({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\r\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\r\n}\r\n\r\nfunction DropdownMenuPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\r\n );\r\n}\r\n\r\nfunction DropdownMenuTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\r\n return (\r\n <DropdownMenuPrimitive.Trigger\r\n data-slot=\"dropdown-menu-trigger\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuContent({\r\n className,\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n data-slot=\"dropdown-menu-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n );\r\n}\r\n\r\nfunction DropdownMenuGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\r\n return (\r\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\r\n );\r\n}\r\n\r\nfunction DropdownMenuItem({\r\n className,\r\n inset,\r\n variant = 'default',\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: 'default' | 'destructive'\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Item\r\n data-slot=\"dropdown-menu-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*=\\'text-\\'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\r\n return (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n data-slot=\"dropdown-menu-checkbox-item\"\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n );\r\n}\r\n\r\nfunction DropdownMenuRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioGroup\r\n data-slot=\"dropdown-menu-radio-group\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioItem\r\n data-slot=\"dropdown-menu-radio-item\"\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n );\r\n}\r\n\r\nfunction DropdownMenuLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Label\r\n data-slot=\"dropdown-menu-label\"\r\n data-inset={inset}\r\n className={cn(\r\n 'px-2 py-1.5 text-sm font-medium data-[inset]:pl-8',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\r\n return (\r\n <DropdownMenuPrimitive.Separator\r\n data-slot=\"dropdown-menu-separator\"\r\n className={cn('bg-border -mx-1 my-1 h-px', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<'span'>) {\r\n return (\r\n <span\r\n data-slot=\"dropdown-menu-shortcut\"\r\n className={cn(\r\n 'text-muted-foreground ml-auto text-xs tracking-widest',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuSub({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\r\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\r\n}\r\n\r\nfunction DropdownMenuSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.SubTrigger\r\n data-slot=\"dropdown-menu-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto size-4\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n );\r\n}\r\n\r\nfunction DropdownMenuSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\r\n return (\r\n <DropdownMenuPrimitive.SubContent\r\n data-slot=\"dropdown-menu-sub-content\"\r\n className={cn(\r\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuPortal,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuGroup,\r\n DropdownMenuLabel,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuSub,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuSubContent,\r\n};\r\n","import React, { useEffect, useState, type CSSProperties } from 'react';\r\n\r\nimport type { SizeProp } from '@fortawesome/fontawesome-svg-core';\r\nimport * as SolidIcons from '@fortawesome/free-solid-svg-icons';\r\nimport * as RegularIcons from '@fortawesome/free-regular-svg-icons';\r\nimport * as BrandIcons from '@fortawesome/free-brands-svg-icons';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\n\r\nexport type IconSet = 'fa-css' | 'fa' | 'fontawesome' | 'lucide';\r\nexport type FAPrefix = 'fas' | 'far' | 'fab' | string;\r\n\r\nexport interface IconProps extends React.HTMLAttributes<HTMLElement> {\r\n /** Icon provider */\r\n iconSet?: IconSet;\r\n\r\n /** Icon name\r\n * - For Lucide: component name (e.g. \"Search\", \"User\").\r\n * - For FA CSS: icon name without prefix (e.g. \"coffee\").\r\n */\r\n icon?: string | any;\r\n\r\n /** FontAwesome CSS prefix (e.g. fas, far, fab) */\r\n prefix?: FAPrefix;\r\n /** Size in px (number) or FontAwesome size */\r\n iconSize?: number | SizeProp;\r\n\r\n /** Additional CSS classes */\r\n className?: string;\r\n\r\n /** Inline styles (include FA CSS variables to satisfy FontAwesomeIcon typings) */\r\n style?: CSSProperties;\r\n\r\n /** Tooltip / accessible title */\r\n title?: string;\r\n\r\n /** FA CSS helpers */\r\n spin?: boolean;\r\n pulse?: boolean;\r\n fixedWidth?: boolean;\r\n onClick?: () => void;\r\n}\r\n\r\nexport default function Icon(props: IconProps) {\r\n const {\r\n iconSet = 'fontawesome',\r\n icon,\r\n prefix = 'fas',\r\n iconSize = 16,\r\n className = '',\r\n style = {} as IconProps['style'],\r\n title = '',\r\n spin = false,\r\n fixedWidth = false,\r\n pulse = false,\r\n ...rest\r\n } = props;\r\n\r\n const [dynamicIcon, setDynamicIcon] = useState<any>(icon || null);\r\n\r\n async function loadFAIcon(iconName: string, prefix: string) {\r\n\r\n const pkgMap: Record<string, any> = {\r\n fas: SolidIcons,\r\n far: RegularIcons,\r\n fab: BrandIcons,\r\n };\r\n\r\n const basePackage = pkgMap[prefix] ?? SolidIcons\r\n return basePackage[iconName] ?? null;\r\n }\r\n\r\n useEffect(() => {\r\n if (icon && (iconSet === 'fontawesome') && prefix) {\r\n loadFAIcon(icon, prefix).then((ico) => setDynamicIcon(ico));\r\n }\r\n }, [iconSet, icon, prefix]);\r\n\r\n // Lucide mode\r\n if (iconSet === 'lucide') {\r\n const Comp = (LucideIcons as any)[icon];\r\n if (!Comp) {\r\n console.warn(`Lucide icon not found: ${icon}`);\r\n return null;\r\n }\r\n\r\n const numericSize =\r\n typeof iconSize === 'number' ? iconSize : parseInt(iconSize as string, 10) || 16;\r\n\r\n return (\r\n <Comp\r\n size={numericSize}\r\n className={cn(\r\n className,\r\n props.onClick ? 'cursor-pointer' : '',\r\n )}\r\n title={title}\r\n style={style}\r\n aria-hidden={title ? undefined : true}\r\n onClick={() => props.onClick?.()}\r\n {...rest}\r\n />\r\n );\r\n }\r\n\r\n // FontAwesome SVG mode\r\n if (iconSet === 'fontawesome') {\r\n if (!dynamicIcon) return null;\r\n const tempStyle = { ...style };\r\n delete tempStyle.height;\r\n delete tempStyle.width;\r\n return (\r\n <FontAwesomeIcon\r\n icon={dynamicIcon}\r\n size={typeof iconSize === 'string' ? iconSize : undefined}\r\n spin={spin}\r\n spinPulse={pulse}\r\n widthAuto={fixedWidth}\r\n className={cn(\r\n className,\r\n props.onClick ? 'cursor-pointer' : '',\r\n )}\r\n title={title}\r\n style={{\r\n ...tempStyle,\r\n }}\r\n onClick={() => props.onClick?.()}\r\n />\r\n );\r\n }\r\n\r\n // FontAwesome CSS mode\r\n if (iconSet === 'fa' || iconSet === 'fa-css') {\r\n const sizeStyle: CSSProperties =\r\n typeof iconSize === 'number' ? { fontSize: iconSize } : {};\r\n\r\n const cls = [\r\n `${prefix} fa-${icon}`,\r\n spin ? 'fa-spin' : '',\r\n pulse ? 'fa-pulse' : '',\r\n fixedWidth ? 'fa-fw' : '',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <i\r\n className={cls}\r\n style={{ ...sizeStyle, ...style }}\r\n title={title}\r\n aria-hidden={title ? undefined : true}\r\n onClick={() => props.onClick?.()}\r\n {...rest}\r\n />\r\n );\r\n }\r\n\r\n console.warn('Unknown icon set:', iconSet);\r\n return null;\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Input } from '@/components/ui/input';\r\nimport { cn } from '@/lib/utils';\r\nimport { TextInputProps } from '@/types/global';\r\n\r\nconst TextInput = ({ className, style, ...props }: TextInputProps) => {\r\n\r\n const placeholder = props.placeholder || 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <Input\r\n type={props.inputType || 'text'}\r\n name={props.name}\r\n id={props.name || 'text-field'}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n value={formatValue(props.value)}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default TextInput;","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { NumberInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst NumberInput = ({ className, style, ...props }: NumberInputProps) => {\r\n\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return 0;\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'number'}\r\n id={props.name || 'number-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default NumberInput;","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Mail } from 'lucide-react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { EmailInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst EmailInput = ({ className, style, ...props }: EmailInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'email'}\r\n name={props.name}\r\n id={props.name || 'email-field'}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default EmailInput;","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { PasswordInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst PasswordInput = ({ className, style, ...props }: PasswordInputProps) => {\r\n\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'password'}\r\n id={props.name || 'password-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default PasswordInput;","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Textarea as TextareaInput } from '@/components/ui/textarea';\r\nimport { TextAreaProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Textarea = ({ className, style, ...props }: TextAreaProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLTextAreaElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <TextareaInput\r\n id={'textarea-field'}\r\n name={props.name}\r\n value={props.value || ''}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default Textarea;","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Input } from '@/components/ui/input';\r\nimport { UrlInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst UrlInput = ({ className, style, ...props }: UrlInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <div className=\"bg-[#E9E9E9] absolute px-10 text-center top-1/2 h-full justify-center items-center flex w-10 -translate-y-1/2 text-[#383838] font-[500] text-[12px]\">\r\n https://\r\n </div>\r\n <Input\r\n id={props.name || 'url-field'}\r\n type={props.inputType || 'url'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default UrlInput;","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport { Label } from '@/components/ui/label';\r\nimport { CheckboxInputProps } from '@/types/global';\r\n\r\nconst CheckboxInput = ({ className, style, ...props }: CheckboxInputProps) => {\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n\r\n const text = props.text ? props.text : 'Subscribe';\r\n\r\n const formatValue = (value: any) => {\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n if (value === 'true' || value === '1') {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value) {\r\n handleChange(formatValue(props.value));\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: boolean) => {\r\n props.onChange?.(value, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <div className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n id={props.name || 'checkbox'}\r\n checked={formatValue(props.value)}\r\n onCheckedChange={handleChange}\r\n disabled={!isEditable || isDisabled}\r\n />\r\n <Label htmlFor={props.name || 'checkbox'}>{text}</Label>\r\n </div>\r\n </div>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default CheckboxInput;","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Label } from '@/components/ui/label';\r\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\r\nimport { RadioInputProps } from '@/types/global';\r\n\r\nexport type Option = {\r\n label: string;\r\n value: string;\r\n};\r\n\r\nconst RadioInput = ({\r\n className,\r\n style,\r\n defaultValue,\r\n onChange,\r\n data = [],\r\n dataKey,\r\n dataLabel,\r\n ...props\r\n}: RadioInputProps) => {\r\n const list = Array.isArray(data) ? data : [];\r\n const options: Option[] = (list || []).map((item: any) => ({\r\n value: item[dataKey || 'value'],\r\n label: item[dataLabel || 'label'],\r\n }));\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: string) => {\r\n onChange?.(value, props?.name || '');\r\n };\r\n\r\n // Ensure defaultValue passed to RadioGroup is a string or undefined\r\n const resolvedDefaultValue = (typeof defaultValue === 'string' ? defaultValue : undefined) ?? options[0]?.value;\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <RadioGroup\r\n defaultValue={resolvedDefaultValue}\r\n onValueChange={handleChange}\r\n >\r\n {\r\n options.length === 0 && (\r\n <div className=\"text-sm text-gray-500\">No options available</div>\r\n )\r\n }\r\n {options.map((item) => (\r\n <div className=\"flex items-center space-x-2\" key={item.value}>\r\n <RadioGroupItem value={item.value} id={`radio-${item.value}`} />\r\n <Label htmlFor={`radio-${item.value}`}>{item.label}</Label>\r\n </div>\r\n ))}\r\n </RadioGroup>\r\n </div>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default RadioInput;\r\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","'use client';\r\n\r\nimport { useEffect, useState, useRef, useCallback } from 'react';\r\n\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport { Label } from '@/components/ui/label';\r\nimport { cn } from '@/lib/utils';\r\nimport { MultiCheckboxInputProps } from '@/types/global';\r\n\r\ntype Option = { value: string; label: string };\r\n\r\nexport default function MultiCheckbox({\r\n apiUrl,\r\n axiosInstance,\r\n data = [],\r\n dataKey = 'id',\r\n dataLabel = 'name',\r\n pageSize = 20,\r\n value,\r\n onChange,\r\n outputFormat = 'array',\r\n className,\r\n style,\r\n source,\r\n loading,\r\n onUncheckItems,\r\n ...props\r\n}: MultiCheckboxInputProps) {\r\n const [options, setOptions] = useState<Option[]>([]);\r\n const [page, setPage] = useState(1);\r\n const [hasMore, setHasMore] = useState(true);\r\n const [pageLoading, setPageLoading] = useState(false);\r\n\r\n const loadMoreRef = useRef<HTMLDivElement>(null);\r\n\r\n const normalizeInput = (val: any): string[] => {\r\n if (!val) return [];\r\n if (Array.isArray(val)) return val;\r\n if (typeof val === 'string') {\r\n if (val.includes(';')) return val.split(';').map((s) => s.trim());\r\n if (val.includes(',')) return val.split(',').map((s) => s.trim());\r\n return [val.trim()];\r\n }\r\n return [];\r\n };\r\n\r\n const selected = normalizeInput(value);\r\n\r\n const convertOutput = (arr: string[]) => {\r\n switch (outputFormat) {\r\n case 'comma':\r\n return arr.join(',');\r\n case 'semicolon':\r\n return arr.join(';');\r\n default:\r\n return arr;\r\n }\r\n };\r\n\r\n const fetchApiPage = useCallback(async () => {\r\n if (!apiUrl) return [];\r\n const client = axiosInstance || (await import('axios')).default;\r\n const res = await client.get(apiUrl, {\r\n params: { page, limit: pageSize },\r\n withCredentials: true,\r\n });\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n return res.data.data;\r\n }\r\n return Array.isArray(res.data) ? res.data : [];\r\n }, [apiUrl, axiosInstance, page, pageSize]);\r\n\r\n const mapData = useCallback(\r\n (items: any[]) => {\r\n if (Array.isArray(items) === false) return [];\r\n return (items || []).map((item) => ({\r\n value: item[dataKey],\r\n label: item[dataLabel],\r\n }));\r\n },\r\n [dataKey, dataLabel]\r\n );\r\n\r\n const loadPage = useCallback(async () => {\r\n if (source !== 'api') return;\r\n if (pageLoading) return;\r\n\r\n setPageLoading(true);\r\n\r\n try {\r\n const pageData = await fetchApiPage();\r\n const mapped = mapData(pageData);\r\n\r\n setOptions((prev) => [...prev, ...mapped]);\r\n\r\n if (pageData.length < pageSize) {\r\n setHasMore(false);\r\n }\r\n } finally {\r\n setPageLoading(false);\r\n }\r\n }, [source, pageLoading, fetchApiPage, mapData, pageSize]);\r\n\r\n useEffect(() => {\r\n if (source === 'api') {\r\n setOptions([]);\r\n setPage(1);\r\n setHasMore(true);\r\n } else {\r\n setOptions(mapData(data));\r\n setHasMore(false);\r\n }\r\n }, [source, JSON.stringify(data)]);\r\n\r\n useEffect(() => {\r\n if (source === 'api') loadPage();\r\n }, [page, source]);\r\n\r\n useEffect(() => {\r\n if (source !== 'api') return;\r\n if (!hasMore || pageLoading) return;\r\n\r\n const observer = new IntersectionObserver((entries) => {\r\n if (entries[0].isIntersecting) {\r\n setPage((prev) => prev + 1);\r\n }\r\n });\r\n\r\n if (loadMoreRef.current) observer.observe(loadMoreRef.current);\r\n return () => observer.disconnect();\r\n }, [source, hasMore, pageLoading]);\r\n\r\n const toggle = (val: string) => {\r\n if (props.isDisabled || props.isReadonly) return;\r\n\r\n const updated = selected.includes(val)\r\n ? selected.filter((v) => v !== val)\r\n : [...selected, val];\r\n\r\n onChange?.(convertOutput(updated), props.name || '');\r\n\r\n onUncheckItems?.(convertOutput(\r\n options.filter((opt) => !updated.includes(opt.value)).map((opt) => opt.value)\r\n ), props.name || '');\r\n };\r\n\r\n return (\r\n <div className={cn('flex flex-col gap-2 max-h-64 overflow-auto', className)} style={style}>\r\n {options.length === 0 && !pageLoading && !loading && (\r\n <div className=\"text-center py-2 text-gray-500 text-sm\">No options available.</div>\r\n )}\r\n {options.map((opt, index) => {\r\n const hasError = !!props.errorMessage;\r\n return (\r\n <div\r\n key={`${index}-${opt.value}`}\r\n className={cn(\r\n 'flex items-center space-x-2 p-1 rounded',\r\n hasError && 'bg-red-50'\r\n )}\r\n >\r\n <Checkbox\r\n id={props.name ? `${props.name}-${opt.value}` : opt.value}\r\n checked={selected.includes(opt.value)}\r\n onCheckedChange={() => toggle(opt.value)}\r\n disabled={props.isDisabled || props.isReadonly}\r\n className={cn(\r\n hasError && 'border-red-500 data-[state=checked]:bg-red-500'\r\n )}\r\n />\r\n <Label\r\n id={props.name ? `${props.name}-${opt.value}` : opt.value}\r\n className={cn(hasError && 'text-red-600')}\r\n htmlFor={props.name ? `${props.name}-${opt.value}` : opt.value}\r\n >{opt.label}</Label>\r\n </div>\r\n );\r\n })}\r\n\r\n {source === 'api' && hasMore && <div ref={loadMoreRef} className=\"h-4\" />}\r\n\r\n {(pageLoading || loading) && (\r\n <div className=\"text-center py-2 text-gray-500 text-sm\">Loading…</div>\r\n )}\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport TinyMceEditor from '@/components/Global/TinyMceEditor';\r\nimport { RichTextInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nexport default function RichText({ className, style, ...props }: RichTextInputProps) {\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (content: string) => {\r\n props.onChange?.(content, props?.name || '');\r\n }\r\n\r\n return (\r\n <div\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n >\r\n <TinyMceEditor onChange={handleChange} value={props.value || ''} isDefault={true} />\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { useMemo, useRef } from 'react';\r\n\r\nimport { Editor } from '@tinymce/tinymce-react';\r\n\r\nexport default function MyEditor({\r\n value,\r\n onChange,\r\n isDefault\r\n}: {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n isDefault?: boolean;\r\n}) {\r\n const editorRef = useRef<any>(null);\r\n\r\n function stripOuterP(html: string): string {\r\n const trimmedHtml = html.trim();\r\n if (!trimmedHtml) return '';\r\n const div = document.createElement('div');\r\n div.innerHTML = trimmedHtml;\r\n const firstChild = div.firstElementChild;\r\n if (div.childElementCount === 1 && firstChild?.tagName === 'P') {\r\n return firstChild.innerHTML;\r\n }\r\n return trimmedHtml;\r\n }\r\n\r\n const isDefaultToolbar = useMemo(() => {\r\n let toolbar = 'undo redo | formatselect | bold italic forecolor';\r\n if (isDefault) {\r\n toolbar = 'undo redo | blocks | ' +\r\n 'bold italic forecolor | alignleft aligncenter ' +\r\n 'alignright alignjustify | bullist numlist outdent indent | ' +\r\n 'removeformat | help';\r\n }\r\n return toolbar;\r\n }, [isDefault]);\r\n\r\n return (\r\n <Editor\r\n apiKey={process.env.NEXT_PUBLIC_TINYMCE_API_KEY}\r\n tinymceScriptSrc={process.env.NEXT_PUBLIC_TINYMCE_SCRIPT_SRC}\r\n onInit={(_evt, editor) => (editorRef.current = editor)}\r\n value={value}\r\n licenseKey='gpl'\r\n init={{\r\n height: 300,\r\n menubar: false,\r\n forced_root_block: false,\r\n plugins: [\r\n 'advlist',\r\n 'autolink',\r\n 'lists',\r\n 'link',\r\n 'image',\r\n 'charmap',\r\n 'preview',\r\n 'anchor',\r\n 'searchreplace',\r\n 'visualblocks',\r\n 'code',\r\n 'fullscreen',\r\n 'insertdatetime',\r\n 'media',\r\n 'table',\r\n 'help',\r\n 'wordcount',\r\n ],\r\n toolbar: isDefaultToolbar,\r\n content_style: `\r\n body {\r\n outline: none;\r\n }\r\n `,\r\n }}\r\n onEditorChange={(content) => onChange?.(stripOuterP(content))}\r\n />\r\n );\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/ui/select';\r\nimport { cn } from '@/lib/utils';\r\nimport { SelectDropdownInputProps } from '@/types/global';\r\nimport LazySelectDropdown from './LazyDropdown';\r\n\r\nconst Dropdown = ({ className, style, ...props }: SelectDropdownInputProps) => {\r\n const list = Array.isArray(props?.data) ? props.data : [];\r\n const placeholder = props.placeholder ? props.placeholder : 'Select an option';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: string) => {\r\n props.onChange?.(value, props?.name ?? '');\r\n };\r\n\r\n const dataKey = props.dataKey || 'value';\r\n const dataLabel = props.dataLabel || 'label';\r\n const options = list.map((item: any) => ({\r\n value: item[dataKey],\r\n label: item[dataLabel]\r\n }));\r\n\r\n if (props.lazyLoad) {\r\n return (\r\n <LazySelectDropdown\r\n {...props}\r\n dataKey={dataKey}\r\n dataLabel={dataLabel}\r\n id={props.name || 'lazy-select-field'}\r\n options={list}\r\n onChange={handleChange}\r\n placeholder={placeholder}\r\n className={className}\r\n style={style}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <Select name={props.name} value={props.value || ''} onValueChange={handleChange} disabled={isDisabled || !isEditable}>\r\n <SelectTrigger\r\n id={props.name || 'select-field'}\r\n className={cn(className, props.errorMessage ? 'border-red-500' : '')}\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n aria-readonly={isReadonly}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {\r\n props.dataLoading && (\r\n <SelectItem value=\"none\" disabled>Loading...</SelectItem>\r\n )\r\n }\r\n {\r\n !props.dataLoading && options.length === 0 && (\r\n <SelectItem value=\"none\" disabled>No options</SelectItem>\r\n )\r\n }\r\n {options.map((opt: { value: string; label: string }) => (\r\n <SelectItem key={opt.value} value={opt.value}>\r\n {opt.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Dropdown;","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","'use client';\r\n\r\nimport { useState, useRef, useEffect, useMemo } from 'react';\r\n\r\nimport { XSquareIcon } from 'lucide-react';\r\n\r\nimport Portal from \"@/components/Wrappers/Portal\";\r\nimport { useLazyDropdown } from '@/hooks/useLazyDropdown';\r\nimport { cn } from \"@/lib/utils\";\r\nimport { SelectDropdownInputProps } from '@/types/global';\r\n\r\ninterface Option {\r\n id: string;\r\n name: string;\r\n}\r\n\r\ninterface LazySelectDropdownProps extends Omit<SelectDropdownInputProps, 'lazyLoad'> {\r\n options: Option[];\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n source?: string;\r\n id?: string;\r\n enableAddNewOption?: boolean;\r\n enforceStrictQueryParams?: boolean;\r\n loading?: boolean;\r\n}\r\n\r\nfunction LazySelectDropdown({\r\n options = [],\r\n value,\r\n onChange,\r\n placeholder,\r\n className,\r\n id,\r\n disabled,\r\n readOnly,\r\n source,\r\n apiUrl,\r\n pageSize,\r\n dataKey = 'id',\r\n dataLabel = 'name',\r\n errorMessage,\r\n axiosInstance,\r\n enableAddNewOption = false,\r\n enforceStrictQueryParams = false,\r\n ...props\r\n}: LazySelectDropdownProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n const observerTarget = useRef<HTMLDivElement>(null);\r\n\r\n const {\r\n options: lazyOptions,\r\n loading,\r\n hasMore,\r\n loadMore,\r\n search,\r\n reset,\r\n loadPage,\r\n createNewOption,\r\n } = useLazyDropdown({\r\n enabled: true,\r\n dataSource: source || '',\r\n apiUrl: apiUrl,\r\n pageSize: pageSize || 10,\r\n dataKey,\r\n dataLabel,\r\n initialData: options || [],\r\n value,\r\n axiosInstance,\r\n enforceStrictQueryParams\r\n });\r\n\r\n const selectedOption = useMemo(() => lazyOptions.find(opt => opt.value === value), [lazyOptions, value]);\r\n\r\n // Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n }\r\n };\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => document.removeEventListener('mousedown', handleClickOutside);\r\n }, []);\r\n\r\n // Infinite scroll\r\n useEffect(() => {\r\n if (!isOpen || !hasMore || loading) return;\r\n\r\n const observer = new IntersectionObserver(\r\n entries => {\r\n if (entries[0].isIntersecting) loadMore();\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n if (observerTarget.current) observer.observe(observerTarget.current);\r\n\r\n return () => observer.disconnect();\r\n }, [isOpen, hasMore, loading, loadMore]);\r\n\r\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const term = e.target.value;\r\n setSearchTerm(term);\r\n search(term);\r\n };\r\n\r\n const handleSelect = (optValue: string) => {\r\n onChange?.(optValue, id || '');\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n reset();\r\n };\r\n\r\n const handleFocus = () => {\r\n if (!disabled) setIsOpen(true);\r\n if (lazyOptions.length === 0)\r\n loadPage(1, '');\r\n };\r\n\r\n const handleRemoveSelection = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onChange?.('', id || '');\r\n setSearchTerm('');\r\n reset();\r\n search('');\r\n };\r\n\r\n const handleAddNewOption = async (newOption: string) => {\r\n const option = await createNewOption(newOption);\r\n if (option) {\r\n onChange?.(option.value, id || '');\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n reset();\r\n }\r\n };\r\n\r\n return (\r\n <div ref={dropdownRef} className=\"relative w-full\">\r\n {/* Trigger Input */}\r\n <input\r\n type=\"text\"\r\n id={id}\r\n name={id}\r\n className={cn(\r\n 'w-full px-3 py-2 border border-[#BDBDBD] rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500 pr-7',\r\n disabled ? 'bg-gray-100 cursor-not-allowed' : 'bg-white cursor-pointer',\r\n className,\r\n errorMessage ? 'border-red-500' : ''\r\n )}\r\n placeholder={selectedOption?.label || placeholder}\r\n value={isOpen ? searchTerm : selectedOption?.label || ''}\r\n onFocus={handleFocus}\r\n onChange={handleSearchChange}\r\n readOnly={!isOpen || readOnly}\r\n disabled={disabled}\r\n autoComplete='off'\r\n />\r\n {selectedOption && !disabled && !readOnly && (\r\n <button\r\n type=\"button\"\r\n aria-label=\"Clear selection\"\r\n onClick={handleRemoveSelection}\r\n className=\"absolute right-2 top-1/2 -translate-y-1/2 h-5 w-5 flex items-center justify-center rounded hover:bg-gray-200 text-gray-500 focus:outline-none\"\r\n >\r\n <XSquareIcon className=\"h-5 w-5 pointer-events-none\" />\r\n </button>\r\n )}\r\n {errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{errorMessage}</p>\r\n )}\r\n {/* Dropdown */}\r\n {isOpen && !disabled && (\r\n <Portal>\r\n <div\r\n onMouseDown={(e) => e.stopPropagation()}\r\n className=\"absolute z-[900] w-fit mt-1 bg-white border border-gray-300 rounded-lg shadow-lg max-h-60 overflow-y-auto\"\r\n style={{\r\n zIndex: 900,\r\n width: dropdownRef.current?.offsetWidth,\r\n top: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().bottom + window.scrollY : 0,\r\n left: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().left + window.scrollX : 0,\r\n }}\r\n >\r\n {\r\n props.loading && !loading ? (\r\n <div className=\"px-3 py-4 text-center text-gray-500 flex items-center justify-center gap-2 text-sm\">\r\n <div className=\"animate-spin w-4 h-4 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\r\n Loading...\r\n </div>\r\n ) : (\r\n <>\r\n {loading && lazyOptions.length === 0 ? (\r\n <div className=\"px-3 py-4 text-center text-gray-500 flex items-center justify-center gap-2 text-sm\">\r\n <div className=\"animate-spin w-4 h-4 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\r\n Loading...\r\n </div>\r\n ) : lazyOptions.length > 0 ? (\r\n <>\r\n {lazyOptions.map((option, index) => (\r\n <div\r\n key={`${option.value}-${index}`}\r\n onClick={() => {\r\n handleSelect(option.value);\r\n }}\r\n className={`px-3 py-2 hover:bg-blue-50 cursor-pointer text-sm ${option.value === value ? 'bg-blue-100' : ''}`}\r\n >\r\n {option.label}\r\n </div>\r\n ))}\r\n\r\n {hasMore && (\r\n <div\r\n ref={observerTarget}\r\n className=\"px-3 py-2 text-center text-gray-400 text-sm border-t\"\r\n >\r\n {loading ? (\r\n <div className=\"flex items-center justify-center gap-2 text-sm\">\r\n <div className=\"animate-spin w-3 h-3 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\r\n Loading more...\r\n </div>\r\n ) : (\r\n 'Scroll for more...'\r\n )}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <div className=\"px-3 py-4 text-sm text-center text-gray-500\">\r\n {searchTerm ? `No results for \"${searchTerm}\"` : 'No options available'}\r\n {\r\n enableAddNewOption && searchTerm && (\r\n <div\r\n onClick={() => {\r\n handleAddNewOption(searchTerm);\r\n }}\r\n className=\"mt-2 px-3 py-2 bg-green-50 hover:bg-green-100 cursor-pointer text-green-700 rounded text-sm\"\r\n >\r\n {`Add \"${searchTerm}\"`}\r\n </div>\r\n )\r\n }\r\n </div>\r\n )}\r\n </>\r\n )\r\n }\r\n </div>\r\n </Portal>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default LazySelectDropdown;","import { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nimport axios from 'axios';\r\n\r\ninterface LazyDropdownConfig {\r\n enabled: boolean;\r\n dataSource: string;\r\n dataKey: string;\r\n dataLabel: string;\r\n initialData?: any[];\r\n apiUrl?: string; // API endpoint for lazy loading\r\n pageSize?: number; // Items per page\r\n value?: string | string[];\r\n axiosInstance?: typeof axios;\r\n isMultiSelect?: boolean;\r\n enforceStrictQueryParams?: boolean;\r\n fetchOnMount?: boolean;\r\n}\r\n\r\ninterface LazyDropdownOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface LazyDropdownResult {\r\n options: LazyDropdownOption[];\r\n loading: boolean;\r\n hasMore: boolean;\r\n loadMore: () => void;\r\n search: (term: string) => void;\r\n reset: () => void;\r\n loadPage: (pageNum: number, term: string) => void;\r\n createNewOption: (label: string) => Promise<LazyDropdownOption | null>;\r\n}\r\n\r\nexport function useLazyDropdown(config: LazyDropdownConfig): LazyDropdownResult {\r\n const [options, setOptions] = useState<LazyDropdownOption[]>([]);\r\n const [page, setPage] = useState(1);\r\n const [hasMore, setHasMore] = useState(true);\r\n const [loading, setLoading] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const debounceTimer = useRef<NodeJS.Timeout | null>(null);\r\n const allDataRef = useRef<any[]>([]);\r\n const configRef = useRef(config);\r\n\r\n const PAGE_SIZE = config.pageSize || 10;\r\n\r\n useEffect(() => {\r\n setOptions([]);\r\n setPage(1);\r\n setHasMore(true);\r\n }, [config.apiUrl])\r\n\r\n const uniqueOptions = (items: LazyDropdownOption[]) => {\r\n const seen = new Set();\r\n return items.filter((item) => {\r\n if (seen.has(item.value)) return false;\r\n seen.add(item.value);\r\n return true;\r\n });\r\n };\r\n\r\n // Update config ref\r\n useEffect(() => {\r\n configRef.current = config;\r\n }, [config]);\r\n\r\n function getValueByPath(obj: any, path: string) {\r\n if (!obj || !path) return undefined;\r\n const parts = path.split(/\\./); // split by . for nested paths\r\n return parts.reduce((acc, key) => acc?.[key], obj);\r\n }\r\n\r\n // Transform raw data into dropdown options\r\n const transformToOptions = useCallback((data: any[]): LazyDropdownOption[] => {\r\n if (!data || !Array.isArray(data)) return [];\r\n const cfg = configRef.current;\r\n \r\n return data.map(item => {\r\n const value = getValueByPath(item, cfg.dataKey) ?? item.id ?? '';\r\n let label: any = '';\r\n \r\n if (cfg.dataLabel) {\r\n label = getValueByPath(item, cfg.dataLabel) ?? item.name ?? item.label ?? item.first_name ?? '';\r\n }\r\n\r\n return {\r\n value: value,\r\n label: label\r\n };\r\n });\r\n }, []);\r\n\r\n function extractAndEnforceUrlParams(apiUrl: string, enforceStrict: boolean) {\r\n const urlObj = new URL(\r\n apiUrl,\r\n typeof window !== 'undefined' ? window.location.origin : 'http://localhost'\r\n );\r\n\r\n const cleaned: Record<string, any> = {};\r\n let hasEmpty = false;\r\n const baseUrl = urlObj.origin + urlObj.pathname;\r\n\r\n // Loop through params and override duplicates (keeps the last value)\r\n urlObj.searchParams.forEach((value, key) => {\r\n const isEmpty = value === '' || value === undefined || value === null;\r\n\r\n if (isEmpty) {\r\n hasEmpty = true;\r\n\r\n // strict mode → abort entirely\r\n if (enforceStrict) return;\r\n\r\n // non-strict → skip empty but continue\r\n return;\r\n }\r\n\r\n cleaned[key] = value; // last value wins (removes duplicates)\r\n });\r\n\r\n return {\r\n baseUrl,\r\n shouldAbort: enforceStrict && hasEmpty,\r\n params: cleaned,\r\n };\r\n }\r\n\r\n // Fetch data from API\r\n const fetchApiData = useCallback(async (pageNum: number, term: string) => {\r\n if (!configRef.current.apiUrl) return [];\r\n const limit = PAGE_SIZE;\r\n const params: any = { page: pageNum, limit };\r\n if (term) params[configRef.current.dataLabel ? `${configRef.current.dataLabel}[ilike]` : 'search[ilike]'] = term;\r\n\r\n const { baseUrl, shouldAbort, params: urlParams } = extractAndEnforceUrlParams(\r\n configRef.current.apiUrl,\r\n !!configRef.current.enforceStrictQueryParams\r\n );\r\n\r\n if (shouldAbort) {\r\n setLoading(false);\r\n return [];\r\n }\r\n\r\n const finalParams = { ...urlParams, ...params };\r\n\r\n const axiosClient = configRef.current.axiosInstance ?? axios;\r\n const res = await axiosClient.get(baseUrl, {\r\n params: finalParams,\r\n withCredentials: true\r\n });\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n const data = res.data.data;\r\n return transformToOptions(data);\r\n }\r\n return [];\r\n }, [PAGE_SIZE, transformToOptions]);\r\n\r\n // Load a page of data\r\n const loadPage = useCallback(async (pageNum: number, term: string) => {\r\n const cfg = configRef.current;\r\n if (!cfg.enabled) return;\r\n setLoading(true);\r\n\r\n try {\r\n let pageOptions: LazyDropdownOption[] = [];\r\n\r\n if (cfg.dataSource === 'api') {\r\n pageOptions = await fetchApiData(pageNum, term);\r\n // For API, we assume more data is available if we get full page\r\n setHasMore(pageOptions.length === PAGE_SIZE);\r\n } else {\r\n // Local data\r\n const allData = allDataRef.current || [];\r\n let filtered = allData;\r\n if (term) {\r\n const termLower = term.toLowerCase();\r\n filtered = allData.filter(item => {\r\n const label = String(item[cfg.dataLabel] ?? item.name ?? item.label ?? '').toLowerCase();\r\n const value = String(item[cfg.dataKey] ?? item.id ?? '').toLowerCase();\r\n return label.includes(termLower) || value.includes(termLower);\r\n });\r\n }\r\n const start = (pageNum - 1) * PAGE_SIZE;\r\n const end = start + PAGE_SIZE;\r\n pageOptions = transformToOptions(filtered.slice(start, end));\r\n setHasMore(end < filtered.length);\r\n }\r\n\r\n setOptions(prev => {\r\n const merged = pageNum === 1\r\n ? pageOptions\r\n : [...prev, ...pageOptions];\r\n\r\n return uniqueOptions(merged);\r\n });\r\n setPage(pageNum);\r\n } catch (err) {\r\n console.error('❌ useLazyDropdown loadPage error:', err);\r\n setHasMore(false);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [fetchApiData, transformToOptions]);\r\n\r\n const fetchValueItem = async () => {\r\n if (!configRef.current.apiUrl) return [];\r\n try {\r\n setLoading(true);\r\n const axiosClient = configRef.current.axiosInstance ?? axios;\r\n let params: any = {\r\n [configRef.current.dataKey]: configRef.current.value\r\n };\r\n if (Array.isArray(configRef.current.value)) {\r\n if (configRef.current.value.length === 0) {\r\n setLoading(false);\r\n return;\r\n }\r\n params = {\r\n [`${configRef.current.dataKey}[in]`]: configRef.current.value.join(',')\r\n };\r\n }\r\n const { baseUrl, shouldAbort, params: urlParams } = extractAndEnforceUrlParams(\r\n configRef.current.apiUrl,\r\n !!configRef.current.enforceStrictQueryParams\r\n );\r\n\r\n if (shouldAbort) {\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n const finalParams = { ...urlParams, ...params };\r\n const res = await axiosClient.get(baseUrl, {\r\n params: finalParams,\r\n withCredentials: true,\r\n });\r\n\r\n if (res.data?.success && Array.isArray(res.data.data) && res.data.data.length > 0) {\r\n const fetched = transformToOptions(res.data.data);\r\n setOptions(prev => uniqueOptions([...fetched, ...prev]));\r\n }\r\n } catch (err) {\r\n console.warn('⚠️ Failed to fetch default value for dropdown:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const cfg = configRef.current;\r\n if (!cfg.enabled || !cfg.value || cfg.dataSource !== 'api' || !cfg.apiUrl) return;\r\n\r\n if (cfg.isMultiSelect) {\r\n const values = Array.isArray(cfg.value) ? cfg.value.map((v: string) => v.trim()) : [];\r\n const valueExists = values.every(val => options.some(opt => opt.value === val));\r\n if (valueExists) return;\r\n } else {\r\n const valueExists = options.some(opt => opt.value === cfg.value);\r\n if (valueExists) return;\r\n }\r\n fetchValueItem();\r\n }, [JSON.stringify(config.value), config.dataKey, config.apiUrl, config.dataSource]);\r\n\r\n // Load more (next page)\r\n const loadMore = useCallback(() => {\r\n if (!loading && hasMore) {\r\n loadPage(page + 1, searchTerm);\r\n }\r\n }, [loading, hasMore, page, searchTerm]);\r\n\r\n // Search with debounce\r\n const search = useCallback((term: string) => {\r\n setSearchTerm(term);\r\n\r\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\r\n\r\n debounceTimer.current = setTimeout(() => {\r\n loadPage(1, term);\r\n }, 300);\r\n }, []);\r\n\r\n // Reset dropdown\r\n const reset = useCallback(() => {\r\n setSearchTerm('');\r\n setPage(1);\r\n }, []);\r\n\r\n // Initialize data\r\n useEffect(() => {\r\n if (config.initialData?.length) {\r\n allDataRef.current = config.initialData;\r\n }\r\n }, [config.initialData]);\r\n\r\n useEffect(() => {\r\n if (config.fetchOnMount) loadPage(1, '');\r\n\r\n return () => {\r\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\r\n };\r\n }, []);\r\n\r\n const createNewOption = async (label: string) => {\r\n if (!configRef.current.apiUrl) return null;\r\n\r\n const axiosClient = configRef.current.axiosInstance ?? axios;\r\n const apiUrl = configRef.current.apiUrl!;\r\n const urlObj = new URL(\r\n apiUrl,\r\n typeof window !== 'undefined' ? window.location.origin : 'http://localhost'\r\n );\r\n\r\n const queryParams: Record<string, string> = {};\r\n urlObj.searchParams.forEach((value, key) => {\r\n queryParams[key] = value;\r\n });\r\n\r\n const body = {\r\n ...queryParams,\r\n [configRef.current.dataLabel]: label\r\n };\r\n\r\n const res = await axiosClient.post(urlObj.origin + urlObj.pathname, body, {\r\n withCredentials: true,\r\n });\r\n\r\n if (res.data?.success && Array.isArray(res.data.data) && res.data.data.length > 0) {\r\n const fetched = transformToOptions(res.data.data);\r\n setOptions(prev => uniqueOptions([...fetched, ...prev]));\r\n return fetched[0];\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return {\r\n options,\r\n loading,\r\n hasMore,\r\n loadMore,\r\n search,\r\n reset,\r\n loadPage,\r\n createNewOption\r\n };\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Label } from '@/components/ui/label';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport { SwitchToggleInputProps } from '@/types/global';\r\n\r\nconst SwitchToggle = ({ className, style, ...props }: SwitchToggleInputProps) => {\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: boolean) => {\r\n props.onChange?.(value, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <div className=\"flex items-center space-x-2 mb-2\">\r\n <Switch\r\n id={props.name || 'switch'}\r\n checked={!!props.value}\r\n onCheckedChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n />\r\n <Label htmlFor={props.name || 'switch'}>{props.text}</Label>\r\n </div>\r\n </div>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default SwitchToggle;","import * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { PhoneInput as PhoneInputField } from 'react-international-phone';\r\n\r\nimport { PhoneInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nimport 'react-international-phone/style.css';\r\n\r\nconst ensureIndiaCode = (val: string) => {\r\n if (!val) return '';\r\n const trimmed = val.trim();\r\n if (trimmed.startsWith('+')) return trimmed;\r\n const local = trimmed.replace(/^0+/, '');\r\n return `+91${local}`;\r\n};\r\n\r\nconst PhoneInput = ({ className, style, ...props }: PhoneInputProps) => {\r\n const placeholder = props.placeholder ?? 'Enter phone number';\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n\r\n useEffect(() => {\r\n if (props.value !== undefined) {\r\n // Ensure +91 code when mounting\r\n const normalized = ensureIndiaCode(props.value);\r\n handleChange?.(normalized);\r\n }\r\n }, []);\r\n\r\n const handleChange = (val: string) => {\r\n const normalized = ensureIndiaCode(val);\r\n const event = {\r\n target: {\r\n name: props.name || '',\r\n value: normalized\r\n }\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n props.onChange?.(event, props.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <PhoneInputField\r\n defaultCountry=\"in\"\r\n name={props.name}\r\n value={props.value ? ensureIndiaCode(props.value) : ''}\r\n className={cn(\r\n 'rounded-md border-1',\r\n className,\r\n props.errorMessage ? 'border-red-500' : '')}\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n onChange={handleChange}\r\n inputProps={{\r\n id: 'phone-field',\r\n style: { width: '100%', border: 'none', outline: 'none' },\r\n }}\r\n placeholder={placeholder}\r\n disabled={isDisabled || !isEditable}\r\n />\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default PhoneInput;","'use client';\r\nimport { useEffect } from 'react'\r\nimport { Search } from 'lucide-react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { SearchInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst SearchInput = ({ className, style, ...props }: SearchInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'search'}\r\n id={props.name || 'text-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default SearchInput;","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { cn } from '@/lib/utils';\r\nimport { FileInputProps } from '@/types/global';\r\n\r\nconst FileInput = ({ className, style, ...props }: FileInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <div className=\"d-flex items-center relative align-middle\">\r\n <Input\r\n type={props.inputType || 'file'}\r\n id={props.name || 'file-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete=\"off\"\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n />\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default FileInput;","'use client';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { format } from 'date-fns';\r\nimport { Calendar1Icon, XSquareIcon } from 'lucide-react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { Calendar } from '@/components/ui/calendar';\r\nimport { Input } from '@/components/ui/input';\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '@/components/ui/popover';\r\nimport { cn } from '@/lib/utils';\r\nimport { DatePickerInputProps } from '@/types/global';\r\n\r\nfunction resolveDate(option: any, customOption?: any): Date | undefined {\r\n if (!option) return undefined;\r\n\r\n switch (option) {\r\n case 'today':\r\n return new Date();\r\n case 'custom':\r\n return customOption ? new Date(customOption) : undefined;\r\n case 'none':\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default function DateTimePicker({\r\n className,\r\n style,\r\n mode = 'date',\r\n ...props\r\n}: DatePickerInputProps) {\r\n\r\n const placeholderMap = {\r\n date: 'Select date',\r\n datetime: 'Select date & time',\r\n time: 'Select time',\r\n };\r\n const placeholder = props.placeholder ?? placeholderMap[mode as keyof typeof placeholderMap];\r\n\r\n const minimumDate = props.minimumDate ?? 'none';\r\n const customMinimumDate = props.customMinimumDate ?? '';\r\n\r\n const maximumDate = props.maximumDate ?? 'none';\r\n const customMaximumDate = props.customMaximumDate ?? '';\r\n\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n const minDate = resolveDate(minimumDate, customMinimumDate);\r\n const maxDate = resolveDate(maximumDate, customMaximumDate);\r\n\r\n // Internal state: keep a Date, initialize from props.value (ISO/string)\r\n const [date, setDate] = React.useState<Date | undefined>(() => {\r\n if (!props.value) return undefined;\r\n const d = new Date(props.value as any);\r\n return isNaN(d.getTime()) ? undefined : d;\r\n });\r\n\r\n // Time pieces (24h)\r\n const initialHours = date ? date.getHours() : 0;\r\n const initialMinutes = date ? date.getMinutes() : 0;\r\n const [hours, setHours] = React.useState(initialHours);\r\n const [minutes, setMinutes] = React.useState(initialMinutes);\r\n\r\n const [amPm, setAmPm] = React.useState('AM');\r\n\r\n const displayHours = React.useMemo(() => {\r\n if (hours === 0) return 12;\r\n if (hours > 12) return hours - 12;\r\n return hours;\r\n }, [hours]);\r\n\r\n React.useEffect(() => {\r\n setAmPm(hours >= 12 ? 'PM' : 'AM');\r\n }, [hours]);\r\n\r\n React.useEffect(() => {\r\n if (!props.value) {\r\n setDate(undefined);\r\n return;\r\n }\r\n const d = new Date(props.value as any);\r\n if (!isNaN(d.getTime())) {\r\n setDate(d);\r\n setHours(d.getHours());\r\n setMinutes(d.getMinutes());\r\n }\r\n }, [props.value]);\r\n\r\n const [year, setYear] = React.useState(date ? date.getFullYear() : new Date().getFullYear());\r\n\r\n React.useEffect(() => {\r\n if (!date) return;\r\n const newDate = new Date(date);\r\n newDate.setFullYear(year);\r\n setDate(newDate);\r\n emitChange(newDate);\r\n }, [year]);\r\n\r\n const emitChange = (nextDate: Date | undefined) => {\r\n if (!props.onChange) return;\r\n\r\n let valueString = '';\r\n if (!nextDate) {\r\n valueString = '';\r\n } else if (mode === 'date') {\r\n valueString = format(nextDate, 'yyyy-MM-dd');\r\n } else if (mode === 'time') {\r\n valueString = format(nextDate, 'HH:mm:ss');\r\n } else {\r\n valueString = nextDate.toISOString();\r\n }\r\n\r\n const target = {\r\n name: props.name || '',\r\n value: valueString,\r\n } as HTMLInputElement;\r\n\r\n const event = {\r\n target,\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n\r\n props.onChange(event, props.name || '');\r\n };\r\n\r\n const updateDateTime = (nextBaseDate: Date | undefined, h = hours, m = minutes) => {\r\n if (!nextBaseDate) {\r\n setDate(undefined);\r\n emitChange(undefined);\r\n return;\r\n }\r\n\r\n const d = new Date(nextBaseDate);\r\n if (mode !== 'date') {\r\n d.setHours(h);\r\n d.setMinutes(m);\r\n d.setSeconds(0);\r\n d.setMilliseconds(0);\r\n } else {\r\n d.setHours(0, 0, 0, 0);\r\n }\r\n\r\n if (minDate && d < minDate) return;\r\n if (maxDate && d > maxDate) return;\r\n\r\n setDate(d);\r\n setYear(d.getFullYear());\r\n emitChange(d);\r\n };\r\n\r\n const handleDaySelect = (next: Date | undefined) => {\r\n if (!next) {\r\n setDate(undefined);\r\n emitChange(undefined);\r\n return;\r\n }\r\n\r\n const clickedDate = new Date(next);\r\n\r\n updateDateTime(clickedDate);\r\n };\r\n\r\n const updateTimeInDate = (h: number, m: number) => {\r\n if (!date) {\r\n // If no current date, use today or fallback date\r\n const fallbackDate = new Date();\r\n fallbackDate.setHours(h);\r\n fallbackDate.setMinutes(m);\r\n fallbackDate.setSeconds(0);\r\n fallbackDate.setMilliseconds(0);\r\n setDate(fallbackDate);\r\n emitChange(fallbackDate);\r\n } else {\r\n const newDate = new Date(date);\r\n newDate.setHours(h);\r\n newDate.setMinutes(m);\r\n newDate.setSeconds(0);\r\n newDate.setMilliseconds(0);\r\n setDate(newDate);\r\n emitChange(newDate);\r\n }\r\n };\r\n\r\n const handleHoursChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n let h = Number(e.target.value);\r\n if (amPm === 'PM' && h < 12) h += 12;\r\n if (amPm === 'AM' && h === 12) h = 0;\r\n setHours(h);\r\n updateTimeInDate(h, minutes);\r\n };\r\n\r\n const handleMinutesChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const m = Number(e.target.value);\r\n setMinutes(m);\r\n updateTimeInDate(hours, m);\r\n };\r\n\r\n const handleAmPmChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const val = e.target.value;\r\n setAmPm(val);\r\n let h = displayHours;\r\n if (val === 'PM' && h < 12) h += 12;\r\n if (val === 'AM' && h === 12) h = 0;\r\n setHours(h);\r\n updateTimeInDate(h, minutes);\r\n };\r\n\r\n const currentYear = new Date().getFullYear();\r\n const yearOptions = [];\r\n for (let y = currentYear - 50; y <= currentYear + 10; y++) {\r\n yearOptions.push(y);\r\n }\r\n\r\n const displayValue = React.useMemo(() => {\r\n if (!date) return '';\r\n try {\r\n if (mode === 'date') return format(date, 'dd-MM-yyyy');\r\n if (mode === 'time') return format(date, 'hh:mm aa');\r\n return format(date, 'dd-MM-yyyy hh:mm aa');\r\n } catch {\r\n return '';\r\n }\r\n }, [date, mode]);\r\n\r\n const isInputDisabled = isDisabled || !isEditable;\r\n\r\n const [calendarMonthState, setCalendarMonthState] = React.useState(() => {\r\n const currentMonth = new Date().getMonth();\r\n return date ? new Date(date.getFullYear(), date.getMonth()) : new Date(year, currentMonth);\r\n });\r\n\r\n React.useEffect(() => {\r\n setCalendarMonthState(new Date(year, calendarMonthState.getMonth()));\r\n }, [year]);\r\n\r\n const handleToday = () => {\r\n const today = new Date();\r\n const selectedYearDate = new Date(year, today.getMonth(), today.getDate());\r\n updateDateTime(selectedYearDate);\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col\">\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(\r\n 'w-full justify-start text-left font-normal',\r\n !date && 'text-muted-foreground',\r\n props.errorMessage && 'border-red-500',\r\n className\r\n )}\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor,\r\n }}\r\n disabled={isInputDisabled}\r\n >\r\n <Calendar1Icon className=\"absolute left-2 top-2\" />\r\n <span className=\"ml-5\">{displayValue || placeholder}</span>\r\n {displayValue && (\r\n <XSquareIcon\r\n className=\"absolute right-2 top-2 cursor-pointer\"\r\n role='presentation'\r\n style={{ pointerEvents: 'auto' }}\r\n onClick={e => {\r\n e.stopPropagation();\r\n setDate(undefined);\r\n emitChange(undefined);\r\n }}\r\n />\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n\r\n <PopoverContent className=\"w-auto text-sm p-2\" align=\"start\">\r\n <div className=\"flex flex-col gap-1\">\r\n {(mode === 'date' || mode === 'datetime') && (\r\n <>\r\n <div className=\"flex items-center justify-between gap-1\">\r\n <label\r\n className=\"text-xs text-blue-600 font-bold cursor-pointer\"\r\n role='presentation'\r\n onClick={handleToday}\r\n >\r\n Today\r\n </label>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={year}\r\n onChange={(e) => setYear(Number(e.target.value))}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n {yearOptions.map((y) => (\r\n <option key={y} value={y}>\r\n {y}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"calendar-container\">\r\n <Calendar\r\n mode=\"single\"\r\n selected={date}\r\n onSelect={handleDaySelect}\r\n month={calendarMonthState}\r\n onMonthChange={(newMonth) => setCalendarMonthState(newMonth)}\r\n disabled={(d) => {\r\n if (minDate && d < minDate) return true;\r\n if (maxDate && d > maxDate) return true;\r\n return false;\r\n }}\r\n className='p-[10px]'\r\n autoFocus\r\n />\r\n </div>\r\n </>\r\n )}\r\n\r\n {(mode === 'time' || mode === 'datetime') && (\r\n <div className=\"flex items-center gap-2 mt-0\">\r\n <label className=\"text-xs text-muted-foreground\">Time</label>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={displayHours}\r\n onChange={handleHoursChange}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n {Array.from({ length: 12 }, (_, i) => i + 1).map((hour) => (\r\n <option key={hour} value={hour}>\r\n {hour.toString().padStart(2, '0')}\r\n </option>\r\n ))}\r\n </select>\r\n <span className=\"text-sm\">:</span>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={minutes}\r\n onChange={handleMinutesChange}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n {Array.from({ length: 12 }).map((_, i) => {\r\n const val = i * 5;\r\n return (\r\n <option key={val} value={val}>\r\n {val.toString().padStart(2, '0')}\r\n </option>\r\n );\r\n })}\r\n </select>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={amPm}\r\n onChange={handleAmPmChange}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n )}\r\n </div>\r\n\r\n </PopoverContent>\r\n </Popover>\r\n\r\n <Input\r\n type=\"hidden\"\r\n id={props.name}\r\n name={props.name}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n readOnly={isReadonly}\r\n value={\r\n !date\r\n ? ''\r\n : mode === 'date'\r\n ? format(date, 'yyyy-MM-dd')\r\n : mode === 'time'\r\n ? format(date, 'HH:mm:ss')\r\n : date.toISOString()\r\n }\r\n onChange={() => { }}\r\n />\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/components/ui/button\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","'use client';\r\nimport React, { useEffect } from 'react';\r\n\r\nimport { addDays, format } from 'date-fns';\r\nimport { DateRange as DateRangeProps } from 'react-day-picker';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { Calendar } from '@/components/ui/calendar';\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '@/components/ui/popover';\r\nimport { cn } from '@/lib/utils';\r\nimport { DateRangeInputProps } from '@/types/global';\r\n\r\nconst DateRange = ({ className, style, ...props }: DateRangeInputProps) => {\r\n const isDateRange = (val: any): val is DateRangeProps => !!val && val.from instanceof Date;\r\n\r\n const [date, setDate] = React.useState<DateRangeProps | undefined>(\r\n isDateRange(props.value)\r\n ? props.value\r\n : {\r\n from: new Date(),\r\n to: addDays(new Date(), 7),\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value && isDateRange(props.value)) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: DateRangeProps | undefined) => {\r\n setDate(value);\r\n if (value) {\r\n props.onChange?.(value, props?.name || '');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n id=\"date\"\r\n variant={'outline'}\r\n className={cn(\r\n 'w-full justify-start text-left font-normal text-[11px] border-[#BDBDBD]',\r\n !date && 'text-muted-foreground'\r\n )}\r\n >\r\n {date?.from ? (\r\n date.to ? (\r\n <>\r\n {format(date.from, 'LLL dd, y')} -{' '}\r\n {format(date.to, 'LLL dd, y')}\r\n </>\r\n ) : (\r\n format(date.from, 'LLL dd, y')\r\n )\r\n ) : (\r\n <span>Pick a date range</span>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <Calendar\r\n mode=\"range\"\r\n defaultMonth={date?.from}\r\n selected={date}\r\n onSelect={handleChange}\r\n numberOfMonths={2}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n {props.errorMessage && <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>}\r\n </>\r\n );\r\n}\r\n\r\nexport default DateRange;","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Input } from '@/components/ui/input';\r\nimport { cn } from '@/lib/utils';\r\nimport { TextInputGroupProps } from '@/types/global';\r\n\r\nconst TextInputGroup = ({ className, style, prepend, append, ...props }: TextInputGroupProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value } } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <div className={\r\n cn(\r\n 'flex justify-start items-center relative border border-input rounded-md bg-transparent focus-within:ring-2 focus-within:ring-ring focus-within:border-primary',\r\n className,\r\n 'p-0 m-0',\r\n props.errorMessage ? 'border-red-500' : ''\r\n )\r\n }\r\n >\r\n {prepend && (\r\n <div className=\"px-3 flex items-center bg-gray-500 text-white h-10 rounded-l-md\">\r\n {prepend}\r\n </div>\r\n )}\r\n <Input\r\n id={props.name || 'prepend-input'}\r\n type=\"url\"\r\n name={props.name}\r\n value={props.value || ''}\r\n className={\r\n cn(\r\n className,\r\n 'rounded-none flex-1 border-none focus:ring-0'\r\n )\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n {append && (\r\n <div className=\"px-3 flex items-center bg-gray-500 text-white h-10 rounded-r-md\">\r\n {append}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default TextInputGroup;","'use client';\r\n\r\nimport { useState, useRef, useEffect, useMemo, useCallback } from 'react';\r\n\r\nimport { XIcon, XSquareIcon } from 'lucide-react';\r\n\r\nimport Portal from '@/components/Wrappers/Portal';\r\nimport { useLazyDropdown } from '@/hooks/useLazyDropdown';\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface Option {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface LazyMultiSelectDropdownProps extends Omit<any, 'lazyLoad'> {\r\n options?: Option[];\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n id?: string;\r\n source?: string;\r\n apiUrl?: string;\r\n pageSize?: number;\r\n dataKey?: string;\r\n dataLabel?: string;\r\n value?: string[] | string;\r\n onChange?: (val: string[] | string, id?: string) => void;\r\n errorMessage?: string;\r\n axiosInstance?: any;\r\n outputFormat?: 'array' | 'comma' | 'semicolon';\r\n}\r\n\r\nexport default function LazyMultiSelectDropdown({\r\n value = [],\r\n onChange,\r\n placeholder,\r\n className,\r\n id,\r\n disabled,\r\n readOnly,\r\n source,\r\n apiUrl,\r\n pageSize,\r\n dataKey = 'id',\r\n dataLabel = 'name',\r\n errorMessage,\r\n axiosInstance,\r\n outputFormat = 'array',\r\n ...props\r\n}: LazyMultiSelectDropdownProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n const observerTarget = useRef<HTMLDivElement>(null);\r\n\r\n const ensureUnique = (arr: string[]): string[] => {\r\n return Array.from(new Set(arr));\r\n };\r\n\r\n const normalizeInput = (value: any): string[] => {\r\n let arr: string[] = [];\r\n\r\n if (Array.isArray(value)) {\r\n arr = value;\r\n } else if (typeof value === 'string') {\r\n if (!value.trim()) return [];\r\n if (value.includes(';')) arr = value.split(';').map(v => v.trim());\r\n else if (value.includes(',')) arr = value.split(',').map(v => v.trim());\r\n else arr = [value.trim()];\r\n }\r\n\r\n return ensureUnique(arr);\r\n };\r\n\r\n const normalizedValue = normalizeInput(value);\r\n\r\n const list = Array.isArray(props?.data) ? props.data : [];\r\n const {\r\n options: lazyOptions,\r\n loading,\r\n hasMore,\r\n loadMore,\r\n search,\r\n loadPage,\r\n } = useLazyDropdown({\r\n enabled: true,\r\n dataSource: source || '',\r\n apiUrl: apiUrl,\r\n pageSize: pageSize ?? 10,\r\n dataKey,\r\n dataLabel,\r\n initialData: list || [],\r\n value: normalizedValue,\r\n axiosInstance,\r\n isMultiSelect: true,\r\n });\r\n\r\n const dataLoading = props.loading || loading;\r\n\r\n const convertOutput = (values: string[]): string[] | string => {\r\n const unique = ensureUnique(values);\r\n switch (outputFormat) {\r\n case 'comma':\r\n return unique.join(',');\r\n case 'semicolon':\r\n return unique.join(';');\r\n default:\r\n return unique;\r\n }\r\n };\r\n\r\n const selectedOptions = useMemo((): Option[] => {\r\n return normalizedValue.map(id => {\r\n const fromLazy = lazyOptions.find(opt => opt.value === id);\r\n if (fromLazy) return fromLazy;\r\n return { value: id, label: id };\r\n });\r\n }, [normalizedValue, lazyOptions]);\r\n\r\n useEffect(() => {\r\n const handleClick = (e: MouseEvent) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleClick);\r\n return () => document.removeEventListener('mousedown', handleClick);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isOpen || !hasMore || loading) return;\r\n\r\n const obs = new IntersectionObserver(\r\n entries => {\r\n if (entries[0].isIntersecting) loadMore();\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n if (observerTarget.current) obs.observe(observerTarget.current);\r\n return () => obs.disconnect();\r\n }, [isOpen, hasMore, loading, loadMore]);\r\n\r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const term = e.target.value;\r\n setSearchTerm(term);\r\n search(term);\r\n };\r\n\r\n const toggleSelect = (val: string) => {\r\n let updated: string[];\r\n\r\n if (normalizedValue.includes(val)) {\r\n updated = normalizedValue.filter(v => v !== val);\r\n } else {\r\n updated = ensureUnique([...normalizedValue, val]);\r\n }\r\n\r\n onChange?.(convertOutput(updated), id);\r\n };\r\n\r\n const removeTag = (val: string) => {\r\n const updated = normalizedValue.filter(v => v !== val);\r\n onChange?.(convertOutput(updated), id);\r\n };\r\n\r\n const handleFocus = () => {\r\n if (!disabled) {\r\n setIsOpen(true);\r\n if (lazyOptions.length === 0) {\r\n loadPage(1, '');\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div ref={dropdownRef} className=\"relative w-full\">\r\n <div\r\n onClick={handleFocus}\r\n className={cn(\r\n 'w-full flex items-center flex-wrap gap-1 border border-[#BDBDBD] rounded-md bg-white cursor-pointer',\r\n disabled && 'bg-gray-100 cursor-not-allowed',\r\n errorMessage && 'border-red-500',\r\n className,\r\n 'px-2 py-2 min-h-[35px]'\r\n )}\r\n >\r\n {selectedOptions.map(opt => (\r\n <span\r\n key={opt.value}\r\n className=\"bg-blue-100 text-blue-700 px-2 py-1 rounded-md text-xs flex items-center gap-1\"\r\n >\r\n {opt.label}\r\n {!disabled && !readOnly && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n removeTag(opt.value);\r\n }}\r\n className=\"hover:text-red-600\"\r\n >\r\n <XIcon size={12} />\r\n </button>\r\n )}\r\n </span>\r\n ))}\r\n\r\n <input\r\n type=\"text\"\r\n placeholder={selectedOptions.length ? '' : placeholder}\r\n className=\"flex-1 min-w-[60px] px-2 py-0 outline-none text-xs disabled:cursor-not-allowed\"\r\n value={isOpen ? searchTerm : ''}\r\n onChange={handleSearch}\r\n readOnly={readOnly}\r\n disabled={disabled}\r\n autoComplete='off'\r\n />\r\n </div>\r\n\r\n {errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{errorMessage}</p>\r\n )}\r\n\r\n {isOpen && !disabled && (\r\n <Portal>\r\n <div\r\n onMouseDown={(e) => e.stopPropagation()}\r\n className=\"absolute z-[999] mt-1 bg-white border rounded-lg shadow-lg max-h-60 overflow-y-auto\"\r\n style={{\r\n zIndex: 900,\r\n width: dropdownRef.current?.offsetWidth,\r\n top: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().bottom + window.scrollY : 0,\r\n left: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().left + window.scrollX : 0,\r\n }}\r\n >\r\n {dataLoading && lazyOptions.length === 0 ? (\r\n <div className=\"px-3 py-3 text-center text-gray-500\">\r\n Loading...\r\n </div>\r\n ) : lazyOptions.length > 0 ? (\r\n <>\r\n {lazyOptions.map((option) => {\r\n const isSelected = normalizedValue.includes(option.value);\r\n return (\r\n <div\r\n key={option.value}\r\n onClick={() => toggleSelect(option.value)}\r\n className={cn(\r\n 'px-3 py-2 text-sm cursor-pointer hover:bg-blue-50 flex justify-between',\r\n isSelected && 'bg-blue-100'\r\n )}\r\n >\r\n {option.label}\r\n {isSelected && <XSquareIcon size={16} />}\r\n </div>\r\n );\r\n })}\r\n\r\n {hasMore && (\r\n <div\r\n ref={observerTarget}\r\n className=\"px-3 py-3 text-center text-gray-400 text-sm\"\r\n >\r\n {loading ? 'Loading…' : 'Scroll for more…'}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <div className=\"px-3 py-3 text-center text-gray-500\">\r\n No results\r\n </div>\r\n )}\r\n </div>\r\n </Portal>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\nimport * as React from 'react';\r\n\r\nimport { faEllipsisH } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {\r\n ColumnDef,\r\n flexRender,\r\n getCoreRowModel,\r\n getPaginationRowModel,\r\n getFilteredRowModel,\r\n ColumnFiltersState,\r\n useReactTable,\r\n} from '@tanstack/react-table';\r\nimport { ArrowDown, ArrowUp, ArrowUpDown, Search } from 'lucide-react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '@/components/ui/popover';\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from '@/components/ui/table';\r\nimport { useDynamicColumns } from '@/lib/table/useDynamicColumns';\r\n\r\ninterface RowAction<TData> {\r\n id: string;\r\n header: string;\r\n onClick: (row: TData) => void;\r\n icon?: string;\r\n}\r\n\r\ninterface DataTableProps<TData, TValue> {\r\n columns: ColumnDef<TData, TValue>[];\r\n data: TData[];\r\n rowActions?: RowAction<TData>[];\r\n loading?: boolean;\r\n onCellClick?: (cellData: TData, columnId: string) => void;\r\n onDeleteRow?: (cellData: TData, columnId: string) => void;\r\n cellClickEnabled?: (cellData: TData, columnId: string) => boolean;\r\n pagination?: boolean;\r\n controlledPageIndex?: number;\r\n onPageChange?: (pageIndex: number, pageSize: number) => void;\r\n pageSize?: number;\r\n paginationMode?: 'client' | 'server';\r\n totalRecords?: number;\r\n onSortChange?: (columnKey: string, direction: 'asc' | 'desc') => void;\r\n onFilterChange?: (filters: Record<string, string>) => void;\r\n onGlobalSearch?: (term: string) => void;\r\n globalSearch?: boolean;\r\n enableDelete?: boolean;\r\n enableRowSelection?: boolean;\r\n getRowSelection?: (selectedRows: { rows: TData[] }) => void;\r\n}\r\n\r\nexport function DataTable<TData, TValue>({\r\n columns,\r\n data,\r\n loading,\r\n pagination = false,\r\n controlledPageIndex,\r\n onPageChange,\r\n pageSize = 10,\r\n paginationMode = 'client',\r\n totalRecords = 0,\r\n onSortChange,\r\n onFilterChange,\r\n onGlobalSearch,\r\n globalSearch,\r\n onCellClick,\r\n onDeleteRow,\r\n rowActions,\r\n enableRowSelection = false,\r\n getRowSelection,\r\n}: DataTableProps<TData, TValue>) {\r\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\r\n const [columnVisibility, setColumnVisibility] = React.useState<Record<string, boolean>>({});\r\n const [manualSort, setManualSort] = React.useState<{ key: string; dir: 'asc' | 'desc' } | null>(null);\r\n const [searchTerm, setSearchTerm] = React.useState('');\r\n const tableData = Array.isArray(data) ? data : [];\r\n\r\n const finalCols = [...columns];\r\n\r\n if (enableRowSelection) {\r\n finalCols.unshift({\r\n id: '__select__',\r\n renderer: 'checkbox',\r\n size: 40,\r\n header: ({ table }) => (\r\n <input\r\n type=\"checkbox\"\r\n checked={table.getIsAllRowsSelected()}\r\n onChange={table.getToggleAllRowsSelectedHandler()}\r\n />\r\n ),\r\n meta: {\r\n cellClass: '',\r\n cellStyle: {},\r\n headerLabel: 'Select',\r\n },\r\n enableSorting: false,\r\n enableColumnFilter: false,\r\n });\r\n }\r\n\r\n const dynamicCols = useDynamicColumns({ columns: finalCols, enableRowSelection });\r\n const [rowSelection, setRowSelection] = React.useState({});\r\n\r\n const [localPageSize, setLocalPageSize] = React.useState(pageSize);\r\n\r\n const table = useReactTable({\r\n data: tableData,\r\n columns: dynamicCols,\r\n state: {\r\n columnFilters,\r\n columnVisibility,\r\n rowSelection,\r\n ...(paginationMode === 'server' ? {\r\n pagination: {\r\n pageIndex: controlledPageIndex ?? 0,\r\n pageSize: localPageSize,\r\n },\r\n } : {}),\r\n },\r\n enableRowSelection: !!enableRowSelection,\r\n onRowSelectionChange: (updater) => {\r\n setRowSelection((old) => {\r\n const newState = typeof updater === 'function' ? updater(old) : updater;\r\n\r\n const selectedData = Object.keys(newState)\r\n .filter((key) => newState[key])\r\n .map((rowId) => tableData[Number(rowId)]);\r\n\r\n getRowSelection?.({ rows: selectedData });\r\n\r\n return newState;\r\n });\r\n },\r\n onColumnFiltersChange: setColumnFilters,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getPaginationRowModel: pagination && paginationMode === 'client' ? getPaginationRowModel() : undefined,\r\n manualPagination: paginationMode === 'server',\r\n pageCount: paginationMode === 'server' ? Math.ceil(totalRecords / localPageSize) : undefined,\r\n ...(paginationMode === 'server'\r\n ? {\r\n onPaginationChange: (updater) => {\r\n const prev = table.getState().pagination;\r\n const next = typeof updater === 'function' ? updater(prev) : updater;\r\n onPageChange?.(next.pageIndex, next.pageSize);\r\n },\r\n }\r\n : {}),\r\n });\r\n\r\n const getPageNumbers = (currentPage: number, totalPages: number, maxVisiblePages = 5) => {\r\n if (totalPages <= maxVisiblePages) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const leftSiblingIndex = Math.max(currentPage - 1, 1);\r\n const rightSiblingIndex = Math.min(currentPage + 1, totalPages);\r\n\r\n const shouldShowLeftDots = leftSiblingIndex > 2;\r\n const shouldShowRightDots = rightSiblingIndex < totalPages - 1;\r\n\r\n if (!shouldShowLeftDots && shouldShowRightDots) {\r\n return [1, 2, 3, '...'];\r\n }\r\n if (shouldShowLeftDots && !shouldShowRightDots) {\r\n return [1, '...', totalPages - 2, totalPages - 1, totalPages];\r\n }\r\n if (shouldShowLeftDots && shouldShowRightDots) {\r\n return [1, '...', currentPage - 1, currentPage, currentPage + 1, '...'];\r\n }\r\n return [];\r\n };\r\n\r\n const pageCount = table.getPageCount() === 0 ? 1 : table.getPageCount();\r\n\r\n const handlePageSizeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const newSize = Number(e.target.value);\r\n const currentPageIndex = table.getState().pagination.pageIndex; // get current page index\r\n onPageChange?.(currentPageIndex, newSize);\r\n setLocalPageSize(newSize);\r\n };\r\n\r\n const pageSizeOptions = React.useMemo(() => {\r\n const options = [5, 10, 20, 50, 100].filter(size => size < totalRecords);\r\n if (options.length === 0) {\r\n options.push(5);\r\n }\r\n return options;\r\n }, [totalRecords]);\r\n\r\n return (\r\n <div className=\"overflow-hidden rounded-md w-full\">\r\n\r\n {!loading && (\r\n <div className={'flex justify-between p-2 bg-gray-50'}>\r\n <div className='flex items-center gap-4 w-full'>\r\n {!!totalRecords && (<p className='text-sm font-medium'>Total Records : {totalRecords.toLocaleString('en-IN') || 0}</p>)}\r\n {globalSearch && (\r\n <div className=\"flex items-center gap-2 w-full max-w-sm\">\r\n <div className=\"relative w-full\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search...\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && onGlobalSearch) {\r\n onGlobalSearch(searchTerm.trim());\r\n }\r\n }}\r\n className=\"border border-gray-300 rounded-md text-sm px-3 py-2 pl-8 w-full focus:outline-none focus:ring-1 focus:ring-[#12715B]\"\r\n />\r\n <Search className=\"absolute left-2 top-2.5 text-gray-400\" size={16} />\r\n </div>\r\n <Button\r\n size=\"sm\"\r\n className=\"bg-[#12715B] text-white text-xs h-auto py-2 px-3\"\r\n onClick={() => onGlobalSearch?.(searchTerm.trim())}\r\n >\r\n Search\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Manage Columns Button */}\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"px-3 py-1 text-xs cursor-pointer border-gray-300\"\r\n >\r\n Manage Columns\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className=\"w-48 p-3 space-y-2\">\r\n <div className=\"text-sm font-medium mb-2\">Show / Hide Columns</div>\r\n\r\n <label className=\"flex items-center gap-2 text-sm font-semibold border-b pb-2 mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n checked={table.getAllLeafColumns().every((col) => col.getIsVisible())}\r\n ref={(input) => {\r\n if (input) {\r\n input.indeterminate =\r\n table.getAllLeafColumns().some((col) => col.getIsVisible()) &&\r\n !table.getAllLeafColumns().every((col) => col.getIsVisible());\r\n }\r\n }}\r\n onChange={(e) => {\r\n table.getAllLeafColumns().forEach((col) =>\r\n col.toggleVisibility(e.target.checked)\r\n );\r\n }}\r\n />\r\n Toggle All\r\n </label>\r\n\r\n {table.getAllLeafColumns().map((column) => {\r\n const header = column.columnDef.header;\r\n return (\r\n <label key={column.id} className=\"flex items-center gap-2 text-sm\">\r\n <input\r\n type=\"checkbox\"\r\n checked={column.getIsVisible()}\r\n onChange={(e) => column.toggleVisibility(e.target.checked)}\r\n />\r\n {typeof header === 'function'\r\n ? header({ column, header: header as any, table })\r\n : typeof header === 'string'\r\n ? header\r\n : column.id\r\n }\r\n </label>\r\n );\r\n })}\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n )}\r\n\r\n {/* Table */}\r\n <Table className=\"table-fixed\">\r\n <TableHeader>\r\n {table.getHeaderGroups().map((hg) => (\r\n <TableRow key={`header-group-${hg.id}`}>\r\n {hg.headers.map((header, index) => {\r\n const canSort = header.column.getCanSort();\r\n const canFilter = header.column.getCanFilter();\r\n const sortDir = manualSort?.key === header.column.id ? manualSort.dir : null;\r\n\r\n return (\r\n <TableHead\r\n key={`header-${header.id}-${index}`}\r\n className=\"relative select-none\"\r\n style={{\r\n width: header.column.getSize(),\r\n minWidth: header.column.columnDef.minSize,\r\n maxWidth: header.column.columnDef.maxSize,\r\n }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <span\r\n className={`flex items-center gap-1 ${canSort ? 'cursor-pointer' : ''}`}\r\n onClick={() => {\r\n if (!canSort) return;\r\n const newDir =\r\n manualSort?.key === header.column.id && manualSort.dir === 'asc'\r\n ? 'desc'\r\n : 'asc';\r\n setManualSort({ key: header.column.id, dir: newDir });\r\n onSortChange?.(header.column.id, newDir);\r\n }}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {canSort && (\r\n <>\r\n {sortDir === 'asc' && <ArrowUp size={14} className=\"text-gray-500\" />}\r\n {sortDir === 'desc' && <ArrowDown size={14} className=\"text-gray-500\" />}\r\n {!sortDir && <ArrowUpDown size={14} className=\"text-gray-400\" />}\r\n </>\r\n )}\r\n </span>\r\n\r\n {canFilter && (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <span\r\n role=\"presentation\"\r\n className=\"pl-5 cursor-pointer\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <FontAwesomeIcon icon={faEllipsisH} className=\"w-5 h-5 text-gray-500\" />\r\n </span>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n align=\"center\"\r\n sideOffset={14}\r\n className=\"w-50 p-3 z-[200] border-gray-300\"\r\n avoidCollisions={true}\r\n >\r\n <form\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n const formData = new FormData(e.currentTarget);\r\n const value = (formData.get('filter') as string) || '';\r\n if (onFilterChange && value) {\r\n onFilterChange({ columnKey: header.column.id, columnTerm: value });\r\n }\r\n }}\r\n className=\"space-y-2\"\r\n >\r\n <label htmlFor=\"filter\" className=\"text-xs text-gray-500 font-normal\">\r\n Filter by value:\r\n </label>\r\n <input\r\n name=\"filter\"\r\n placeholder=\"Search\"\r\n defaultValue={(header.column.getFilterValue() ?? '') as string}\r\n className=\"border-gray-300 border-1 block p-3 rounded-md text-xs w-full h-9 focus:ring-0 focus:border-gray-300 focus-visible:ring-0 focus-visible:border-gray-300 focus-visible:outline-none mt-2 font-normal\"\r\n autoComplete=\"off\"\r\n />\r\n <div className=\"justify-end flex\">\r\n <Button\r\n type=\"submit\"\r\n className=\"py-2 px-3 bg-[#12715B] text-white text-xs h-auto cursor-pointer\"\r\n >\r\n Apply\r\n </Button>\r\n </div>\r\n </form>\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n </div>\r\n </TableHead>\r\n );\r\n })}\r\n </TableRow>\r\n ))}\r\n </TableHeader>\r\n\r\n <TableBody>\r\n {loading ? (\r\n <>\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <TableRow key={i}>\r\n {dynamicCols.map((_, j) => (\r\n <TableCell key={j} className=\"p-3\">\r\n <span className=\"h-4 bg-gray-200 rounded w-3/4 block animate-pulse\"></span>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </>\r\n ) : table.getRowModel().rows.length ? (\r\n table.getRowModel().rows.map((row) => (\r\n <TableRow key={row.id}>\r\n {row.getVisibleCells().map((cell, cellIndex, arr) => {\r\n const meta = cell.column.columnDef.meta as any || {};\r\n const isClickable = meta?.isClickable;\r\n const isLastCell = cellIndex === arr.length - 1;\r\n\r\n return (\r\n <TableCell\r\n key={`cell-${cell.id}-${cellIndex}`}\r\n className={`break-words whitespace-normal align-top ${meta?.cellClass ?? ''} ${isClickable ? 'cursor-pointer hover:bg-gray-100 underline text-blue-500' : ''} relative py-2`}\r\n style={{\r\n width: cell.column.getSize(),\r\n minWidth: cell.column.columnDef.minSize,\r\n maxWidth: cell.column.columnDef.maxSize,\r\n ...(meta?.cellStyle ?? {}),\r\n }}\r\n onClick={() => {\r\n if (isClickable && onCellClick) {\r\n onCellClick(cell.row.original, cell.column.id);\r\n }\r\n }}\r\n >\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n\r\n {isLastCell && rowActions && rowActions.length > 0 && (\r\n <div className=\"absolute bg-[#fff] p-1 px-4 inset-y-0 right-0 flex items-center opacity-0 group-hover:opacity-100 transition-opacity duration-200 shadow-lg rounded\">\r\n {rowActions.map((action) => {\r\n const isDelete = action.id === 'delete' || action.icon === 'delete';\r\n return (\r\n <button\r\n key={action.id}\r\n className={`ml-2 px-2 py-1 text-[12px] rounded cursor-pointer ${isDelete ? 'bg-red-800 text-white hover:bg-neutral-600' : 'bg-gray-300 hover:bg-gray-400'}`}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n if (isDelete) {\r\n onDeleteRow?.(cell.row.original, 'delete');\r\n } else {\r\n onCellClick?.(cell.row.original, cell.column.id);\r\n }\r\n }}\r\n title={action.header}\r\n >\r\n {action.header}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n\r\n </TableRow>\r\n ))\r\n ) : (\r\n <TableRow>\r\n <TableCell colSpan={dynamicCols.length} className=\"h-24 text-center\">\r\n <span className=\"flex items-center justify-center py-10 w-full min-w-full text-gray-600 bg-gray-100\">\r\n No results.\r\n </span>\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n\r\n {/* Pagination */}\r\n {pagination && (\r\n <div className=\"flex items-center justify-between py-3 text-sm w-full\">\r\n {!loading && (\r\n <div className='flex gap-2 items-center'>\r\n <select\r\n value={localPageSize}\r\n onChange={handlePageSizeChange}\r\n className=\"ml-2 border rounded py-1 text-sm cursor-pointer border-blue-600\"\r\n >\r\n {pageSizeOptions.map((size) => (\r\n <option key={size} value={size}>\r\n {size} / page\r\n </option>\r\n ))}\r\n </select>\r\n <div>\r\n Page {table.getState().pagination.pageIndex + 1} of {pageCount}\r\n </div>\r\n </div>\r\n )}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => table.previousPage()}\r\n disabled={!table.getCanPreviousPage?.()}\r\n className=\"px-2 py-1 border rounded disabled:opacity-50 cursor-pointer\"\r\n >\r\n Prev\r\n </button>\r\n {getPageNumbers(\r\n table.getState().pagination.pageIndex + 1,\r\n table.getPageCount(),\r\n 5\r\n ).map((pageNum, index) => (\r\n <button\r\n key={index}\r\n disabled={pageNum === '...'}\r\n onClick={() => typeof pageNum === 'number' && table.setPageIndex(pageNum - 1)}\r\n className={`px-2 py-1 border rounded ${table.getState().pagination.pageIndex + 1 === pageNum\r\n ? 'bg-[#12715B] text-white'\r\n : 'bg-white'} ${pageNum === '...' ? 'cursor-default' : 'cursor-pointer'}`}\r\n >\r\n {pageNum}\r\n </button>\r\n ))}\r\n <button\r\n onClick={() => table.nextPage()}\r\n disabled={!table.getCanNextPage?.()}\r\n className=\"px-2 py-1 border rounded disabled:opacity-50 cursor-pointer\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n","\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\r\n return (\r\n <div\r\n data-slot=\"table-container\"\r\n className=\"relative w-full overflow-x-auto rounded-md border border-gray-200 bg-white\"\r\n >\r\n <table\r\n data-slot=\"table\"\r\n className={cn('w-full text-sm', className)}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\r\n return (\r\n <thead\r\n data-slot=\"table-header\"\r\n className={cn(\r\n 'bg-gray-100 text-gray-700 [&>tr]:border-b [&>tr]:border-gray-200 [&>tr>th]:border-r [&>tr>th]:border-gray-200 [&>tr>th]:last:border-r-0',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\r\n return (\r\n <tbody\r\n data-slot=\"table-body\"\r\n className={cn(\r\n '[&>tr]:border-b [&>tr]:border-gray-200 [&>tr:last-child]:border-0 [&>tr>td]:border-r [&>tr>td]:border-gray-200 [&>tr>td]:last:border-r-0',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\r\n return (\r\n <tfoot\r\n data-slot=\"table-footer\"\r\n className={cn(\r\n 'bg-gray-50 border-t border-gray-200 font-medium [&>tr]:last:border-b-0',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\r\n return (\r\n <tr\r\n data-slot=\"table-row\"\r\n className={cn(\r\n 'border-b border-gray-200 hover:bg-gray-50 transition-colors',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\r\n return (\r\n <th\r\n data-slot=\"table-head\"\r\n className={cn(\r\n 'h-12 px-6 text-left align-middle font-semibold whitespace-nowrap',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\r\n return (\r\n <td\r\n data-slot=\"table-cell\"\r\n className={cn(\r\n 'px-6 py-4 align-middle text-gray-700',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<'caption'>) {\r\n return (\r\n <caption\r\n data-slot=\"table-caption\"\r\n className={cn('mt-4 text-sm text-gray-500', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Table,\r\n TableHeader,\r\n TableBody,\r\n TableFooter,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n TableCaption,\r\n};\r\n","import { createColumnHelper } from '@tanstack/react-table';\r\n\r\nimport { cellRendererFactory, sanitizeValue } from './cellRendererFactory';\r\n\r\nconst columnHelper = createColumnHelper<any>();\r\n\r\n// Utility: safely access nested properties\r\nfunction getValueByPath(obj: any, path: string) {\r\n return path.split('.').reduce((acc, key) => acc?.[key], obj);\r\n}\r\n\r\nexport const useDynamicColumns = (\r\n config: any,\r\n customRenderers = {},\r\n customFormatters = {}\r\n) => {\r\n return config.columns.map((col: any) => {\r\n const accessorKey = col.accessorKey ?? col.id;\r\n\r\n // Create accessorFn to handle both nested and literal-dot cases\r\n const accessorFn = (row: any) => {\r\n if (!row) return null;\r\n \r\n // Case 1: literal key exists directly\r\n if (Object.prototype.hasOwnProperty.call(row, accessorKey)) {\r\n return sanitizeValue(row[accessorKey]);\r\n }\r\n // Case 2: nested key using dot notation\r\n if (accessorKey.includes('.')) {\r\n const val = getValueByPath(row, accessorKey);\r\n return sanitizeValue(val);\r\n }\r\n // Case 3: fallback\r\n return sanitizeValue(row[accessorKey]);\r\n };\r\n\r\n // Preserve existing meta and merge with new properties\r\n const existingMeta = col.meta || {};\r\n\r\n const additional = {};\r\n if (col.size && col.size > 0) {\r\n Object.assign(additional, { size: col.size });\r\n } else {\r\n Object.assign(additional, { size: 180, minSize: 0, maxSize: Number.MAX_SAFE_INTEGER });\r\n Object.assign(existingMeta, { className: 'w-full' });\r\n }\r\n\r\n return columnHelper.accessor(accessorFn, {\r\n ...col,\r\n ...additional,\r\n // size: (col.size && col.size > 0) ? col.size : 180,\r\n id: col.id ?? accessorKey,\r\n header: col.header,\r\n cell: (info) => {\r\n const value = info.getValue();\r\n const row = info.row.original;\r\n return cellRendererFactory(\r\n col.renderer,\r\n col.rendererProps,\r\n value,\r\n row,\r\n customRenderers,\r\n col.format,\r\n customFormatters,\r\n info\r\n );\r\n },\r\n enableSorting: col.enableSorting,\r\n enableColumnFilter: col.enableColumnFilter,\r\n // Merge existing meta to preserve headerLabel and other properties\r\n meta: {\r\n ...existingMeta,\r\n // Preserve headerLabel if it exists\r\n ...(existingMeta.headerLabel ? { headerLabel: existingMeta.headerLabel } : {}),\r\n },\r\n });\r\n });\r\n};\r\n","'use client';\r\n\r\nimport React from 'react';\r\n\r\nimport * as LucideIcons from 'lucide-react';\r\nimport { Star, LucideIcon } from 'lucide-react';\r\nimport Image from 'next/image';\r\n\r\nimport { valueFormatter } from './valueFormatter';\r\nimport { Icon } from '@/components';\r\n\r\nconst getContrastColor = (bg: string) => {\r\n // Normalize hex\r\n let c = bg.trim().toUpperCase();\r\n if (/^#([a-fA-F0-9]{3})$/.test(c)) {\r\n c = '#' + c.slice(1).split('').map(x => x + x).join('');\r\n }\r\n // Basic named color map (extend as needed)\r\n const named: Record<string, string> = {\r\n white: '#FFFFFF',\r\n black: '#000000',\r\n red: '#FF0000',\r\n green: '#008000',\r\n blue: '#0000FF',\r\n gray: '#808080',\r\n grey: '#808080',\r\n orange: '#FFA500',\r\n yellow: '#FFFF00',\r\n purple: '#800080',\r\n pink: '#FFC0CB',\r\n teal: '#008080'\r\n };\r\n if (!c.startsWith('#')) {\r\n const lower = c.toLowerCase();\r\n if (named[lower]) c = named[lower];\r\n else return '#FFFFFF'; // fallback\r\n }\r\n if (!/^#([a-fA-F0-9]{6})$/.test(c)) return '#FFFFFF';\r\n const r = parseInt(c.slice(1, 3), 16);\r\n const g = parseInt(c.slice(3, 5), 16);\r\n const b = parseInt(c.slice(5, 7), 16);\r\n // Per ITU-R BT.601 luma approximation\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n return brightness > 160 ? '#000000' : '#FFFFFF';\r\n};\r\n\r\n// Recursively sanitize any content before rendering\r\nexport const sanitizeValue = (val: any): any => {\r\n if (val == null) return null;\r\n\r\n // ✅ React elements are fine\r\n if (React.isValidElement(val)) return val;\r\n\r\n // ✅ Strings and numbers are safe\r\n if (typeof val === 'string' || typeof val === 'number') return val;\r\n\r\n // ✅ Arrays → map and sanitize each item\r\n if (Array.isArray(val)) return val.map((v, i) => <React.Fragment key={i}>{sanitizeValue(v)}</React.Fragment>);\r\n\r\n // ✅ Plain objects → show name, label, or JSON\r\n if (typeof val === 'object') {\r\n if ('name' in val && typeof val.name === 'string') return val.name;\r\n if ('label' in val && typeof val.label === 'string') return val.label;\r\n try {\r\n return JSON.stringify(val);\r\n } catch {\r\n return '[object]';\r\n }\r\n }\r\n\r\n // Fallback for other types\r\n return String(val);\r\n};\r\n\r\nexport const cellRendererFactory = (\r\n renderer: string,\r\n rendererProps: any,\r\n value: any,\r\n row: any,\r\n customRenderers: Record<string, React.ComponentType<any>> = {},\r\n format?: string,\r\n customFormatters: Record<string, (val: any) => any> = {},\r\n info?: any\r\n) => {\r\n const formattedValue = valueFormatter(value, format, customFormatters);\r\n const rowValue = row?.[rendererProps?.rowField];\r\n\r\n switch (renderer) {\r\n /* -------------------- BASIC -------------------- */\r\n case 'text':\r\n return <span>{rowValue || formattedValue}</span>;\r\n\r\n case 'number':\r\n return (\r\n <span className=\"tabular-nums text-right\">\r\n {valueFormatter(rowValue || value, 'number:2')}\r\n </span>\r\n );\r\n\r\n case 'date':\r\n return <span>{valueFormatter(rowValue || value, format)}</span>;\r\n\r\n case 'link':\r\n return (\r\n <a\r\n href={`${rendererProps?.prefix || ''}${rowValue || formattedValue}`}\r\n target=\"_blank\"\r\n rel=\"noreferrer\"\r\n className={`text-blue-500 underline ${rendererProps?.className || ''}`}\r\n >\r\n {rendererProps?.label || formattedValue}\r\n </a>\r\n );\r\n\r\n /* -------------------- VISUAL -------------------- */\r\n case 'image':\r\n return (\r\n <div className=\"relative\">\r\n <Image\r\n src={\r\n rowValue ||\r\n formattedValue ||\r\n rendererProps?.fallback ||\r\n '/placeholder.png'\r\n }\r\n alt={rendererProps?.alt || ''}\r\n width={rendererProps?.width || 40}\r\n height={rendererProps?.height || 40}\r\n className={`object-cover ${rendererProps?.rounded ? 'rounded-full' : ''} ${rendererProps?.className || ''}`}\r\n style={{\r\n borderRadius: rendererProps?.rounded ? '50%' : 0,\r\n objectFit: 'cover'\r\n }}\r\n />\r\n </div>\r\n );\r\n\r\n case 'icon':\r\n if (!formattedValue) return null;\r\n\r\n return (\r\n <Icon\r\n iconSet={rendererProps?.iconSet}\r\n icon={rendererProps?.icon}\r\n prefix={rendererProps?.iconSetPrefix}\r\n iconSize={rendererProps?.size}\r\n className={rendererProps?.className}\r\n style={{\r\n ...(rendererProps?.color ? { color: rendererProps?.color } : {})\r\n }}\r\n />\r\n );\r\n\r\n case 'badge': {\r\n const color =\r\n rendererProps?.colorMap?.[formattedValue] ||\r\n rendererProps?.color ||\r\n 'gray';\r\n\r\n if (!formattedValue) return null;\r\n\r\n const textColor = getContrastColor(color);\r\n return (\r\n <span\r\n className={`inline-block px-2 py-1 text-xs rounded-full bg-${color}-100 text-${textColor}-700 ${rendererProps?.className || ''}`}\r\n style={{ backgroundColor: color, color: textColor }}\r\n >\r\n {formattedValue}\r\n </span>\r\n );\r\n }\r\n\r\n case 'chip': {\r\n const color = rendererProps?.color || 'gray';\r\n const maybeIcon = LucideIcons[rendererProps?.icon as keyof typeof LucideIcons];\r\n\r\n const IconComponent: LucideIcon =\r\n typeof maybeIcon === 'function' ? (maybeIcon as LucideIcon) : LucideIcons.Star;\r\n if (!formattedValue) return null;\r\n\r\n const textColor = getContrastColor(color);\r\n\r\n return (\r\n <span\r\n className={`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full bg-[${color}]-100 text-[${textColor}]-700`}\r\n style={{ backgroundColor: color, color: textColor }}\r\n >\r\n {rendererProps?.icon && (\r\n <>\r\n {IconComponent ? <IconComponent className=\"h-4 w-4\" /> : <LucideIcons.Box className=\"h-4 w-4\" />}\r\n </>\r\n )}\r\n {formattedValue}\r\n </span>\r\n );\r\n }\r\n\r\n /* -------------------- INTERACTIVE -------------------- */\r\n case 'button':\r\n return (\r\n <button\r\n onClick={() => rendererProps?.onClick?.(row, formattedValue)}\r\n className={`px-2 py-1 rounded text-white bg-blue-600 hover:bg-blue-700 ${rendererProps?.className || ''}`}\r\n >\r\n {rowValue || rendererProps.value || formattedValue}\r\n </button>\r\n );\r\n\r\n case 'switch':\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n checked={!!value}\r\n onChange={(e) =>\r\n rendererProps?.onChange?.(row, e.target.checked)\r\n }\r\n className=\"sr-only peer\"\r\n />\r\n <div className=\"relative w-9 h-5 bg-gray-300 peer-checked:bg-blue-600 rounded-full transition-all\">\r\n <div className=\"absolute top-[2px] left-[2px] w-4 h-4 bg-white rounded-full peer-checked:translate-x-4 transition-all\" />\r\n </div>\r\n </label>\r\n );\r\n\r\n case 'progress':\r\n return (\r\n <div className=\"w-full bg-gray-100 rounded-full h-2\">\r\n <div\r\n className=\"bg-blue-600 h-2 rounded-full transition-all\"\r\n style={{ width: `${rowValue || formattedValue || 0}%` }}\r\n />\r\n </div>\r\n );\r\n\r\n case 'rating': {\r\n const stars = Math.round(Number(rowValue || formattedValue) || 0);\r\n return (\r\n <div className=\"flex items-center\">\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <Star\r\n key={i}\r\n size={16}\r\n className={i < stars ? 'text-yellow-400' : 'text-gray-300'}\r\n fill={i < stars ? '#facc15' : 'none'}\r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n case 'checkbox':\r\n return (\r\n <input\r\n type=\"checkbox\"\r\n checked={info.row.getIsSelected()}\r\n disabled={!info.row.getCanSelect()}\r\n onChange={info.row.getToggleSelectedHandler()}\r\n />\r\n );\r\n\r\n case 'html':\r\n return (\r\n <span\r\n dangerouslySetInnerHTML={{ __html: String(rowValue || formattedValue) }}\r\n />\r\n );\r\n\r\n /* -------------------- ADVANCED -------------------- */\r\n case 'custom': {\r\n const CustomRenderer =\r\n customRenderers[rendererProps?.customRendererId] ||\r\n customRenderers[rendererProps?.rendererId];\r\n if (CustomRenderer)\r\n return (\r\n <CustomRenderer\r\n value={formattedValue}\r\n row={row}\r\n {...rendererProps}\r\n />\r\n );\r\n return <span>Missing custom renderer</span>;\r\n }\r\n\r\n /* -------------------- DEFAULT -------------------- */\r\n default:\r\n return <span>{formattedValue || '-'}</span>;\r\n }\r\n};\r\n","import dayjs from 'dayjs';\r\nimport utc from 'dayjs/plugin/utc';\r\n\r\ndayjs.extend(utc);\r\n\r\nexport default dayjs;\r\n","import dayjs from '../dayjs-setup';\r\n\r\nexport const valueFormatter = (\r\n value: any,\r\n format?: string,\r\n customFormatters: Record<string, (val: any) => any> = {}\r\n) => {\r\n if (!format) return value;\r\n if (value == null || value === '' || value === undefined) return '-';\r\n\r\n // Custom user-defined formatter\r\n if (format.startsWith('custom:')) {\r\n const key = format.replace('custom:', '');\r\n return customFormatters[key] ? customFormatters[key](value) : value;\r\n }\r\n\r\n // Handle built-in formatters\r\n const [type, arg] = format.split(':');\r\n\r\n switch (type) {\r\n case 'date':\r\n return dayjs(value).format(arg || 'YYYY-MM-DD');\r\n case 'datetimenumber':\r\n const parsed = dayjs(value).isValid() ? dayjs(value).utc() : dayjs(value);\r\n return parsed.format('YYYY-MM-DD hh:mm');\r\n case 'datetime':\r\n const formated = dayjs(value).isValid() ? dayjs(value).utc() : dayjs(value);\r\n return formated.format('DD MMM YYYY hh:mm A');\r\n case 'days':\r\n return `${dayjs().diff(dayjs(value), 'day')} days`;\r\n case 'months':\r\n return `${dayjs().diff(dayjs(value), 'month')} months`;\r\n case 'years':\r\n return `${dayjs().diff(dayjs(value), 'year')} years`;\r\n case 'time':\r\n return dayjs(value).format('HH:mm');\r\n case 'number':\r\n return Number(value).toFixed(parseInt(arg || '2'));\r\n case 'currency':\r\n return new Intl.NumberFormat('en-IN', {\r\n style: 'currency',\r\n currency: arg || 'INR'\r\n }).format(Number(value));\r\n case 'uppercase':\r\n return String(value).toUpperCase();\r\n case 'lowercase':\r\n return String(value).toLowerCase();\r\n default:\r\n return value;\r\n }\r\n};","'use client';\r\nimport { DataTable } from '@/components/ui/data-table';\r\nimport { ExtendedTableProps } from '@/types/table';\r\n\r\nconst Table = ({\r\n columns,\r\n data,\r\n rowActions,\r\n className,\r\n style,\r\n pagination = false,\r\n paginationMode = 'client',\r\n itemsPerPage = 10,\r\n onPageChange,\r\n onSortChange,\r\n onFilterChange,\r\n onGlobalSearch,\r\n page,\r\n loading = false,\r\n totalRecords = 0,\r\n globalSearch = false,\r\n onCellClick,\r\n onDeleteRow,\r\n ...props\r\n}: ExtendedTableProps) => {\r\n const rawColumns = Array.isArray(columns) ? columns : [];\r\n const rawData = Array.isArray(data) ? data : [];\r\n\r\n const isControlled = typeof page === 'number';\r\n\r\n return (\r\n <div className={`${className || ''} space-y-3`} style={style}>\r\n <DataTable\r\n {...props}\r\n columns={rawColumns}\r\n data={rawData}\r\n rowActions={rowActions}\r\n loading={loading}\r\n pagination={pagination}\r\n pageSize={itemsPerPage}\r\n controlledPageIndex={isControlled ? page! - 1 : undefined}\r\n onPageChange={(pageIndex, pageSize) => {\r\n onPageChange?.({ page: pageIndex + 1, itemsPerPage: pageSize });\r\n }}\r\n paginationMode={paginationMode}\r\n totalRecords={totalRecords}\r\n onSortChange={(col, dir) => onSortChange?.({ sort_by: col, sort_order: dir })}\r\n onFilterChange={(filters) => onFilterChange?.({ columnKey: filters.columnKey, columnTerm: filters.columnTerm })}\r\n onGlobalSearch={(term) => onGlobalSearch?.({ searchTerm: term })}\r\n globalSearch={globalSearch}\r\n onCellClick={(cell, columnId) => {\r\n onCellClick?.({ id: cell.id, column: cell, columnId });\r\n }}\r\n onDeleteRow={(cell) => {\r\n onDeleteRow?.(cell.id);\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/components/ui/button\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeftIcon />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","import {\r\n Pagination,\r\n PaginationContent,\r\n PaginationEllipsis,\r\n PaginationItem,\r\n PaginationLink,\r\n PaginationNext,\r\n PaginationPrevious,\r\n} from \"@/components/ui/pagination\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from \"@/components/ui/select\";\r\nimport { CustomPaginationProps } from \"@/types/table\";\r\n\r\nconst CustomPagination = ({\r\n totalPages,\r\n currentPage,\r\n onPageChange,\r\n maxVisiblePages = 5,\r\n perPage,\r\n}: CustomPaginationProps) => {\r\n\r\n const getPageNumbers = () => {\r\n const pages: (number | string)[] = [];\r\n\r\n if (totalPages <= maxVisiblePages) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const leftSiblingIndex = Math.max(currentPage - 1, 1);\r\n const rightSiblingIndex = Math.min(currentPage + 1, totalPages);\r\n\r\n const shouldShowLeftDots = leftSiblingIndex > 2;\r\n const shouldShowRightDots = rightSiblingIndex < totalPages - 1;\r\n\r\n if (!shouldShowLeftDots && shouldShowRightDots) {\r\n const leftRange = Array.from({ length: 3 }, (_, i) => i + 1);\r\n return [...leftRange, \"...\", totalPages];\r\n }\r\n\r\n if (shouldShowLeftDots && !shouldShowRightDots) {\r\n const rightRange = Array.from(\r\n { length: 3 },\r\n (_, i) => totalPages - 2 + i\r\n );\r\n return [1, \"...\", ...rightRange];\r\n }\r\n\r\n if (shouldShowLeftDots && shouldShowRightDots) {\r\n const middleRange = Array.from(\r\n { length: 3 },\r\n (_, i) => leftSiblingIndex + i\r\n );\r\n return [1, \"...\", ...middleRange, \"...\", totalPages];\r\n }\r\n\r\n return pages;\r\n };\r\n\r\n const handlePageChange = (page: number) => {\r\n if (page >= 1 && page <= totalPages && page !== currentPage) {\r\n onPageChange({\r\n page,\r\n itemsPerPage: perPage\r\n });\r\n }\r\n };\r\n\r\n const pageNumbers = getPageNumbers();\r\n\r\n return (\r\n <div className=\"flex flex-row gap-1 w-full items-center justify-between\">\r\n {/* Items per page dropdown */}\r\n <div className=\"flex items-center gap-2\">\r\n <p className=\"text-sm text-muted-foreground whitespace-nowrap\">Items per page:</p>\r\n <Select\r\n defaultValue={String(perPage)}\r\n onValueChange={(value) => {\r\n onPageChange({ page: 1, itemsPerPage: Number(value) });\r\n }}\r\n >\r\n <SelectTrigger className=\"w-[100px]\">\r\n <SelectValue placeholder=\"Select\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"5\">5</SelectItem>\r\n <SelectItem value=\"10\">10</SelectItem>\r\n <SelectItem value=\"20\">20</SelectItem>\r\n <SelectItem value=\"50\">50</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n <Pagination className=\"justify-end\">\r\n <PaginationContent>\r\n <PaginationItem>\r\n <PaginationPrevious\r\n onClick={() => handlePageChange(currentPage - 1)}\r\n className={currentPage === 1 ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"}\r\n />\r\n </PaginationItem>\r\n\r\n {pageNumbers.map((pageNumber, index) => (\r\n <PaginationItem key={index}>\r\n {pageNumber === \"...\" ? (\r\n <PaginationEllipsis />\r\n ) : (\r\n <PaginationLink\r\n onClick={() => handlePageChange(pageNumber as number)}\r\n isActive={currentPage === pageNumber}\r\n className=\"cursor-pointer\"\r\n >\r\n {pageNumber}\r\n </PaginationLink>\r\n )}\r\n </PaginationItem>\r\n ))}\r\n\r\n <PaginationItem>\r\n <PaginationNext\r\n onClick={() => handlePageChange(currentPage + 1)}\r\n className={currentPage === totalPages ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"}\r\n />\r\n </PaginationItem>\r\n </PaginationContent>\r\n </Pagination>\r\n </div>\r\n );\r\n};\r\n\r\nexport default CustomPagination;","'use client';\r\n\r\nimport { useMemo } from 'react';\r\n\r\nimport { LoaderCircle, Info } from 'lucide-react';\r\n\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionTrigger,\r\n AccordionContent,\r\n} from '@/components/ui/accordion';\r\nimport {\r\n Card,\r\n CardHeader,\r\n CardTitle,\r\n CardContent,\r\n} from '@/components/ui/card';\r\nimport { cn } from '@/lib/utils';\r\nimport { HistoryTimelineProps } from '@/types/global';\r\n\r\ntype AnyRecord = Record<string, any>;\r\n\r\nfunction getValue<T extends AnyRecord, K extends keyof T>(\r\n item: T,\r\n key?: K,\r\n): T[K] | undefined {\r\n if (!key) return undefined;\r\n return item[key];\r\n}\r\n\r\nconst HistoryTimeline = ({\r\n title = 'Timeline',\r\n className,\r\n loading = false,\r\n titleKey,\r\n descriptionKey,\r\n createdAtKey,\r\n ...props\r\n}: HistoryTimelineProps) => {\r\n\r\n const data: AnyRecord[] = useMemo(() => {\r\n if (Array.isArray(props.data)) {\r\n return props.data as AnyRecord[];\r\n }\r\n return [];\r\n }, [props.data]);\r\n\r\n if (loading) {\r\n return (\r\n <Card className={cn('w-full', className)}>\r\n <CardContent className=\"flex items-center justify-center px-4 py-8\">\r\n <LoaderCircle className=\"h-5 w-5 animate-spin text-muted-foreground\" />\r\n <span className=\"ml-2 text-sm text-muted-foreground\">\r\n Loading history…\r\n </span>\r\n </CardContent>\r\n </Card>\r\n );\r\n }\r\n\r\n if (data.length === 0) {\r\n return (\r\n <Card className={cn('w-full', className)}>\r\n <CardContent className=\"px-4 py-8 text-center text-muted-foreground\">\r\n No history available.\r\n </CardContent>\r\n </Card>\r\n );\r\n }\r\n\r\n return (\r\n <Card className={cn('w-full', className)}>\r\n <Accordion type=\"single\" collapsible defaultValue=\"history\">\r\n <AccordionItem value=\"history\" className=\"border-0\">\r\n <CardHeader className=\"flex flex-row items-center justify-between gap-2 border-b px-4 py-3\">\r\n <AccordionTrigger\r\n className={cn(\r\n 'flex flex-1 items-center justify-between gap-2 p-0 text-left',\r\n 'hover:no-underline'\r\n )}\r\n >\r\n <CardTitle className=\"text-base font-semibold\">\r\n {title}\r\n </CardTitle>\r\n </AccordionTrigger>\r\n </CardHeader>\r\n\r\n <AccordionContent asChild>\r\n <CardContent className=\"px-4 py-3\">\r\n <ol className=\"relative ml-4 border-l-2 border-[#939393] space-y-4\">\r\n {data.map((item, index) => {\r\n\r\n const id = (item as any).id ?? index;\r\n const rawTitle = getValue(item, titleKey);\r\n const rawDescription = getValue(item, descriptionKey);\r\n const rawCreatedAt = getValue(item, createdAtKey);\r\n\r\n const titleText = String(rawTitle ?? '');\r\n const descriptionText =\r\n rawDescription != null ? String(rawDescription) : '';\r\n const createdAtDate =\r\n rawCreatedAt != null ? new Date(rawCreatedAt as any) : null;\r\n\r\n return (\r\n <li key={id} className=\"relative pl-4\">\r\n <span className=\"absolute left-[-9px] top-2 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-primary-foreground\">\r\n <div className='bg-[#06A59A] text-white rounded-md p-[5px]'>\r\n <Info\r\n className={cn(\r\n 'h-5 w-5 text-white',\r\n )}\r\n />\r\n </div>\r\n </span>\r\n\r\n <Accordion\r\n type=\"single\"\r\n collapsible\r\n className=\"w-full\"\r\n >\r\n <AccordionItem value={`item-${item.id}`} className=\"border-0\">\r\n <AccordionTrigger\r\n className={cn(\r\n 'flex items-center justify-between gap-2 rounded-md px-2 py-1 text-left',\r\n 'hover:bg-muted/60 hover:no-underline'\r\n )}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <span className=\"text-sm font-medium leading-none\">\r\n {titleText}\r\n </span>\r\n <span className=\"text-[11px] text-muted-foreground\">\r\n {new Intl.DateTimeFormat('default', {\r\n dateStyle: 'medium',\r\n timeStyle: 'short',\r\n }).format(createdAtDate ?? new Date())}\r\n </span>\r\n </div>\r\n </AccordionTrigger>\r\n\r\n <AccordionContent className=\"pt-1\">\r\n {descriptionText && (\r\n <p className=\"rounded-md bg-muted px-2 py-2 text-xs text-muted-foreground\">\r\n {descriptionText}\r\n </p>\r\n )}\r\n </AccordionContent>\r\n </AccordionItem>\r\n </Accordion>\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n </CardContent>\r\n </AccordionContent>\r\n </AccordionItem>\r\n </Accordion>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default HistoryTimeline;\r\n","'use client';\r\n\r\nimport * as React from 'react';\r\n\r\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\r\nimport { ChevronDownIcon } from 'lucide-react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Accordion({\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\r\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\r\n}\r\n\r\nfunction AccordionItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\r\n return (\r\n <AccordionPrimitive.Item\r\n data-slot=\"accordion-item\"\r\n className={cn('border-b last:border-b-0', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AccordionTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\r\n return (\r\n <AccordionPrimitive.Header className=\"flex\">\r\n <AccordionPrimitive.Trigger\r\n data-slot=\"accordion-trigger\"\r\n className={cn(\r\n 'focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\r\n </AccordionPrimitive.Trigger>\r\n </AccordionPrimitive.Header>\r\n );\r\n}\r\n\r\nfunction AccordionContent({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\r\n return (\r\n <AccordionPrimitive.Content\r\n data-slot=\"accordion-content\"\r\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\r\n {...props}\r\n >\r\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\r\n </AccordionPrimitive.Content>\r\n );\r\n}\r\n\r\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\r\n","import * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Card({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card\"\r\n className={cn(\r\n 'bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-header\"\r\n className={cn(\r\n '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-title\"\r\n className={cn('leading-none font-semibold', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-description\"\r\n className={cn('text-muted-foreground text-sm', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-action\"\r\n className={cn(\r\n 'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-content\"\r\n className={cn('px-6', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-footer\"\r\n className={cn('flex items-center px-6 [.border-t]:pt-6', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Card,\r\n CardHeader,\r\n CardFooter,\r\n CardTitle,\r\n CardAction,\r\n CardDescription,\r\n CardContent,\r\n};\r\n","import { useCallback, useMemo, useState } from 'react';\r\n\r\nimport { ChevronDown, Menu } from 'lucide-react';\r\nimport Link from 'next/link';\r\nimport { usePathname, useRouter } from 'next/navigation';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from '@/components/ui/dialog';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n DropdownMenuSub,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuSubContent,\r\n} from '@/components/ui/dropdown-menu';\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { cn } from '@/lib/utils';\r\nimport { TabsProps } from '@/types/global';\r\n\r\nconst Tabs = ({ className, style, tabs, verticalMenu, pathname, canvasMode, isBuilder = false, source, parentKey, menuNameKey, menuUrlKey, loading, bgActiveColor, textActiveColor }: TabsProps) => {\r\n const [openIndex, setOpenIndex] = useState<number | null>(null);\r\n const currentPathname = usePathname();\r\n\r\n function groupMenus(menus: any[] = []): any[] {\r\n const menuMap = new Map<string, any>();\r\n\r\n // Create a map for all menus\r\n menus.forEach(menu => {\r\n menuMap.set(menu.menu_id, {\r\n ...menu,\r\n url: menu[menuUrlKey || 'url'],\r\n header: menu[menuNameKey || 'name'],\r\n isDropDown: false,\r\n children: []\r\n });\r\n });\r\n\r\n const rootMenus: any[] = [];\r\n\r\n // Link children to parents\r\n menus.forEach(menu => {\r\n if (menu[parentKey || 'parentId']) {\r\n const parent = menuMap.get(menu[parentKey || 'parentId']);\r\n if (parent) {\r\n parent.children!.push(menuMap.get(menu.menu_id)!);\r\n }\r\n } else {\r\n rootMenus.push(menuMap.get(menu.menu_id)!);\r\n }\r\n });\r\n\r\n // Recursive sort\r\n const sortMenus = (list: any[]): any[] =>\r\n list\r\n .sort((a, b) => (a.sort_order || 0) - (b.sort_order || 0))\r\n .map(menu => {\r\n const sortedChildren = sortMenus(menu.children || []);\r\n return {\r\n ...menu,\r\n children: sortedChildren,\r\n isDropDown: sortedChildren.length > 0,\r\n };\r\n });\r\n\r\n return sortMenus(rootMenus);\r\n }\r\n\r\n const rawTabs = useMemo(() => {\r\n if (!Array.isArray(tabs)) return [];\r\n if (source === 'manual') return Array.isArray(tabs) ? tabs : [];\r\n return groupMenus(tabs);\r\n }, [tabs, source, parentKey, menuNameKey, menuUrlKey]);\r\n\r\n const baseClasses =\r\n 'text-foreground p-2 text-center rounded-md transition-colors';\r\n const bgActiveColorFinal = bgActiveColor ? `bg-[${bgActiveColor}]` : 'bg-white/10';\r\n const textActiveColorFinal = textActiveColor ? `text-[${textActiveColor}]` : 'text-white';\r\n const activeClasses = `${bgActiveColorFinal} ${textActiveColorFinal}`;\r\n const hoverClasses = `${bgActiveColorFinal ? bgActiveColorFinal.replace('bg-', 'hover:bg-') : 'hover:bg-white/5'} ${textActiveColorFinal ? textActiveColorFinal.replace('text-', 'hover:text-') : 'hover:text-white'}`;\r\n\r\n const isActive = (path?: string) => {\r\n if (!path) return false;\r\n\r\n // const clean = (p: string) => p.replace(/\\/+$/, '');\r\n const clean = (p: string) => {\r\n while (p.endsWith('/')) p = p.slice(0, -1);\r\n return p;\r\n };\r\n const current = clean(pathname ?? currentPathname ?? '');\r\n const target = clean(path);\r\n\r\n if (!current || !target) return false;\r\n\r\n // Case 1: Exact match\r\n if (current === target) return true;\r\n\r\n // Case 2: Normal startsWith\r\n if (current.startsWith(target) || target.startsWith(current)) return true;\r\n\r\n // Case 3: Last segment match\r\n const currentLast = current.split('/').pop();\r\n const targetLast = target.split('/').pop();\r\n\r\n return !!currentLast && !!targetLast && currentLast === targetLast;\r\n };\r\n\r\n const isParentActive = (tab: any) => {\r\n if (!Array.isArray(tab.children)) return false;\r\n return tab.children.some((child: any) => isActive(child.url));\r\n };\r\n\r\n const router = useRouter();\r\n\r\n const [showExitDialog, setShowExitDialog] = useState(false);\r\n const [pendingUrl, setPendingUrl] = useState<string | null>(null);\r\n\r\n const handleBuilderExit = useCallback(\r\n (e: React.MouseEvent<HTMLAnchorElement>, url: string) => {\r\n if (isBuilder) {\r\n e.preventDefault();\r\n setPendingUrl(url);\r\n // setShowExitDialog(true);\r\n showSonnerToast({\r\n variant: 'success',\r\n title: 'Navigation Alert',\r\n description: `You will be redirected to ${url} in the built application.`,\r\n });\r\n }\r\n },\r\n [isBuilder]\r\n );\r\n\r\n const confirmExit = () => {\r\n if (pendingUrl) {\r\n setShowExitDialog(false);\r\n router.push(pendingUrl);\r\n }\r\n };\r\n\r\n let timeout: NodeJS.Timeout;\r\n\r\n const renderDesktopTab = (tab: any, index: number) => {\r\n const active = isActive(tab.url) || isParentActive(tab);\r\n const finalClasses = [baseClasses, active ? activeClasses : hoverClasses, tab.className || ''].join(' ');\r\n const finalStyle = {\r\n ...tab.style,\r\n backgroundColor: active && bgActiveColor ? bgActiveColor : undefined,\r\n color: active && textActiveColor ? textActiveColor : undefined,\r\n border: active && textActiveColor ? `1px solid ${textActiveColor}` : undefined,\r\n };\r\n\r\n if (Array.isArray(tab.children) && tab.children.length > 0 && tab.isDropDown) {\r\n return (\r\n <DropdownMenu\r\n key={index}\r\n open={openIndex === index}\r\n onOpenChange={(open) => setOpenIndex(open ? index : null)}\r\n >\r\n <DropdownMenuTrigger\r\n className={`${finalClasses} inline-flex items-center gap-1`}\r\n onMouseEnter={() => {\r\n clearTimeout(timeout);\r\n setOpenIndex(index);\r\n }}\r\n onMouseLeave={() => {\r\n timeout = setTimeout(() => setOpenIndex(null), 150);\r\n }}\r\n style={finalStyle}\r\n >\r\n {tab.header}\r\n <ChevronDown className=\"h-4 w-4 opacity-80\" />\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n align=\"start\"\r\n sideOffset={6}\r\n className=\"z-50 min-w-[200px] max-h-80 rounded-md border border-gray-200 bg-white p-1 shadow-lg\"\r\n onMouseEnter={() => {\r\n clearTimeout(timeout);\r\n setOpenIndex(index);\r\n }}\r\n onMouseLeave={() => {\r\n timeout = setTimeout(() => setOpenIndex(null), 150);\r\n }}\r\n >\r\n {tab.children.map((item: any, index: number) => (\r\n <DropdownMenuItem\r\n key={item.id || index}\r\n asChild\r\n className=\"cursor-pointer rounded-sm px-3 py-2 text-gray-800 hover:bg-gray-100 focus:bg-gray-100\"\r\n >\r\n <Link\r\n href={item.url || '#'}\r\n target={item.opens_in_new_tab ? '_blank' : '_self'}\r\n onClick={(e) => handleBuilderExit(e, item.url || '#')}\r\n >{item.header}</Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n }\r\n\r\n return tab.url ? (\r\n <Link\r\n key={index}\r\n href={tab.url}\r\n target={tab.opens_in_new_tab ? '_blank' : '_self'}\r\n className={finalClasses} style={finalStyle}\r\n onClick={(e) => handleBuilderExit(e, tab.url || '#')}\r\n >\r\n {tab.header}\r\n </Link>\r\n ) : (\r\n <div key={index} className={finalClasses} style={finalStyle} role=\"button\" tabIndex={0}>\r\n {tab.header}\r\n </div>\r\n );\r\n };\r\n\r\n const renderMobileMenu = () => (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger className=\"flex items-center gap-2 px-3 py-2 rounded-md bg-white/10 text-white text-sm\">\r\n <Menu className=\"h-4 w-4\" />\r\n Menu\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n align=\"start\"\r\n sideOffset={6}\r\n className=\"z-50 w-56 rounded-md border border-gray-200 bg-white p-1 shadow-lg\"\r\n >\r\n {rawTabs.map((tab: any, i: number) => {\r\n const hasChildren =\r\n Array.isArray(tab.children) && tab.children.length > 0 && tab.isDropDown;\r\n\r\n if (hasChildren) {\r\n return (\r\n <DropdownMenuSub key={i}>\r\n <DropdownMenuSubTrigger className=\"flex items-center justify-between cursor-pointer rounded-sm px-3 py-2 text-[13px] text-foreground hover:text-foreground\">\r\n {tab.header}\r\n </DropdownMenuSubTrigger>\r\n <DropdownMenuSubContent className=\"bg-white border shadow-lg rounded-md p-1\">\r\n {tab.children.map((item: any, index: number) => (\r\n <DropdownMenuItem\r\n key={item.id || index}\r\n asChild\r\n className=\"cursor-pointer rounded-sm px-3 py-2 text-gray-800 hover:bg-gray-100\"\r\n >\r\n <Link href={item.url || '#'} onClick={(e) => handleBuilderExit(e, item.url || '#')}>{item.header}</Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuSubContent>\r\n </DropdownMenuSub>\r\n );\r\n }\r\n\r\n return (\r\n <DropdownMenuItem\r\n key={i}\r\n asChild\r\n className=\"cursor-pointer rounded-sm px-3 py-2 text-[13px] text-gray-800 hover:bg-gray-100\"\r\n >\r\n <Link href={tab.url || '#'} onClick={(e) => handleBuilderExit(e, tab.url || '#')}>{tab.header}</Link>\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n\r\n const forceMobile = canvasMode ? canvasMode === 'mobile' || canvasMode === 'tablet' : undefined;\r\n const forceDesktop = canvasMode ? canvasMode === 'desktop' : undefined;\r\n\r\n return (\r\n <>\r\n <div className={cn('min-h-10', className)} style={style}>\r\n {forceDesktop !== undefined ? (\r\n forceDesktop && (\r\n <div className=\"hidden md:flex\">\r\n <div className={`flex gap-2 ${verticalMenu ? 'flex-col items-start' : 'flex-row'}`}>\r\n {rawTabs.map(renderDesktopTab)}\r\n </div>\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"hidden md:flex\">\r\n <div className={`flex gap-2 ${verticalMenu ? 'flex-col items-start' : 'flex-row'}`}>\r\n {rawTabs.map(renderDesktopTab)}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {forceMobile !== undefined ? (\r\n forceMobile && <div>{renderMobileMenu()}</div>\r\n ) : (\r\n <div className=\"flex md:hidden\">{renderMobileMenu()}</div>\r\n )}\r\n </div>\r\n {/* Exit Confirmation Dialog */}\r\n <Dialog open={showExitDialog} onOpenChange={setShowExitDialog}>\r\n <DialogContent className=\"bg-[#fff]\">\r\n <DialogHeader>\r\n <DialogTitle>Exit Builder?</DialogTitle>\r\n <DialogDescription>\r\n You are about to leave the builder. Any unsaved changes may be lost.\r\n </DialogDescription>\r\n </DialogHeader>\r\n <DialogFooter>\r\n <Button className='cursor-pointer bg-[#12715b] text-[#fff]' variant=\"outline\" onClick={() => setShowExitDialog(false)}>\r\n Cancel\r\n </Button>\r\n <Button className='cursor-pointer border-[#12715b] border' onClick={confirmExit}>Yes, Exit</Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n </>\r\n );\r\n};\r\n\r\nexport default Tabs;\r\n","'use client';\r\n\r\nimport * as React from 'react';\r\n\r\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\r\nimport { XIcon } from 'lucide-react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Dialog({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\r\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\r\n}\r\n\r\nfunction DialogTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\r\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\r\n}\r\n\r\nfunction DialogPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\r\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\r\n}\r\n\r\nfunction DialogClose({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\r\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\r\n}\r\n\r\nfunction DialogOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\r\n return (\r\n <DialogPrimitive.Overlay\r\n data-slot=\"dialog-overlay\"\r\n className={cn(\r\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-[60] bg-black/50',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogContent({\r\n className,\r\n children,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <DialogPortal data-slot=\"dialog-portal\">\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n data-slot=\"dialog-content\"\r\n className={cn(\r\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-[70] grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogPrimitive.Close\r\n data-slot=\"dialog-close\"\r\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\r\n >\r\n <XIcon />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n )}\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n );\r\n}\r\n\r\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"dialog-header\"\r\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"dialog-footer\"\r\n className={cn(\r\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\r\n return (\r\n <DialogPrimitive.Title\r\n data-slot=\"dialog-title\"\r\n className={cn('text-lg leading-none font-semibold', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\r\n return (\r\n <DialogPrimitive.Description\r\n data-slot=\"dialog-description\"\r\n className={cn('text-muted-foreground text-sm', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Dialog,\r\n DialogClose,\r\n DialogContent,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogOverlay,\r\n DialogPortal,\r\n DialogTitle,\r\n DialogTrigger,\r\n};\r\n","import { toast } from 'sonner';\r\n\r\ntype ToastVariant = 'default' | 'success' | 'error' | 'info' | 'warning';\r\n\r\ntype SonnerToastProps = {\r\n title: string;\r\n description?: string;\r\n variant?: ToastVariant;\r\n duration?: number;\r\n actionLabel?: string;\r\n onAction?: () => void;\r\n};\r\n\r\nexport function showSonnerToast({\r\n title,\r\n description,\r\n variant = 'default',\r\n duration = 3000,\r\n actionLabel,\r\n onAction,\r\n}: SonnerToastProps) {\r\n const options = {\r\n closeButton: true,\r\n description,\r\n duration,\r\n action: actionLabel\r\n ? {\r\n label: actionLabel,\r\n onClick: onAction || (() => { }),\r\n }\r\n : undefined,\r\n };\r\n\r\n switch (variant) {\r\n case 'success':\r\n toast.success(title, options);\r\n break;\r\n case 'error':\r\n toast.error(title, options);\r\n break;\r\n case 'info':\r\n toast.info(title, options);\r\n break;\r\n case 'warning':\r\n toast.warning(title, options);\r\n break;\r\n default:\r\n toast(title, options);\r\n }\r\n}\r\n\r\ntype ConfirmToastOptions = {\r\n title: string;\r\n description?: string;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n};\r\n\r\nexport function showConfirmToast({\r\n title,\r\n description,\r\n confirmLabel = 'Confirm',\r\n cancelLabel = 'Cancel',\r\n}: ConfirmToastOptions): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n const id = toast(title, {\r\n description,\r\n duration: Infinity,\r\n closeButton: false,\r\n action: {\r\n label: confirmLabel,\r\n onClick: () => {\r\n resolve(true);\r\n toast.dismiss(id);\r\n },\r\n },\r\n cancel: {\r\n label: cancelLabel,\r\n onClick: () => {\r\n resolve(false);\r\n toast.dismiss(id);\r\n },\r\n },\r\n });\r\n });\r\n}","import React, { useEffect, useState } from 'react';\r\n\r\nimport { Tooltip, TooltipTrigger, TooltipContent } from '@/components/ui/tooltip';\r\n\r\nimport { StagesProps } from '@/types/global';\r\n\r\nconst StagesComponent = ({\r\n stages,\r\n isShowBtn,\r\n buttonText,\r\n className,\r\n style,\r\n onStageChange,\r\n currentStage,\r\n dataKey = 'key',\r\n dataLabel = 'header',\r\n loading,\r\n saving,\r\n triggerOnClick = false,\r\n canvasMode = 'desktop'\r\n}: StagesProps) => {\r\n const [activeStage, setActiveStage] = useState('');\r\n const [isCompleted, setIsCompleted] = useState(false);\r\n const [activeChildStage, setActiveChildStage] = useState<any>(null);\r\n const [activeRootStage, setActiveRootStage] = useState<any>(null);\r\n\r\n useEffect(() => {\r\n if (currentStage) {\r\n setActiveStage(currentStage);\r\n } else {\r\n setActiveStage(stages && stages.length > 0 ? stages[0][dataKey] : null);\r\n }\r\n }, [currentStage]);\r\n\r\n const updateStage = (stageKey: string) => {\r\n setActiveStage(stageKey);\r\n onStageChange?.(stageKey);\r\n const { activeRoot, activeChild } = findStageContext(stages, stageKey);\r\n\r\n setActiveRootStage(activeRoot);\r\n setActiveChildStage(activeChild);\r\n };\r\n\r\n const nextStage = () => {\r\n if (!stages || stages.length === 0) return;\r\n const currentIndex = stages.findIndex((stage: any) => stage[dataKey] === activeStage);\r\n\r\n if (currentIndex + 1 === stages.length) {\r\n const currentStageObj = stages[currentIndex];\r\n updateStage(currentStageObj[dataKey]);\r\n setIsCompleted(true);\r\n return;\r\n }\r\n\r\n if (currentIndex < stages.length - 1) {\r\n const nextStageObj = stages[currentIndex];\r\n updateStage(nextStageObj[dataKey]);\r\n return;\r\n }\r\n };\r\n\r\n const lastStage = stages && stages.length > 0 ? stages[stages.length - 1][dataKey] : null;\r\n const isMobile = canvasMode === 'mobile';\r\n\r\n const onStageClick = (stageKey: any) => {\r\n if (!stageKey || stageKey === activeStage || activeStage === lastStage) return;\r\n setActiveStage(stageKey);\r\n if (triggerOnClick) {\r\n onStageChange?.(stageKey);\r\n }\r\n };\r\n\r\n const findStageContext = (\r\n nodes?: any[],\r\n curr?: string,\r\n root: any = null\r\n ): { activeRoot: any | null; activeChild: any | null } => {\r\n if (!nodes || nodes.length === 0) {\r\n return { activeRoot: null, activeChild: null };\r\n }\r\n if (!Array.isArray(nodes)) {\r\n return { activeRoot: null, activeChild: null };\r\n }\r\n\r\n for (const node of nodes) {\r\n const currentRoot = root ?? node;\r\n\r\n if (node?.[dataKey] === curr) {\r\n return {\r\n activeRoot: root ?? node,\r\n activeChild: node\r\n };\r\n }\r\n\r\n const result = findStageContext(node?.children, curr, currentRoot);\r\n if (result.activeChild) {\r\n return result;\r\n }\r\n }\r\n\r\n return { activeRoot: null, activeChild: null };\r\n };\r\n\r\n useEffect(() => {\r\n if (!currentStage || !Array.isArray(stages)) {\r\n setActiveRootStage(null);\r\n setActiveChildStage(null);\r\n return;\r\n }\r\n\r\n const { activeRoot, activeChild } = findStageContext(stages, currentStage);\r\n\r\n setActiveRootStage(activeRoot);\r\n setActiveChildStage(activeChild);\r\n }, [currentStage, stages]);\r\n\r\n const isAllStagesCompleted = isCompleted || (activeRootStage?.[dataKey] === lastStage);\r\n const disabled = isAllStagesCompleted || loading || saving;\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className={`\r\n flex flex-col lg:flex-row items-start lg:items-center \r\n justify-between bg-red p-2 rounded-lg border border-gray-200 w-full\r\n gap-3 lg:gap-0\r\n ${isMobile ? 'p-3 sm:p-4' : 'p-2'}\r\n `}\r\n >\r\n {/* Back Button - Always top left */}\r\n <div className=\"flex items-center flex-shrink-0 order-1 lg:order-1\">\r\n <button className=\"p-2 hover:bg-gray-100 rounded flex-shrink-0\">\r\n <svg className=\"w-4 h-4 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Stages Container - Middle on mobile, center on desktop */}\r\n <div className={`\r\n flex flex-col sm:flex-row items-center flex-1 px-1 sm:px-2 \r\n flex-wrap gap-2 sm:gap-2 lg:gap-3 w-full lg:w-auto\r\n ${isMobile ? 'order-2 mt-2 lg:mt-0' : 'order-2'}\r\n `}\r\n >\r\n {loading ? (\r\n Array(6).fill(null).map((_, index) => (\r\n <button\r\n key={index}\r\n className={`\r\n min-w-[70px] sm:min-w-[80px] w-full sm:w-auto\r\n min-h-[32px] sm:min-h-[35px] px-3 sm:px-4 py-2 rounded-full \r\n text-xs sm:text-sm font-medium transition-colors duration-200 \r\n whitespace-nowrap text-gray-700 hover:bg-gray-100 border \r\n border-gray-200 bg-gray-100 animate-pulse flex-shrink-0\r\n ${isMobile ? 'flex-1' : ''}\r\n `}\r\n disabled\r\n />\r\n ))\r\n ) : (stages || [])?.length > 0 && stages?.map((stage: { id: string;[dataLabel]: string;[dataKey]: string; isSuccess: boolean }, index: number) => {\r\n const currentIndex = stages.findIndex((s: any) => s[dataKey] === activeStage);\r\n const isCompletedStage = isAllStagesCompleted || index <= currentIndex;\r\n const isActive = !isAllStagesCompleted && index === currentIndex;\r\n let stageColor = 'bg-green-50 text-green-700 border-2 border-green-700';\r\n\r\n if (stage.hasOwnProperty('isSuccess') && stage.isSuccess === false) {\r\n stageColor = 'bg-red-50 text-red-700 border-2 border-red-700';\r\n }\r\n\r\n let stageLabel = stage[dataLabel];\r\n if (stage[dataKey] !== activeChildStage?.[dataKey] && activeRootStage?.[dataKey] === stage[dataKey]) {\r\n stageLabel = activeChildStage?.[dataLabel] || stageLabel;\r\n stageColor = 'bg-green-50 text-green-700 border-2 border-green-700';\r\n\r\n if (activeChildStage.hasOwnProperty('isSuccess') && activeChildStage.isSuccess === false) {\r\n stageColor = 'bg-red-50 text-red-700 border-2 border-red-700';\r\n }\r\n }\r\n const stageKey = typeof stage[dataKey] === 'string' ? stage[dataKey] : JSON.stringify(stage[dataKey]);\r\n return (\r\n <React.Fragment key={stageKey}>\r\n <Tooltip delayDuration={500} disableHoverableContent key={stageKey}>\r\n <TooltipTrigger asChild>\r\n <button\r\n className={`\r\n min-w-[70px] sm:min-w-[80px] w-full sm:w-auto px-3 sm:px-4 py-1.5 sm:py-2 \r\n rounded-full text-xs sm:text-sm font-medium transition-colors duration-200 \r\n whitespace-normal sm:whitespace-nowrap flex-shrink-0 max-w-[150px] text-ellipsis overflow-hidden\r\n ${isActive ? 'bg-green-700 text-white shadow-md'\r\n : isCompletedStage ? stageColor\r\n : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-200'}\r\n ${isMobile ? 'flex-1 text-center py-2.5' : ''}\r\n `}\r\n onClick={() => {\r\n if (isAllStagesCompleted) return;\r\n onStageClick(stage[dataKey]);\r\n }}\r\n >\r\n {stageLabel}\r\n </button>\r\n </TooltipTrigger>\r\n\r\n <TooltipContent className=\"max-w-[400px] p-3 text-xs text-muted-foreground space-y-2\">\r\n <span><b>{stageLabel}</b></span>\r\n </TooltipContent>\r\n\r\n {/* Connector line - Hide on mobile */}\r\n {!isMobile && index < stages.length - 1 && (\r\n <div className=\"hidden sm:flex sm:flex-shrink-0 w-3 h-px bg-gray-300 sm:w-4\" />\r\n )}\r\n </Tooltip>\r\n </React.Fragment>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Next Button - Bottom on mobile, right on desktop */}\r\n {isShowBtn && (\r\n <div className={`\r\n flex items-center flex-shrink-0 w-full lg:w-auto\r\n ${isMobile ? 'order-3 mt-3 lg:mt-0' : 'order-3'}\r\n `}\r\n >\r\n <button\r\n className={`\r\n w-full lg:w-auto bg-green-700 text-white px-4 lg:px-6 py-2.5 \r\n rounded-lg text-sm font-medium transition-colors duration-200 \r\n shadow-sm ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:shadow-md'}\r\n `}\r\n onClick={nextStage}\r\n disabled={disabled}\r\n >\r\n {saving ? 'Updating...' : buttonText}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StagesComponent;\r\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Spacer = ({ className, style }: ElementProps) => {\r\n return (\r\n <div className={`${className}`} style={style} />\r\n );\r\n};\r\n\r\nexport default Spacer;\r\n","import { ProfileProps } from \"@/types/global\";\r\n\r\nconst Profile = ({ profileType, showName, userName, className, style }: ProfileProps) => {\r\n return (\r\n <div className={className} style={style}>\r\n <div className='flex gap-2 items-center justify-between w-30 cursor-pointer'>\r\n {showName && (\r\n <h4 className='text-[#000000] dark:text-[#fff] text-[13px] font-[500] mb-0'>{userName}</h4>\r\n )}\r\n {profileType === 'avatar' ? (\r\n <img\r\n src='https://builder.development.algorithmshift.ai/images/toolset/profile.svg' alt=\"auto\" width={24} height={24}\r\n />\r\n ) : (\r\n <div className='w-6 h-6 bg-[#12715b] rounded-full text-[#fff] text-center text-[11px] flex items-center justify-center'>A</div>\r\n )}\r\n\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Profile;\r\n","import { NotificationProps } from \"@/types/global\";\r\n\r\nconst Notification = ({ className, style, badgeType, badgeCount = 0, hideBadgeWhenZero }: NotificationProps) => {\r\n return (\r\n <div className={className} style={style}>\r\n <div className='w-[34px] h-[34px] bg-[#E9E9E9] rounded-md text-center flex items-center justify-center relative'>\r\n <img\r\n src='https://builder.development.algorithmshift.ai/images/toolset/notification.svg' alt=\"auto\" width={18} height={18}\r\n />\r\n {badgeType === 'number' && !(hideBadgeWhenZero && badgeCount === 0) && badgeCount > 0 ? (\r\n <span className='text-[10px] text-[#fff] bg-[#FF4A4A] w-[20px] h-[20px] rounded-full absolute top-0 right-0 transform translate-x-1/2 -translate-y-1/2 leading-[20px]'>{badgeCount}</span>\r\n ) : <span className='bg-[#FF4A4A] w-[10px] h-[10px] rounded-full absolute top-0 right-0 transform translate-x-1/2 -translate-y-1/2 leading-[20px]'></span>}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Notification;\r\n","import { cn } from '@/lib/utils';\r\nimport { LogoProps } from '@/types/global';\r\nimport placeholder from \"../../../assets/logo_placeholder.png\";\r\n\r\nconst Logo = ({\r\n className,\r\n style,\r\n imageUrl,\r\n altText = 'Preview',\r\n}: LogoProps) => {\r\n\r\n if (!imageUrl) {\r\n return (\r\n <div\r\n className={cn(\r\n className, 'p-0'\r\n )} style={style}\r\n >\r\n <img src={placeholder} alt={altText} className=\"opacity-50\" width={150} height={80} />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <img src={imageUrl} alt={altText} className={className} style={style} />\r\n );\r\n};\r\n\r\nexport default Logo;\r\n","'use client';\r\n\r\nimport { useCallback, useMemo, useState, useEffect } from 'react';\r\n\r\nimport { Bell, Search, Menu } from 'lucide-react';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { useRouter } from 'next/navigation';\r\n\r\nimport { Avatar, AvatarImage } from '@/components/ui/avatar';\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n DropdownMenuSeparator,\r\n} from '@/components/ui/dropdown-menu';\r\nimport { Input } from '@/components/ui/input';\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { getInitials } from '@/lib/utils';\r\nimport { NavbarProps } from '@/types/global';\r\n\r\nexport default function Navbar({\r\n style,\r\n badgeType,\r\n badgeCount = 0,\r\n hideBadgeWhenZero,\r\n profileType,\r\n showName,\r\n imageUrl,\r\n altText = 'Logo',\r\n canvasMode = 'desktop', // desktop | mobile | tablet\r\n list = [],\r\n profileMenu = [],\r\n userName = 'Guest User',\r\n isBuilder = false,\r\n source,\r\n navList,\r\n onSearch\r\n}: NavbarProps) {\r\n const router = useRouter();\r\n\r\n // Auto responsive\r\n const [screenMode, setScreenMode] = useState<'desktop' | 'tablet' | 'mobile' | string>(\r\n canvasMode\r\n );\r\n\r\n useEffect(() => {\r\n const detectMode = () => {\r\n if (window.innerWidth < 640) setScreenMode('mobile');\r\n else if (window.innerWidth < 1024) setScreenMode('tablet');\r\n else setScreenMode('desktop');\r\n };\r\n\r\n detectMode();\r\n window.addEventListener('resize', detectMode);\r\n return () => window.removeEventListener('resize', detectMode);\r\n }, []);\r\n\r\n const mode = canvasMode || screenMode;\r\n\r\n const isMobile = mode === 'mobile';\r\n const isTablet = mode === 'tablet';\r\n const isDesktop = mode === 'desktop';\r\n\r\n const handleBuilderExit = useCallback(\r\n (e: any, url: string) => {\r\n if (isBuilder) {\r\n e.preventDefault();\r\n showSonnerToast({ variant: 'info', title: `You will be redirected to ${url} in the real app.`, duration: 3000 });\r\n } else {\r\n router.push(url);\r\n }\r\n },\r\n [isBuilder]\r\n );\r\n\r\n const formattedMenu = useMemo(() => {\r\n if (source === 'state' && navList?.length) {\r\n return navList.map((i: any) => ({\r\n ...i,\r\n header: i.name || 'Menu',\r\n }));\r\n }\r\n return list;\r\n }, [source, navList, list]);\r\n\r\n const RenderSearchInput = () => (\r\n <div className=\"flex-1 px-2\">\r\n <div className=\"relative w-full max-w-md border border-gray-300 rounded-md\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 dark:text-white text-gray-400\" />\r\n <Input\r\n placeholder=\"Search\"\r\n className=\"pl-9 text-gray-500\"\r\n onKeyDown={(event) => {\r\n if (event.key === 'Enter') {\r\n const query = (event.target as HTMLInputElement).value;\r\n onSearch?.({\r\n searchTerm: query\r\n });\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n {/* NAV */}\r\n <nav\r\n className=\"w-full min-h-[75px] border-b border-gray-200 dark:border-gray-800 dark:bg-gray-800 bg-white shadow-sm\"\r\n style={style}\r\n >\r\n <div className=\"mx-auto flex max-w-[90%] items-center justify-between px-4 py-4\">\r\n\r\n {/* Logo */}\r\n <Link\r\n href=\"/\"\r\n onClick={(e) => handleBuilderExit(e, '/')}\r\n className=\"flex items-center space-x-2\"\r\n >\r\n {imageUrl ? (\r\n <Image src={imageUrl} alt={altText} width={180} height={40} />\r\n ) : (\r\n <span className=\"font-semibold text-blue-700\">Logo</span>\r\n )}\r\n </Link>\r\n\r\n {/* Desktop Menu */}\r\n {isDesktop && (\r\n <div className=\"hidden md:flex items-center space-x-6\">\r\n {formattedMenu.map((item: any) => (\r\n <Link\r\n key={item.id}\r\n href={item.url}\r\n onClick={(e) => handleBuilderExit(e, item.url)}\r\n className=\"text-sm font-medium text-gray-600 dark:text-white hover:text-gray-900\"\r\n >\r\n {item.header}\r\n </Link>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Right Side */}\r\n <div className=\"flex items-center space-x-3\">\r\n\r\n {/* Desktop Search */}\r\n {(isDesktop || isTablet) && <RenderSearchInput />}\r\n\r\n {/* Notifications */}\r\n <div className=\"relative bg-gray-200 dark:bg-gray-700 rounded-md\">\r\n <Button variant=\"ghost\" size=\"icon\">\r\n <Bell className=\"h-5 w-5 text-gray-700 dark:text-gray-300\" />\r\n </Button>\r\n\r\n {badgeType === 'number' && !(hideBadgeWhenZero && badgeCount === 0) && Number(badgeCount) > 0 ? (\r\n <span className=\"absolute -top-1 -right-1 h-4 w-4 flex items-center justify-center bg-red-500 rounded-full text-white text-[10px]\">\r\n {badgeCount}\r\n </span>\r\n ) : (\r\n !hideBadgeWhenZero && (\r\n <span className=\"absolute -top-1 -right-1 h-2 w-2 bg-red-500 rounded-full\"></span>\r\n )\r\n )}\r\n </div>\r\n\r\n {/* Profile */}\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <div className=\"flex items-center space-x-2 cursor-pointer\">\r\n {!isMobile && showName && (\r\n <h4 className=\"text-gray-900 dark:text-gray-300 text-sm\">\r\n {userName}\r\n </h4>\r\n )}\r\n <Avatar className=\"h-8 w-8\">\r\n {profileType === 'avatar' ? (\r\n <AvatarImage src=\"/images/appbuilder/toolset/profile.svg\" alt=\"profile\" />\r\n ) : (\r\n <div className=\"bg-green-700 text-white h-full w-full rounded-full flex items-center justify-center text-xs\">\r\n {getInitials(userName)}\r\n </div>\r\n )}\r\n </Avatar>\r\n\r\n {(isMobile || isTablet) && (\r\n <Button variant=\"ghost\" size=\"icon\">\r\n <Menu className=\"h-6 w-6\" />\r\n </Button>\r\n )}\r\n </div>\r\n </DropdownMenuTrigger>\r\n\r\n <DropdownMenuContent align=\"end\" className=\"bg-white dark:bg-gray-800\">\r\n {profileMenu.map((item: any) => (\r\n <DropdownMenuItem key={item.id}>\r\n <Link href={item.url} onClick={(e) => handleBuilderExit(e, item.url)}>\r\n {item.header}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n\r\n {/* Mobile/Tablet Menu */}\r\n {(isMobile || isTablet) && (\r\n <>\r\n <DropdownMenuSeparator />\r\n {formattedMenu.map((item: any) => (\r\n <DropdownMenuItem key={item.id}>\r\n <Link href={item.url} onClick={(e) => handleBuilderExit(e, item.url)}>\r\n {item.header}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </>\r\n )}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n </div>\r\n </nav>\r\n\r\n {/* Mobile Search */}\r\n {isMobile && (\r\n <div className=\"p-3\">\r\n <RenderSearchInput />\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Avatar = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n 'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAvatar.displayName = AvatarPrimitive.Root.displayName;\r\n\r\nconst AvatarImage = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Image>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Image\r\n ref={ref}\r\n className={cn('aspect-square h-full w-full', className)}\r\n {...props}\r\n />\r\n));\r\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\r\n\r\nconst AvatarFallback = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Fallback\r\n ref={ref}\r\n className={cn(\r\n 'flex h-full w-full items-center justify-center rounded-full bg-muted',\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\r\n\r\nexport { Avatar, AvatarImage, AvatarFallback };\r\n","'use client';\r\n\r\nimport React, { useEffect, useMemo, useState, useCallback } from 'react';\r\n\r\nimport axios from 'axios';\r\nimport {\r\n BarChart,\r\n Bar,\r\n Area,\r\n AreaChart,\r\n XAxis,\r\n YAxis,\r\n CartesianGrid,\r\n Tooltip,\r\n ResponsiveContainer,\r\n Legend,\r\n} from 'recharts';\r\n\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { BarChartProps } from '@/types/global';\r\n\r\nconst getRandomColor = () => {\r\n const palette = [\r\n '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a', '#1e293b',\r\n '#10b981', '#059669', '#047857', '#065f46', '#022c22',\r\n '#f59e0b', '#d97706', '#b45309', '#92400e', '#422006',\r\n '#ef4444', '#dc2626', '#b91c1c', '#991b1b', '#7f1d1d',\r\n '#8b5cf6', '#7c3aed', '#6d28d9', '#5b21b6', '#4c1d95',\r\n '#14b8a6', '#0d9488', '#0f766e', '#115e59', '#134e4a',\r\n '#ec4899', '#db2777', '#be185d', '#9d174d', '#831843',\r\n '#22c55e', '#16a34a', '#15803d', '#166534', '#14532d',\r\n ];\r\n return palette[Math.floor(Math.random() * palette.length)];\r\n};\r\n\r\nconst ChartComponent = ({\r\n className,\r\n style,\r\n loading: externalLoading,\r\n dataKey,\r\n dataLabel,\r\n apiUrl,\r\n isPaginationEnabled,\r\n limit = 10,\r\n canvasMode,\r\n ...props\r\n}: BarChartProps) => {\r\n const [rawData, setRawData] = useState<any[]>([]);\r\n const [rawMeta, setRawMeta] = useState<any>(null);\r\n const [localLoading, setLocalLoading] = useState(false);\r\n const [currentPage, setCurrentPage] = useState(1);\r\n\r\n const effectiveData = apiUrl ? rawData : (props.data as any[] | undefined) || [];\r\n const effectiveLoading = apiUrl ? localLoading : externalLoading;\r\n\r\n useEffect(() => {\r\n if (apiUrl) {\r\n setCurrentPage(1);\r\n }\r\n }, [apiUrl]);\r\n\r\n const fetchData = useCallback(async (page: number) => {\r\n if (!apiUrl) return;\r\n\r\n const cancelled = false;\r\n\r\n try {\r\n setLocalLoading(true);\r\n\r\n const params = new URLSearchParams({\r\n page: page.toString(),\r\n limit: limit.toString(),\r\n });\r\n\r\n const axiosClient = props.axiosInstance ?? axios;\r\n\r\n const res = await axiosClient.get(`${apiUrl}?${params.toString()}`, {\r\n withCredentials: true,\r\n });\r\n\r\n if (!cancelled) {\r\n let data = [];\r\n let meta = null;\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n data = res.data.data;\r\n meta = res.data.meta || null;\r\n } else if (Array.isArray(res.data)) {\r\n data = res.data;\r\n }\r\n setRawData(data);\r\n setRawMeta(meta);\r\n }\r\n } catch (err: any) {\r\n if (!cancelled) {\r\n showSonnerToast({\r\n title: err?.response?.data?.message || err?.message || 'Failed to load chart data',\r\n variant: 'error',\r\n });\r\n setRawData([]);\r\n }\r\n } finally {\r\n if (!cancelled) setLocalLoading(false);\r\n }\r\n }, [apiUrl, limit]);\r\n\r\n useEffect(() => {\r\n if (!apiUrl) return;\r\n\r\n fetchData(currentPage);\r\n }, [apiUrl, currentPage, fetchData]);\r\n\r\n const handlePageChange = (newPage: number) => {\r\n if (rawMeta && (newPage < 1 || newPage > rawMeta.pages)) return;\r\n setCurrentPage(newPage);\r\n };\r\n\r\n const data = useMemo(() => {\r\n if (!Array.isArray(effectiveData) || effectiveData.length === 0 || !dataKey || !dataLabel) {\r\n return [];\r\n }\r\n\r\n return effectiveData.map((item: any) => ({\r\n ...item,\r\n [dataKey]: Number(item[dataKey] || 0),\r\n fill: getRandomColor(),\r\n }));\r\n }, [effectiveData, dataKey, dataLabel]);\r\n\r\n const chartType = props.chartType || 'bar';\r\n const legendsPosition = ['middle', 'bottom'].includes(props.legendsPosition as string)\r\n ? props.legendsPosition\r\n : 'top';\r\n\r\n if (effectiveLoading || data.length === 0) {\r\n return (\r\n <div\r\n className={`relative flex flex-col w-full h-[300px] md:h-[400px] bg-gradient-to-br from-gray-50 to-gray-100 rounded-xl p-6 ${className}`}\r\n style={style}\r\n >\r\n <div className=\"mb-6 flex justify-center\">\r\n <div className=\"inline-flex items-center space-x-2 bg-white/90 px-6 py-2.5 rounded-xl backdrop-blur-sm border border-gray-200 shadow-lg\">\r\n <div className=\"w-5 h-5 border-2 border-gray-400 border-t-blue-500 rounded-full animate-spin\" />\r\n <span className=\"text-sm font-medium text-gray-700 bg-gradient-to-r from-gray-300 bg-clip-text animate-pulse\">\r\n Loading chart data...\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/60 to-transparent animate-shimmer rounded-xl\" />\r\n <div className=\"flex-1 relative w-full h-full min-h-[240px] md:min-h-[320px] bg-white/80 rounded-lg border border-gray-200/50 shadow-sm\">\r\n <div className=\"absolute bottom-0 left-4 right-4 flex gap-2 h-[200px] md:h-[280px] justify-center items-end\">\r\n {[...Array(20)].map((_, idx) => {\r\n const randomHeight = `${Math.floor(Math.random() * 76) + 20}%`;\r\n return (\r\n <div\r\n key={`bar-${idx}`}\r\n className={`relative w-10 md:w-12 flex-1 max-w-[48px] rounded-t-lg bg-gradient-to-t from-gray-100 via-gray-200 to-transparent shadow-lg border border-gray-200/50 animate-slide-up stagger-${idx} overflow-hidden`}\r\n style={{ height: randomHeight, animationDelay: `${idx * 0.08}s` }}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-white/40 via-transparent to-white/40 animate-shimmer-bar\" />\r\n <div className=\"absolute bottom-1 left-1/2 w-4 h-1 rounded-full transform -translate-x-1/2 blur-sm\" />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`${className} h-[450px]`} style={style}>\r\n {isPaginationEnabled && rawMeta && (\r\n <div className=\"flex items-center justify-between mb-4 px-2\">\r\n <div className=\"text-sm text-gray-600 hidden sm:block\">\r\n Page {rawMeta.page} of {rawMeta.pages} ({rawMeta.total.toLocaleString()} total records)\r\n </div>\r\n <div className=\"flex items-center space-x-2 sm:hidden w-full justify-center\">\r\n <button\r\n onClick={() => handlePageChange(currentPage - 1)}\r\n disabled={currentPage === 1 || localLoading}\r\n className=\"flex-1 px-3 py-2 text-xs font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center justify-center space-x-1 min-w-0\"\r\n >\r\n <span>← Prev</span>\r\n </button>\r\n <span className=\"px-2 py-2 text-xs font-semibold text-gray-700 min-w-[36px] text-center flex-shrink-0\">\r\n {currentPage}\r\n </span>\r\n <button\r\n onClick={() => handlePageChange(currentPage + 1)}\r\n disabled={currentPage >= rawMeta.pages || localLoading}\r\n className=\"flex-1 px-3 py-2 text-xs font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center justify-center space-x-1 min-w-0\"\r\n >\r\n <span>Next →</span>\r\n </button>\r\n </div>\r\n\r\n <div className=\"flex items-center space-x-2 hidden sm:flex\">\r\n <button\r\n onClick={() => handlePageChange(currentPage - 1)}\r\n disabled={currentPage === 1 || localLoading}\r\n className=\"px-3 py-1.5 text-sm font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center space-x-1\"\r\n >\r\n <span>← Prev</span>\r\n </button>\r\n <span className=\"px-3 py-1 text-sm font-medium text-gray-700\">\r\n {currentPage}\r\n </span>\r\n <button\r\n onClick={() => handlePageChange(currentPage + 1)}\r\n disabled={currentPage >= rawMeta.pages || localLoading}\r\n className=\"px-3 py-1.5 text-sm font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center space-x-1\"\r\n >\r\n <span>Next →</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n )}\r\n\r\n {/* Chart */}\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n {chartType === 'bar' ? (\r\n <BarChart data={data}>\r\n <CartesianGrid strokeDasharray=\"3 3\" />\r\n <XAxis\r\n dataKey={dataLabel as string}\r\n angle={-45}\r\n textAnchor=\"end\"\r\n interval={0}\r\n tickFormatter={(value: string) =>\r\n value?.toString().length > 10 ? `${value.toString().substring(0, 10)}...` : value\r\n }\r\n tick={{\r\n fontSize: 13,\r\n fontWeight: 500,\r\n fill: '#666',\r\n fontFamily: 'inherit',\r\n }}\r\n height={80}\r\n className={'hidden sm:block'}\r\n />\r\n <YAxis\r\n tickFormatter={(value: number) => `${(value / 1000).toFixed(0)}k`}\r\n tick={{\r\n fontSize: 12,\r\n fill: '#94a3b8',\r\n fontWeight: 500,\r\n }}\r\n domain={['dataMin', 'dataMax']}\r\n width={60}\r\n />\r\n <Tooltip formatter={(value: number) => [`${value}`, 'Count']} />\r\n <Legend verticalAlign={legendsPosition as any} align=\"center\" />\r\n <Bar\r\n dataKey={dataKey as string}\r\n radius={[6, 6, 0, 0]}\r\n isAnimationActive={false}\r\n />\r\n </BarChart>\r\n ) : (\r\n <AreaChart data={data}>\r\n <defs>\r\n <linearGradient id=\"colorCount\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\r\n <stop offset=\"5%\" stopColor=\"#00695C\" stopOpacity={0.8} />\r\n <stop offset=\"95%\" stopColor=\"#00695C\" stopOpacity={0} />\r\n </linearGradient>\r\n </defs>\r\n <CartesianGrid strokeDasharray=\"3 3\" />\r\n <XAxis\r\n dataKey={dataLabel as string}\r\n angle={0}\r\n interval={0}\r\n tick={{\r\n fontSize: 13,\r\n fontWeight: 500,\r\n fill: '#666',\r\n fontFamily: 'inherit',\r\n }}\r\n />\r\n <YAxis\r\n tickFormatter={(value: number) => `${(value / 1000).toFixed(0)}k`}\r\n tick={{\r\n fontSize: 12,\r\n fill: '#94a3b8',\r\n fontWeight: 500,\r\n }}\r\n domain={['dataMin', 'dataMax']}\r\n width={60}\r\n />\r\n <Tooltip formatter={(value: number) => `${value}k`} />\r\n <Area\r\n type=\"monotone\"\r\n dataKey={dataKey as string}\r\n stroke=\"#00695C\"\r\n fillOpacity={1}\r\n fill=\"url(#colorCount)\"\r\n isAnimationActive={false}\r\n />\r\n </AreaChart>\r\n )}\r\n </ResponsiveContainer>\r\n </div>\r\n );\r\n};\r\n\r\nexport default React.memo(ChartComponent);\r\n","'use client';\r\n\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\n\r\nimport axios from 'axios';\r\nimport {\r\n PieChart,\r\n Pie,\r\n Cell,\r\n ResponsiveContainer,\r\n Tooltip,\r\n} from 'recharts';\r\n\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { PieChartProps } from '@/types/global';\r\n\r\nconst getRandomColor = () => {\r\n const palette = [\r\n '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a', '#1e293b',\r\n '#10b981', '#059669', '#047857', '#065f46', '#022c22',\r\n '#f59e0b', '#d97706', '#b45309', '#92400e', '#422006',\r\n '#ef4444', '#dc2626', '#b91c1c', '#991b1b', '#7f1d1d',\r\n '#8b5cf6', '#7c3aed', '#6d28d9', '#5b21b6', '#4c1d95',\r\n '#14b8a6', '#0d9488', '#0f766e', '#115e59', '#134e4a',\r\n '#ec4899', '#db2777', '#be185d', '#9d174d', '#831843',\r\n '#22c55e', '#16a34a', '#15803d', '#166534', '#14532d',\r\n '#3b82f6', '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a',\r\n '#f97316', '#ea580c', '#c2410c', '#9a3412', '#7c2d12',\r\n '#a855f7', '#9333ea', '#7e22ce', '#6b21a8', '#581c87',\r\n '#06b6d4', '#0891b2', '#0e7490', '#155e75', '#164e63'\r\n ];\r\n return palette[Math.floor(Math.random() * palette.length)];\r\n};\r\n\r\nconst DonutChart = ({\r\n className,\r\n style,\r\n loading: externalLoading,\r\n dataKey = 'value',\r\n dataLabel = 'name',\r\n apiUrl,\r\n ...props\r\n}: PieChartProps) => {\r\n const showLegends = props.showLegends ?? true;\r\n const canvasMode = props.canvasMode;\r\n\r\n const [rawData, setRawData] = useState<any[]>([]);\r\n const [localLoading, setLocalLoading] = useState(false);\r\n\r\n const effectiveData = apiUrl ? rawData : (props.data as any[] | undefined) || [];\r\n const effectiveLoading = apiUrl ? localLoading : externalLoading;\r\n\r\n useEffect(() => {\r\n if (!apiUrl) return;\r\n\r\n let cancelled = false;\r\n\r\n const fetchData = async () => {\r\n try {\r\n setLocalLoading(true);\r\n\r\n const axiosClient = props.axiosInstance ?? axios;\r\n const res = await axiosClient.get(apiUrl, {\r\n withCredentials: true\r\n });\r\n\r\n if (!cancelled) {\r\n let data = [];\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n data = res.data.data;\r\n } else if (Array.isArray(res.data)) {\r\n data = res.data;\r\n }\r\n setRawData(data);\r\n }\r\n } catch (err: any) {\r\n if (!cancelled) {\r\n showSonnerToast({\r\n title: err?.response?.data?.message || err?.message || 'Failed to load chart data',\r\n variant: 'error'\r\n });\r\n setRawData([]);\r\n }\r\n } finally {\r\n if (!cancelled) setLocalLoading(false);\r\n }\r\n };\r\n\r\n fetchData();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [apiUrl]);\r\n\r\n const data = useMemo(() => {\r\n if (!Array.isArray(effectiveData) || effectiveData.length === 0) return [];\r\n return effectiveData.map((item: any) => ({\r\n ...item,\r\n color: item.color || getRandomColor(),\r\n [dataKey]: Number(item[dataKey] ?? 0),\r\n [dataLabel]: item[dataLabel] ?? 'Unknown'\r\n }));\r\n }, [effectiveData, dataKey, dataLabel]);\r\n\r\n const total = useMemo(() =>\r\n data.reduce((sum: number, d: any) => sum + (d[dataKey] ?? 0), 0), [data, dataKey]\r\n );\r\n\r\n const formattedTotal = useMemo(() => {\r\n if (total >= 1000000) {\r\n return `${(total / 1000000).toFixed(1)}M`;\r\n }\r\n if (total >= 1000) {\r\n return `${(total / 1000).toFixed(0)}k`;\r\n }\r\n return total.toString();\r\n }, [total]);\r\n\r\n const chartData = useMemo(() => {\r\n if (total === 0) return data;\r\n\r\n const sortedData = [...data].sort((a, b) => (b[dataKey] ?? 0) - (a[dataKey] ?? 0));\r\n const minAngle = 360 / Math.max(12, sortedData.length);\r\n const minValue = (total * minAngle) / 360;\r\n\r\n return sortedData.map((item, index) => {\r\n const value = item[dataKey] ?? 0;\r\n if (value < minValue && index < 12) {\r\n return {\r\n ...item,\r\n [dataKey]: minValue * 1.2,\r\n isBoosted: true,\r\n };\r\n }\r\n return item;\r\n });\r\n }, [data, total, dataKey]);\r\n\r\n const forceMobile = canvasMode === 'mobile' || canvasMode === 'tablet';\r\n\r\n const getDynamicRadius = () => {\r\n if (forceMobile) return { inner: 60, outer: 100 };\r\n if (chartData.length <= 6) return { inner: 85, outer: 150 };\r\n return { inner: 70, outer: 130 };\r\n };\r\n\r\n const [mounted, setMounted] = useState(false);\r\n useEffect(() => {\r\n const timeout = setTimeout(() => setMounted(true), 100);\r\n return () => clearTimeout(timeout);\r\n }, []);\r\n\r\n const renderLegends = useMemo(() => {\r\n if (!showLegends) return null;\r\n return (\r\n <div className=\"flex flex-wrap justify-center gap-2 mt-4 w-full max-w-4xl\">\r\n {chartData.map((d: any, index: number) => {\r\n const actualValue = data.find((item: any) =>\r\n item[dataLabel] === d[dataLabel]\r\n )?.[dataKey] ?? d[dataKey];\r\n\r\n const displayValue = actualValue >= 1000\r\n ? `${(actualValue / 1000).toFixed(0)}k`\r\n : actualValue.toLocaleString();\r\n\r\n return (\r\n <div\r\n key={`legend-${index}`}\r\n className=\"flex items-center space-x-2 rounded-lg border border-gray-200/50 px-3 py-1.5 w-[48%] sm:w-[32%] md:w-auto bg-white/80 backdrop-blur-sm shadow-sm hover:shadow-md transition-all\"\r\n >\r\n <span\r\n className=\"inline-block w-[12px] h-[12px] rounded-full shrink-0 border-2 border-white/50\"\r\n style={{ backgroundColor: d.color }}\r\n />\r\n <div className=\"min-w-0 flex-1\">\r\n <span className=\"text-gray-900 text-[11px] md:text-[13px] font-semibold block truncate leading-tight\">\r\n {d[dataLabel]}\r\n </span>\r\n <div className=\"flex items-center gap-1 text-xs text-gray-600 font-medium\">\r\n <span>{displayValue}</span>\r\n <span>{((actualValue / total) * 100).toFixed(1)}%</span>\r\n {d.isBoosted && (\r\n <span className=\"text-[9px] px-1 py-0.5 bg-blue-100 text-blue-700 rounded-full\">\r\n min\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }, [chartData, data, dataLabel, dataKey, total, showLegends]);\r\n\r\n if (!mounted) return null;\r\n\r\n if (effectiveLoading || data.length === 0) {\r\n return (\r\n <div\r\n className={`relative flex flex-col items-center w-full h-[300px] md:h-[400px] bg-gradient-to-br from-gray-50 to-gray-100 rounded-xl p-6 ${className}`}\r\n style={style}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/60 to-transparent animate-shimmer rounded-xl\" />\r\n\r\n <div className=\"mt-6 text-center\">\r\n <div className=\"inline-flex items-center space-x-2 bg-white/80 px-6 py-2 rounded-full backdrop-blur-sm border border-gray-200 shadow-lg\">\r\n <div className=\"w-5 h-5 border-2 border-gray-300 border-t-blue-400 rounded-full animate-spin\" />\r\n <span className=\"text-sm font-medium text-gray-600 bg-gradient-to-r from-gray-300 bg-clip-text animate-pulse\">\r\n Loading chart data...\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex flex-wrap justify-center gap-3 mt-8 w-full max-w-4xl\">\r\n {[...Array(18)].map((_, idx) => (\r\n <div\r\n key={idx}\r\n className={`h-10 w-[48%] sm:w-[32%] md:w-32 rounded-xl bg-gradient-to-r from-gray-200 via-gray-300/50 to-gray-200 p-3 flex items-center space-x-3 animate-slide-up stagger-${idx} shadow-sm border border-gray-200/50`}\r\n >\r\n <div className=\"w-4 h-4 rounded-full bg-gradient-to-r from-blue-300 to-purple-300 animate-pulse\" />\r\n <div className=\"flex-1 space-y-1\">\r\n <div className=\"h-3 w-20 bg-gray-300 rounded animate-pulse\" />\r\n <div className=\"h-2.5 w-16 bg-gray-200/60 rounded animate-pulse-delayed\" />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const { inner, outer } = getDynamicRadius();\r\n const innerRadius = inner;\r\n const outerRadius = outer;\r\n\r\n return (\r\n <div className={`relative flex flex-col items-center ${className}`} style={style}>\r\n <div className=\"relative w-full md:w-[75%] h-[280px] md:h-[380px] flex items-center justify-center mb-2\">\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <PieChart>\r\n <Pie\r\n data={chartData}\r\n cx=\"50%\"\r\n cy=\"50%\"\r\n innerRadius={innerRadius}\r\n outerRadius={outerRadius}\r\n dataKey={dataKey as string}\r\n labelLine={false}\r\n isAnimationActive={true}\r\n animationDuration={800}\r\n minAngle={3}\r\n >\r\n {chartData.map((entry: any, index: number) => (\r\n <Cell\r\n key={`cell-${index}`}\r\n fill={entry.color}\r\n stroke={entry.isBoosted ? '#fff' : 'transparent'}\r\n strokeWidth={entry.isBoosted ? 1.5 : 0}\r\n />\r\n ))}\r\n </Pie>\r\n <Tooltip\r\n formatter={(value: number, name: string, payload) => {\r\n const label = payload && payload.payload ? payload.payload[dataLabel] : name;\r\n const actualItem = data.find((item: any) => item[dataLabel] === label);\r\n const actualValue = actualItem ? actualItem[dataKey] : value;\r\n\r\n const valueFormatted = actualValue >= 1000\r\n ? `${(actualValue / 1000).toFixed(0)}k`\r\n : actualValue.toLocaleString();\r\n const percentage = ((actualValue / total) * 100).toFixed(1);\r\n\r\n return [\r\n `${label}: ${valueFormatted} (${percentage}%)`,\r\n ];\r\n }}\r\n contentStyle={{\r\n backgroundColor: 'white',\r\n border: '1px solid #e5e7eb',\r\n borderRadius: '8px',\r\n fontSize: '13px',\r\n padding: '8px 12px'\r\n }}\r\n />\r\n </PieChart>\r\n </ResponsiveContainer>\r\n\r\n {total > 0 && (\r\n <div className={`absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-center pointer-events-none ${forceMobile ? 'text-xl px-2' : 'text-3xl px-4'} font-bold bg-white/90 backdrop-blur-sm rounded-full py-1 shadow-lg`}>\r\n <div className=\"text-[#1f2937] leading-tight\">\r\n {formattedTotal}\r\n <span className=\"text-sm md:text-base font-normal text-gray-600 block md:inline-block md:ml-1\">\r\n total\r\n </span>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {renderLegends}\r\n </div>\r\n );\r\n};\r\n\r\nexport default React.memo(DonutChart);\r\n","import { EmailComposerProps } from '@/types/global';\r\nimport TinyMceEditor from '../Global/TinyMceEditor';\r\n\r\nexport default function EmailComposer({ className, style, to, setTo, showCc, setShowCc, showBcc, setShowBcc, cc, setCc, bcc, setBcc, subject, setSubject, body, setBody }: EmailComposerProps) {\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className=\"border rounded-md shadow bg-[#fff] p-4 mx-auto z-[50] relative\">\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"email\"\r\n placeholder=\"From\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n required\r\n />\r\n </div>\r\n <div className=\"mb-3\">\r\n <div className=\"flex items-center gap-2\">\r\n <input\r\n type=\"email\"\r\n value={to}\r\n onChange={(e) => setTo?.(e.target.value)}\r\n placeholder=\"To\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n required\r\n />\r\n {!showCc && (\r\n <button\r\n onClick={() => setShowCc?.(true)}\r\n className=\"px-3 py-1 border rounded-md text-sm hover:bg-gray-100 bg-[#E9E9E9] text-[#383838]\"\r\n >\r\n Cc\r\n </button>\r\n )}\r\n {!showBcc && (\r\n <button\r\n onClick={() => setShowBcc?.(true)}\r\n className=\"px-3 py-1 border rounded-md text-sm hover:bg-gray-100 bg-[#E9E9E9] text-[#383838]\"\r\n >\r\n Bcc\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n {showCc && (\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"text\"\r\n value={cc}\r\n onChange={(e) => setCc?.(e.target.value)}\r\n placeholder=\"Cc\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n />\r\n </div>\r\n )}\r\n {showBcc && (\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"text\"\r\n value={bcc}\r\n onChange={(e) => setBcc?.(e.target.value)}\r\n placeholder=\"Bcc\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Subject */}\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"text\"\r\n value={subject}\r\n onChange={(e) => setSubject?.(e.target.value)}\r\n placeholder=\"Subject\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n />\r\n </div>\r\n <div className=\"mb-4\">\r\n <TinyMceEditor value={body} onChange={setBody} />\r\n </div>\r\n <div className=\"flex justify-end gap-2\">\r\n <button className=\"px-4 py-2 rounded-md text-gray-600 hover:bg-gray-100\">\r\n Discard\r\n </button>\r\n <button className=\"px-4 py-2 rounded-md border text-[#12715B] border-[#12715B]\">\r\n Reset\r\n </button>\r\n <button className=\"px-4 py-2 rounded-md bg-[#12715B] text-white\">\r\n Send\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}","import { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAiC;AAEjC,kCAAwB;AACxB,+BAAgC;;;ACHhC,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;AAEO,SAAS,YAAY,MAAc;AACxC,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,EAAE,OAAO,CAAC;AAAA,EAC1B;AACA,SAAO,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,EAAE,OAAO,CAAC;AAC/C;;;ACdA,uBAAqB;AAOrB,IAAM,SAAgC,CAAC,EAAE,UAAU,UAAU,MAAM;AAEjE,QAAM,SAAS,aAAa,SAAS;AAErC,SAAO,iBAAAA,QAAS,aAAa,UAAU,MAAM;AAC/C;AAEA,IAAO,iBAAQ;;;AF8DD;AA1DC,SAAR,MAAuB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,QAAQ,CAAC;AACX,GAAe;AACb,8BAAU,MAAM;AACd,QAAI,UAAU,aAAa;AACzB,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,8BAAU,MAAM;AACd,UAAM,eAAe,CAAC,MAAqB;AACzC,UAAI,EAAE,QAAQ,UAAU;AACtB,uBAAe;AAAA,MACjB;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,eAAS,iBAAiB,WAAW,YAAY;AACjD,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,YAAY;AACpD,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE,4CAAC,kBACC,sDAAC,SAAI,WAAU,mEACb,sDAAC,SAAI,WAAU,oEACb;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,GAAG,YAAY,IAAI,CAAC;AAAA,MACtB;AAAA,MACA;AAAA,MAGE;AAAA,kBAAS,oBACT,6CAAC,SAAI,WAAU,4FACZ;AAAA,mBACC,4CAAC,QAAG,WAAU,uDACX,iBACH;AAAA,UAED,mBACC;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cACV,cAAW;AAAA,cAEX,sDAAC,4CAAgB,MAAM,qCAAS,WAAU,WAAU;AAAA;AAAA,UACtD;AAAA,WAEJ;AAAA,QAEF,4CAAC,SAAI,WAAU,kEACZ,UACH;AAAA;AAAA;AAAA,EACF,GACF,GACF,GACF;AAEJ;;;AGjGI,IAAAC,sBAAA;AAJJ,IAAM,OAAO,CAAC;AAAA,EACZ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAO,GAAG;AACjC,MAAoB;AAClB,SACE,6CAAC,SAAK,GAAG,OAAO,WAAsB,OACnC,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACNX,IAAAC,sBAAA;AAJJ,IAAM,OAAO,CAAC;AAAA,EACZ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAO,GAAG;AACjC,MAAoB;AAClB,SACE,6CAAC,SAAK,GAAG,OAAO,WAAsB,OACnC,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACNX,IAAAC,sBAAA;AAJJ,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EAAU;AAAA,EAAW;AAAA,EAAO,GAAG;AACjC,MAAoB;AAClB,SACE,6CAAC,SAAK,GAAG,OAAO,WAAsB,OACnC,UACH;AAEJ;AAEA,IAAO,oBAAQ;;;ACZf,IAAAC,gBAAgC;AAgB1B,IAAAC,sBAAA;AAZN,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EAAU,OAAO;AAAA,EAAa;AAAA,EAAO;AACvC,MAAsB;AAEpB,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAE1C,QAAM,mBAAmB,MAAM;AAC7B,cAAU,UAAQ,CAAC,IAAI;AAAA,EACzB;AAEA,SACE,8CAAC,SAAI,WAAW,2CAA2C,SAAS,eAAe,OAAO,EAAE,iBAAiB,OAAO,gBAAgB,GAClI;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,MAAK;AAAA,QAEL;AAAA,uDAAC,UAAK,WAAU,2BAA2B,gBAAK;AAAA,UAChD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,OAAO,OAAO,MAAM;AAAA,cAE5B,mBAAS,WAAM;AAAA;AAAA,UAClB;AAAA;AAAA;AAAA,IACF;AAAA,IACA,6CAAC,SAAI,WAAW,kDAAkD,SAAS,iBAAiB,6BAA6B,IACtH,UACH;AAAA,KACF;AAEJ;AAEA,IAAO,oBAAQ;;;AC9BX,IAAAC,sBAAA;AAJJ,IAAM,OAAO,CAAC;AAAA,EACZ;AACF,MAAoB;AAClB,SACE,6EACG,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACRX,IAAAC,sBAAA;AAFJ,IAAM,iBAAiB,CAAC,EAAE,UAAU,OAAO,UAAU,MAAoB;AACvE,SACE,6CAAC,SAAI,WAAsB,OACxB,UACH;AAEJ;AAEA,IAAO,yBAAQ;;;ACDX,IAAAC,sBAAA;AALW,SAAR,QAAyB;AAAA,EAC9B;AAAA,EAAU;AAAA,EAAO;AAAA,EAAW;AAAA,EAAW;AACzC,GAAiB;AAEf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,YAAY,SAAS,IAAI,cAAc,QAAQ,YAAY,QAAQ;AAAA,MAC9E;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACdA,IAAAC,gBAA6C;AAwBzC,IAAAC,sBAAA;AAtBW,SAAR,kBAAmC;AAAA,EACxC;AAAA,EAAU;AAAA,EAAO;AAAA,EAAW;AAAA,EAAM;AAAA,EAAW;AAC/C,GAAkB;AAChB,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,+BAAU,MAAM;AAEd,QAAI,QAAQ,KAAK,SAAS,KAAK,CAAC,aAAa,eAAe,CAAC,SAAS;AACpE,kBAAY,KAAK,CAAC,GAAG,KAAK;AAC1B,iBAAW,IAAI;AAAA,IACjB;AAAA,EAEF,GAAG,CAAC,MAAM,WAAW,aAAa,OAAO,CAAC;AAE1C,QAAM,mBAAe;AAAA,IACnB,MAAM,MAAM,QAAQ,IAAI,IACpB,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,eAAe,MAAM,EAAE,eAAe,EAAE,IACpE,CAAC;AAAA,IACL,CAAC,IAAI;AAAA,EACP;AAEA,SACE,8CAAC,SAAI,WAAsB,OACzB;AAAA,iDAAC,SAAI,WAAU,uCACZ,uBAAa,IAAI,CAAC,QACjB;AAAA,MAAC;AAAA;AAAA,QAEC,WAAS,IAAI;AAAA,QACb,WAAW,6EAA6E,cAAc,IAAI,QACtG,4BACA,cAAc;AAAA,QAClB,SAAS,MAAM,eAAe,YAAY,IAAI,KAAK;AAAA,QAElD,cAAI,QAAQ;AAAA;AAAA,MAPR,IAAI;AAAA,IAQX,CACD,GACH;AAAA,IACC;AAAA,KACH;AAEJ;;;AC5CA,IAAAC,gBAAkB;AA8BZ,IAAAC,uBAAA;AAjBN,SAAS,SAAY;AAAA,EACnB,OAAO,CAAC;AAAA,EACR;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAChB,GAAqB;AACnB,QAAM,OAAO,cAAAC,QAAM;AAAA,IACjB,MAAO,OAAO,UAAU,WAAW,KAAK,MAAM,GAAG,KAAK,IAAI;AAAA,IAC1D,CAAC,MAAM,KAAK;AAAA,EACd;AAEA,MAAI,SAAS;AACX,WACE,8CAAC,SAAI,WAAuB,uBAAY;AAAA,EAE5C;AAEA,MAAI,CAAC,KAAK,QAAQ;AAChB,WAAO,gBAAgB,+EAAG,yBAAc,IACtC,8CAAC,SAAI,WAAsB,kCAAoB;AAAA,EAEnD;AAEA,QAAM,UAAU,KAAK,IAAI,CAAC,MAAM,MAC9B,8CAAC,cAAAA,QAAM,UAAN,EAAwB,iBAAO,MAAM,GAAG,IAAI,KAAxB,CAA0B,CAChD;AAED,SAAO,UACL,+EAAG,kBAAQ,OAAO,GAAE,IAEpB,8CAAC,SAAI,WAAuB,mBAAQ;AAExC;AAEA,IAAO,mBAAQ,cAAAA,QAAM,KAAK,QAAQ;;;AClDlC,wBAAqB;AACrB,sCAAuC;AAgDnC,IAAAC,uBAAA;AA5CJ,IAAM,qBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OACE;AAAA,QACF,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,OAAO;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAGK;AACH,QAAM,OAAO,UAAU,yBAAO;AAE9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,MACzD,GAAG;AAAA;AAAA,EACN;AAEJ;;;AC3CI,IAAAC,uBAAA;AAVJ,IAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,GAAG;AACL,MAAmB;AAEjB,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,UAAU,MAAM,YAAY;AAAA,MAE3B,oBAAU,cAAc;AAAA;AAAA,EAC3B;AAEJ;AAEA,IAAO,iBAAQ;;;ACvBf,IAAAC,gBAAiC;AAEjC,wBAA0B;;;ACH1B,mBAAkB;AAClB,IAAAC,gBAAyB;AAkBlB,SAAS,eAAe,SAAmD;AAEhF,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAc,IAAI;AAC5C,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAc,IAAI;AAG1C,QAAM,aAAa,OAAO,MAAY,SAA8B,CAAC,MAAM;AACzE,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AACF,YAAM,WAAW,IAAI,SAAS;AAC9B,eAAS,OAAO,QAAQ,IAAI;AAC5B,aAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,iBAAS,OAAO,KAAK,KAAe;AAAA,MACtC,CAAC;AAED,YAAM,cAAc,QAAQ,iBAAiB,aAAAC;AAC7C,YAAM,SAAS,QAAQ,UAAU;AAEjC,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,MAAM,IAAI,UAAU;AAAA,QAC3D,iBAAiB;AAAA,MACnB,CAAC;AAED,cAAQ,MAAM;AACd,UAAI,OAAO,WAAW,KAAK;AACzB,iBAAS,YAAY,OAAO,IAAI;AAAA,MAClC,OAAO;AACL,cAAM,MAAM,IAAI,MAAM,4BAA4B,OAAO,MAAM,EAAE;AACjE,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IAET,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,eAAS,UAAU,GAAG;AACtB,YAAM;AAAA,IACR,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,eAAe,OAAO,QAAgB,KAAa,cAAuB;AAC9E,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AAEF,YAAM,cAAc,QAAQ,iBAAiB,aAAAA;AAC7C,YAAM,SAAS;AAEf,YAAM,SAAS,MAAM,YAAY,IAAI,GAAG,MAAM,WAAW,mBAAmB,MAAM,CAAC,QAAQ,mBAAmB,GAAG,CAAC,GAAG,YAAY,cAAc,SAAS,KAAK,EAAE,IAAI;AAAA,QACjK,iBAAiB;AAAA,MACnB,CAAC;AAED,cAAQ,MAAM;AACd,UAAI,OAAO,WAAW,KAAK;AACzB,iBAAS,YAAY,OAAO,IAAI;AAAA,MAClC,OAAO;AACL,cAAM,MAAM,IAAI,MAAM,4BAA4B,OAAO,MAAM,EAAE;AACjE,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,eAAS,UAAU,GAAG;AACtB,YAAM;AAAA,IACR,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,YAAY,OAAO,QAAgB,QAAgB;AACvD,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AACF,YAAM,cAAc,QAAQ,iBAAiB,aAAAA;AAC7C,YAAM,SAAS;AAEf,YAAM,SAAS,MAAM,YAAY,IAAI,GAAG,MAAM,WAAW,mBAAmB,MAAM,CAAC,QAAQ,mBAAmB,GAAG,CAAC,IAAI;AAAA,QACpH,iBAAiB;AAAA,MACnB,CAAC;AAED,cAAQ,MAAM;AACd,UAAI,OAAO,WAAW,KAAK;AACzB,iBAAS,YAAY,OAAO,IAAI;AAAA,MAClC,OAAO;AACL,cAAM,MAAM,IAAI,MAAM,4BAA4B,OAAO,MAAM,EAAE;AACjE,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,eAAS,UAAU,GAAG;AACtB,YAAM;AAAA,IACR,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADpEQ,IAAAC,uBAAA;AAnDR,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAkB;AAEhB,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AAEA,QAAM,cAAc;AACpB,QAAM,MAAM,YAAY;AACxB,QAAM,eAAW,sBAAgC,IAAI;AACrD,QAAM,aAAS,6BAAU;AACzB,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAE1C,QAAM,eAAe,MAAM;AACzB,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,QAAM,EAAE,WAAW,IAAI,eAAe;AAAA,IACpC,eAAe,MAAM;AAAA,IACrB;AAAA,IACA,WAAW,OAAO,WAAW;AAC3B,UAAI,CAAC,QAAQ,MAAM,OAAO,CAAC,MAAM,WAAW;AAC1C,kBAAU,KAAK;AACf;AAAA,MACF;AACA,YAAM,YAAY,EAAE,KAAK,OAAO,KAAK,OAAO,IAAI,UAAU,OAAO,KAAK,gBAAgB,GAAG,CAAC;AAC1F,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF,CAAC;AAED,QAAM,eAAe,OACnB,MACG;AACH,UAAM,OAAO,EAAE,OAAO,QAAQ,CAAC;AAC/B,QAAI,CAAC,KAAM;AACX,cAAU,IAAI;AACd,eAAW,MAAM;AAAA,MACf,KAAK,KAAK;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ;AACV,WACE,8CAAC,SAAI,WAAU,oCACb,wDAAC,SAAI,WAAU,kFAAiF,GAClG;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,MAAM,eAAe,eAAe;AAAA,MAC7C,MAAK;AAAA,MACL,WAAW,MAAM,eAAe,mBAAmB;AAAA,MAEnD;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YAAK,KAAK;AAAA,YAAS,WAAW;AAAA,YAAiB;AAAA;AAAA,QACtD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,MAAK;AAAA,YACL,QAAO;AAAA,YACP,WAAU;AAAA,YACV,UAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gBAAQ;;;AE5EX,IAAAC,uBAAA;AAPJ,IAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAoB;AAElB,SACE,8CAAC,SAAI,WAAsB,OACxB,UACH;AAEJ;AAEA,IAAO,gBAAQ;;;ACff,IAAAC,gBAAkB;AAKlB,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AACrB,QAAM,MAAM,WAAW;AAEvB,SAAO,cAAAC,QAAM;AAAA,IACX;AAAA,IACA;AAAA,MACE;AAAA,MACA,WAAW,GAAG,WAAW,qBAAqB;AAAA,MAC9C;AAAA,IACF;AAAA,IACA;AAAA,MACE,cAAAA,QAAM,cAAc,QAAQ;AAAA,QAC1B,KAAK;AAAA,QACL,WAAW;AAAA,QACX,yBAAyB,EAAE,QAAQ,eAAe,KAAK;AAAA,MACzD,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAO,qBAAQ;;;AC9Bf,0BAA6B;AAE7B,kBAAiB;AAaP,IAAAC,uBAAA;AAXV,IAAM,aAAa,CAAC,EAAE,OAAO,CAAC,GAAG,WAAW,MAAM,MAAuB;AACvE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,WAAW,GAAG,mDAAmD,SAAS;AAAA,MAC1E;AAAA,MAEC,eAAK,IAAI,CAAC,MAAmD,UAAkB;AAC9E,cAAM,SAAS,UAAU,KAAK,SAAS;AAEvC,eACE,+CAAC,SAAkB,WAAU,qBAC1B;AAAA,eAAK,OAAO,CAAC,SACZ;AAAA,YAAC,YAAAC;AAAA,YAAA;AAAA,cACC,MAAM,KAAK;AAAA,cACX,WAAU;AAAA,cAET,eAAK;AAAA;AAAA,UACR,IAEA,8CAAC,UAAK,WAAU,+BAA+B,eAAK,QAAO;AAAA,UAG5D,CAAC,UACA,8CAAC,oCAAa,WAAU,sCAAqC;AAAA,aAbvD,KAAK,EAef;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,qBAAQ;;;ACtCf,IAAAC,uBAA4B;AAC5B,IAAAC,eAAiB;;;ACCjB,4BAAuC;AACvC,IAAAC,uBAAwD;AAO/C,IAAAC,uBAAA;AAHT,SAAS,aAAa;AAAA,EACpB,GAAG;AACL,GAA4D;AAC1D,SAAO,8CAAuB,4BAAtB,EAA2B,aAAU,iBAAiB,GAAG,OAAO;AAC1E;AAUA,SAAS,oBAAoB;AAAA,EAC3B,GAAG;AACL,GAA+D;AAC7D,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACT,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA,aAAa;AAAA,EACb,GAAG;AACL,GAA+D;AAC7D,SACE,8CAAuB,8BAAtB,EACC;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ;AAUA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAGG;AACD,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAmFA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,GAAiE;AAC/D,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6BAA6B,SAAS;AAAA,MACnD,GAAG;AAAA;AAAA,EACN;AAEJ;AAkBA,SAAS,gBAAgB;AAAA,EACvB,GAAG;AACL,GAA2D;AACzD,SAAO,8CAAuB,2BAAtB,EAA0B,aAAU,qBAAqB,GAAG,OAAO;AAC7E;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAC,yCAAiB,WAAU,kBAAiB;AAAA;AAAA;AAAA,EAC/C;AAEJ;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AD3NM,IAAAC,uBAAA;AANS,SAAR,YAA6B,EAAE,OAAO,aAAa,WAAW,OAAO,CAAC,GAAG,kBAAkB,QAAQ,GAAqB;AAC7H,QAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC3C,QAAM,UAAU,OAAO,mBAAmB;AAE1C,SACE,+CAAC,SAAI,WAAW,uGAAuG,OAAO,EAAE,iBAAiB,QAAQ,GACvJ;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,0DAA0D,aAAa,EAAE;AAAA,QACpF,OAAO,EAAE,iBAAiB,QAAQ;AAAA,QAClC,SAAS,CAAC,MAAM,UAAU,CAAC;AAAA,QAE1B,yBAAe;AAAA;AAAA,IAClB;AAAA,IACA,+CAAC,gBACC;AAAA,oDAAC,uBAAoB,SAAO,MAC1B;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,cAAW;AAAA,UACX,OAAO,EAAE,iBAAiB,QAAQ;AAAA,UAElC,wDAAC,oCAAY,WAAU,WAAU;AAAA;AAAA,MACnC,GACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,WAAU;AAAA,UAET,eAAK,IAAI,CAAC,SACT;AAAA,YAAC;AAAA;AAAA,cACe,WAAU;AAAA,cAAa,UAAU,MAAM,mBAAmB;AAAA,gBACtE;AAAA,cACF,CAAC;AAAA,cAED,wDAAC,aAAAC,SAAA,EAAK,MAAM,KAAK,OAAO,KAAM,eAAK,QAAO;AAAA;AAAA,YAJrC,KAAK;AAAA,UAKZ,CACD;AAAA;AAAA,MACH;AAAA,OACF;AAAA,KACF;AAEJ;;;AEpDA,IAAAC,gBAA+D;AAG/D,iBAA4B;AAC5B,mBAA8B;AAC9B,iBAA4B;AAE5B,IAAAC,4BAAgC;AAChC,kBAA6B;AAoFvB,IAAAC,uBAAA;AA/CS,SAAR,KAAsB,OAAkB;AAC7C,QAAM;AAAA,IACJ,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAc,QAAQ,IAAI;AAEhE,iBAAe,WAAW,UAAkBC,SAAgB;AAE1D,UAAM,SAA8B;AAAA,MAClC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAEA,UAAM,cAAc,OAAOA,OAAM,KAAK;AACtC,WAAO,YAAY,QAAQ,KAAK;AAAA,EAClC;AAEA,+BAAU,MAAM;AACd,QAAI,QAAS,YAAY,iBAAkB,QAAQ;AACjD,iBAAW,MAAM,MAAM,EAAE,KAAK,CAAC,QAAQ,eAAe,GAAG,CAAC;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,SAAS,MAAM,MAAM,CAAC;AAG1B,MAAI,YAAY,UAAU;AACxB,UAAM,OAAQ,YAAoB,IAAI;AACtC,QAAI,CAAC,MAAM;AACT,cAAQ,KAAK,0BAA0B,IAAI,EAAE;AAC7C,aAAO;AAAA,IACT;AAEA,UAAM,cACJ,OAAO,aAAa,WAAW,WAAW,SAAS,UAAoB,EAAE,KAAK;AAEhF,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,WAAW;AAAA,UACT;AAAA,UACA,MAAM,UAAU,mBAAmB;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAa,QAAQ,SAAY;AAAA,QACjC,SAAS,MAAM,MAAM,UAAU;AAAA,QAC9B,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAGA,MAAI,YAAY,eAAe;AAC7B,QAAI,CAAC,YAAa,QAAO;AACzB,UAAM,YAAY,EAAE,GAAG,MAAM;AAC7B,WAAO,UAAU;AACjB,WAAO,UAAU;AACjB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,MAAM,OAAO,aAAa,WAAW,WAAW;AAAA,QAChD;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,UACT;AAAA,UACA,MAAM,UAAU,mBAAmB;AAAA,QACrC;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,GAAG;AAAA,QACL;AAAA,QACA,SAAS,MAAM,MAAM,UAAU;AAAA;AAAA,IACjC;AAAA,EAEJ;AAGA,MAAI,YAAY,QAAQ,YAAY,UAAU;AAC5C,UAAM,YACJ,OAAO,aAAa,WAAW,EAAE,UAAU,SAAS,IAAI,CAAC;AAE3D,UAAM,MAAM;AAAA,MACV,GAAG,MAAM,OAAO,IAAI;AAAA,MACpB,OAAO,YAAY;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,aAAa,UAAU;AAAA,MACvB;AAAA,IACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO,EAAE,GAAG,WAAW,GAAG,MAAM;AAAA,QAChC;AAAA,QACA,eAAa,QAAQ,SAAY;AAAA,QACjC,SAAS,MAAM,MAAM,UAAU;AAAA,QAC9B,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,UAAQ,KAAK,qBAAqB,OAAO;AACzC,SAAO;AACT;;;ACjKA,IAAAC,gBAA0B;;;ACKtB,IAAAC,uBAAA;AAFJ,SAAS,MAAM,EAAE,WAAW,MAAM,GAAG,MAAM,GAAkC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ADmBI,IAAAC,uBAAA;AA/BJ,IAAM,YAAY,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAsB;AAEpE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,+BAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,MAAM,MAAM;AAAA,QACZ,IAAI,MAAM,QAAQ;AAAA,QAClB,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,oBAAQ;;;AE9Df,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA/BJ,IAAM,cAAc,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAwB;AAExE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,MAAM,QAAQ,EAAE;AAAA,EACtC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,sBAAQ;;;AClEf,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA9BJ,IAAM,aAAa,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAuB;AACtE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,MAAM,MAAM;AAAA,QACZ,IAAI,MAAM,QAAQ;AAAA,QAClB,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,qBAAQ;;;AClEf,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA/BJ,IAAM,gBAAgB,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA0B;AAE5E,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,wBAAQ;;;AClEf,IAAAC,iBAA0B;;;ACKtB,IAAAC,uBAAA;AAFJ,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAqC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ADcI,IAAAC,uBAAA;AAtBJ,IAAMC,YAAW,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAqB;AAClE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA8C;AAClE,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,SACE,gFACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,QACJ,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM,SAAS;AAAA,QACtB,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQA;;;AEtDf,IAAAC,iBAA0B;AAmCtB,IAAAC,uBAAA;AA9BJ,IAAM,WAAW,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAqB;AAClE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,mDAAC,SAAI,WAAU,4CACb;AAAA,oDAAC,SAAI,WAAU,uJAAsJ,sBAErK;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,MAAM,MAAM,aAAa;AAAA,UACzB,MAAM,MAAM;AAAA,UACZ,OAAO,YAAY,MAAM,KAAK;AAAA,UAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,UAE1D,OAAO;AAAA,YACL,GAAG;AAAA,YACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,UACvD;AAAA,UACA,cAAc,iBAAiB,OAAO;AAAA,UACtC;AAAA,UACA,UAAU;AAAA,UACV,UAAU,cAAc,CAAC;AAAA,UACzB,UAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQ;;;ACnEf,IAAAC,iBAA0B;;;ACA1B,wBAAmC;AACnC,IAAAC,uBAA0B;AAqBlB,IAAAC,uBAAA;AAjBR,SAAS,SAAS;AAAA,EAChB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE;AAAA,IAAmB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAmB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,wDAAC,kCAAU,WAAU,YAAW;AAAA;AAAA,MAClC;AAAA;AAAA,EACF;AAEJ;;;AC1BA,qBAAgC;AAS5B,IAAAC,uBAAA;AALJ,SAASC,OAAM;AAAA,EACb;AAAA,EACA,GAAG;AACL,GAAqD;AACnD,SACE;AAAA,IAAgB;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AFeI,IAAAC,uBAAA;AA5BJ,IAAM,gBAAgB,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA0B;AAC5E,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,QAAM,OAAO,MAAM,OAAO,MAAM,OAAO;AAEvC,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,OAAO,UAAU,WAAW;AAC9B,aAAO;AAAA,IACT;AACA,QAAI,UAAU,UAAU,UAAU,KAAK;AACrC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,gCAAU,MAAM;AAEd,QAAI,MAAM,OAAO;AACf,mBAAa,YAAY,MAAM,KAAK,CAAC;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAmB;AACvC,UAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EAC3C;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB,yDAAC,SAAI,WAAU,+BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,SAAS,YAAY,MAAM,KAAK;AAAA,UAChC,iBAAiB;AAAA,UACjB,UAAU,CAAC,cAAc;AAAA;AAAA,MAC3B;AAAA,MACA,8CAACC,QAAA,EAAM,SAAS,MAAM,QAAQ,YAAa,gBAAK;AAAA,OAClD,GACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQ;;;AGpDf,IAAAC,iBAA0B;;;ACA1B,0BAAqC;AACrC,IAAAC,uBAA2B;AASvB,IAAAC,uBAAA;AALJ,SAASC,YAAW;AAAA,EAClB;AAAA,EACA,GAAG;AACL,GAA0D;AACxD,SACE;AAAA,IAAqB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,cAAc,SAAS;AAAA,MACpC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,GAAG;AACL,GAA0D;AACxD,SACE;AAAA,IAAqB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAqB;AAAA,QAApB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,wDAAC,mCAAW,WAAU,mFAAkF;AAAA;AAAA,MAC1G;AAAA;AAAA,EACF;AAEJ;;;ADEI,IAAAC,uBAAA;AA/BJ,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO,CAAC;AAAA,EACR;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AACrB,QAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC3C,QAAM,WAAqB,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAe;AAAA,IACzD,OAAO,KAAK,WAAW,OAAO;AAAA,IAC9B,OAAO,KAAK,aAAa,OAAO;AAAA,EAClC,EAAE;AAEF,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAkB;AACtC,eAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EACrC;AAGA,QAAM,wBAAwB,OAAO,iBAAiB,WAAW,eAAe,WAAc,QAAQ,CAAC,GAAG;AAE1G,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,cAAc;AAAA,QACd,eAAe;AAAA,QAGb;AAAA,kBAAQ,WAAW,KACjB,8CAAC,SAAI,WAAU,yBAAwB,kCAAoB;AAAA,UAG9D,QAAQ,IAAI,CAAC,SACZ,+CAAC,SAAI,WAAU,+BACb;AAAA,0DAAC,kBAAe,OAAO,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,IAAI;AAAA,YAC9D,8CAACC,QAAA,EAAM,SAAS,SAAS,KAAK,KAAK,IAAK,eAAK,OAAM;AAAA,eAFH,KAAK,KAGvD,CACD;AAAA;AAAA;AAAA,IACH,GACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,qBAAQ;;;AElEf,IAAAC,iBAAyD;AAmJjD,IAAAC,uBAAA;AA1IO,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA;AAAA,EACA,OAAO,CAAC;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4B;AAC1B,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAmB,CAAC,CAAC;AACnD,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,IAAI;AAC3C,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AAEpD,QAAM,kBAAc,uBAAuB,IAAI;AAE/C,QAAM,iBAAiB,CAAC,QAAuB;AAC7C,QAAI,CAAC,IAAK,QAAO,CAAC;AAClB,QAAI,MAAM,QAAQ,GAAG,EAAG,QAAO;AAC/B,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,IAAI,SAAS,GAAG,EAAG,QAAO,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAChE,UAAI,IAAI,SAAS,GAAG,EAAG,QAAO,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAChE,aAAO,CAAC,IAAI,KAAK,CAAC;AAAA,IACpB;AACA,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAW,eAAe,KAAK;AAErC,QAAM,gBAAgB,CAAC,QAAkB;AACvC,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO,IAAI,KAAK,GAAG;AAAA,MACrB,KAAK;AACH,eAAO,IAAI,KAAK,GAAG;AAAA,MACrB;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,mBAAe,4BAAY,YAAY;AAC3C,QAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,UAAM,SAAS,kBAAkB,MAAM,OAAO,OAAO,GAAG;AACxD,UAAM,MAAM,MAAM,OAAO,IAAI,QAAQ;AAAA,MACnC,QAAQ,EAAE,MAAM,OAAO,SAAS;AAAA,MAChC,iBAAiB;AAAA,IACnB,CAAC;AACD,QAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,aAAO,IAAI,KAAK;AAAA,IAClB;AACA,WAAO,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC;AAAA,EAC/C,GAAG,CAAC,QAAQ,eAAe,MAAM,QAAQ,CAAC;AAE1C,QAAM,cAAU;AAAA,IACd,CAAC,UAAiB;AAChB,UAAI,MAAM,QAAQ,KAAK,MAAM,MAAO,QAAO,CAAC;AAC5C,cAAQ,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,QAClC,OAAO,KAAK,OAAO;AAAA,QACnB,OAAO,KAAK,SAAS;AAAA,MACvB,EAAE;AAAA,IACJ;AAAA,IACA,CAAC,SAAS,SAAS;AAAA,EACrB;AAEA,QAAM,eAAW,4BAAY,YAAY;AACvC,QAAI,WAAW,MAAO;AACtB,QAAI,YAAa;AAEjB,mBAAe,IAAI;AAEnB,QAAI;AACF,YAAM,WAAW,MAAM,aAAa;AACpC,YAAM,SAAS,QAAQ,QAAQ;AAE/B,iBAAW,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC,UAAI,SAAS,SAAS,UAAU;AAC9B,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF,UAAE;AACA,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,QAAQ,aAAa,cAAc,SAAS,QAAQ,CAAC;AAEzD,gCAAU,MAAM;AACd,QAAI,WAAW,OAAO;AACpB,iBAAW,CAAC,CAAC;AACb,cAAQ,CAAC;AACT,iBAAW,IAAI;AAAA,IACjB,OAAO;AACL,iBAAW,QAAQ,IAAI,CAAC;AACxB,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC;AAEjC,gCAAU,MAAM;AACd,QAAI,WAAW,MAAO,UAAS;AAAA,EACjC,GAAG,CAAC,MAAM,MAAM,CAAC;AAEjB,gCAAU,MAAM;AACd,QAAI,WAAW,MAAO;AACtB,QAAI,CAAC,WAAW,YAAa;AAE7B,UAAM,WAAW,IAAI,qBAAqB,CAAC,YAAY;AACrD,UAAI,QAAQ,CAAC,EAAE,gBAAgB;AAC7B,gBAAQ,CAAC,SAAS,OAAO,CAAC;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,QAAI,YAAY,QAAS,UAAS,QAAQ,YAAY,OAAO;AAC7D,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,QAAQ,SAAS,WAAW,CAAC;AAEjC,QAAM,SAAS,CAAC,QAAgB;AAC9B,QAAI,MAAM,cAAc,MAAM,WAAY;AAE1C,UAAM,UAAU,SAAS,SAAS,GAAG,IACjC,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,IAChC,CAAC,GAAG,UAAU,GAAG;AAErB,eAAW,cAAc,OAAO,GAAG,MAAM,QAAQ,EAAE;AAEnD,qBAAiB;AAAA,MACf,QAAQ,OAAO,CAAC,QAAQ,CAAC,QAAQ,SAAS,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;AAAA,IAC9E,GAAG,MAAM,QAAQ,EAAE;AAAA,EACrB;AAEA,SACE,+CAAC,SAAI,WAAW,GAAG,8CAA8C,SAAS,GAAG,OAC1E;AAAA,YAAQ,WAAW,KAAK,CAAC,eAAe,CAAC,WACxC,8CAAC,SAAI,WAAU,0CAAyC,mCAAqB;AAAA,IAE9E,QAAQ,IAAI,CAAC,KAAK,UAAU;AAC3B,YAAM,WAAW,CAAC,CAAC,MAAM;AACzB,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAW;AAAA,YACT;AAAA,YACA,YAAY;AAAA,UACd;AAAA,UAEA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;AAAA,gBACpD,SAAS,SAAS,SAAS,IAAI,KAAK;AAAA,gBACpC,iBAAiB,MAAM,OAAO,IAAI,KAAK;AAAA,gBACvC,UAAU,MAAM,cAAc,MAAM;AAAA,gBACpC,WAAW;AAAA,kBACT,YAAY;AAAA,gBACd;AAAA;AAAA,YACF;AAAA,YACA;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,IAAI,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;AAAA,gBACpD,WAAW,GAAG,YAAY,cAAc;AAAA,gBACxC,SAAS,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;AAAA,gBACzD,cAAI;AAAA;AAAA,YAAM;AAAA;AAAA;AAAA,QAnBP,GAAG,KAAK,IAAI,IAAI,KAAK;AAAA,MAoB5B;AAAA,IAEJ,CAAC;AAAA,IAEA,WAAW,SAAS,WAAW,8CAAC,SAAI,KAAK,aAAa,WAAU,OAAM;AAAA,KAErE,eAAe,YACf,8CAAC,SAAI,WAAU,0CAAyC,2BAAQ;AAAA,IAGjE,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;;;AC7LA,IAAAC,iBAA0B;;;ACC1B,IAAAC,iBAAgC;AAEhC,2BAAuB;AAqCnB,IAAAC,uBAAA;AAnCW,SAAR,SAA0B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,gBAAY,uBAAY,IAAI;AAElC,WAAS,YAAY,MAAsB;AACzC,UAAM,cAAc,KAAK,KAAK;AAC9B,QAAI,CAAC,YAAa,QAAO;AACzB,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,YAAY;AAChB,UAAM,aAAa,IAAI;AACvB,QAAI,IAAI,sBAAsB,KAAK,YAAY,YAAY,KAAK;AAC9D,aAAO,WAAW;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,uBAAmB,wBAAQ,MAAM;AACrC,QAAI,UAAU;AACd,QAAI,WAAW;AACb,gBAAU;AAAA,IAIZ;AACA,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,CAAC;AAEd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ,QAAQ,IAAI;AAAA,MACpB,kBAAkB,QAAQ,IAAI;AAAA,MAC9B,QAAQ,CAAC,MAAM,WAAY,UAAU,UAAU;AAAA,MAC/C;AAAA,MACA,YAAW;AAAA,MACX,MAAM;AAAA,QACJ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,mBAAmB;AAAA,QACnB,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAKjB;AAAA,MACA,gBAAgB,CAAC,YAAY,WAAW,YAAY,OAAO,CAAC;AAAA;AAAA,EAC9D;AAEJ;;;AD7DI,IAAAC,uBAAA;AAbW,SAAR,SAA0B,EAAE,WAAW,OAAO,GAAG,MAAM,GAAuB;AACnF,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,YAAoB;AACxC,UAAM,WAAW,SAAS,OAAO,QAAQ,EAAE;AAAA,EAC7C;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,MAE1D,OAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,MACvD;AAAA,MAEA;AAAA,sDAAC,YAAc,UAAU,cAAc,OAAO,MAAM,SAAS,IAAI,WAAW,MAAM;AAAA,QACjF,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA;AAAA;AAAA,EAEjE;AAEJ;;;AEjCA,IAAAC,iBAA0B;;;ACA1B,sBAAiC;AACjC,IAAAC,uBAA0D;AAOjD,IAAAC,uBAAA;AAHT,SAAS,OAAO;AAAA,EACd,GAAG;AACL,GAAsD;AACpD,SAAO,8CAAiB,sBAAhB,EAAqB,aAAU,UAAU,GAAG,OAAO;AAC7D;AAQA,SAAS,YAAY;AAAA,EACnB,GAAG;AACL,GAAuD;AACrD,SAAO,8CAAiB,uBAAhB,EAAsB,aAAU,gBAAgB,GAAG,OAAO;AACpE;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAEG;AACD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAiB,sBAAhB,EAAqB,SAAO,MAC3B,wDAAC,wCAAgB,WAAU,qBAAoB,GACjD;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,GAAG;AACL,GAAyD;AACvD,SACE,8CAAiB,wBAAhB,EACC;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,aAAa,YACX;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,sDAAC,wBAAqB;AAAA,QACtB;AAAA,UAAiB;AAAA,UAAhB;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,aAAa,YACX;AAAA,YACJ;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA,8CAAC,0BAAuB;AAAA;AAAA;AAAA,EAC1B,GACF;AAEJ;AAeA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsD;AACpD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,sDAAC,UAAK,WAAU,8DACd,wDAAiB,+BAAhB,EACC,wDAAC,kCAAU,WAAU,UAAS,GAChC,GACF;AAAA,QACA,8CAAiB,0BAAhB,EAA0B,UAAS;AAAA;AAAA;AAAA,EACtC;AAEJ;AAeA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA,GAAG;AACL,GAAgE;AAC9D,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,wDAAC,sCAAc,WAAU,UAAS;AAAA;AAAA,EACpC;AAEJ;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,wDAAC,wCAAgB,WAAU,UAAS;AAAA;AAAA,EACtC;AAEJ;;;ACvKA,IAAAC,iBAAqD;AAErD,IAAAC,uBAA4B;;;ACJ5B,IAAAC,iBAAyD;AAEzD,IAAAC,gBAAkB;AAiCX,SAAS,gBAAgB,QAAgD;AAC9E,QAAM,CAAC,SAAS,UAAU,QAAI,yBAA+B,CAAC,CAAC;AAC/D,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,IAAI;AAC3C,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,QAAM,oBAAgB,uBAA8B,IAAI;AACxD,QAAM,iBAAa,uBAAc,CAAC,CAAC;AACnC,QAAM,gBAAY,uBAAO,MAAM;AAE/B,QAAM,YAAY,OAAO,YAAY;AAErC,gCAAU,MAAM;AACd,eAAW,CAAC,CAAC;AACb,YAAQ,CAAC;AACT,eAAW,IAAI;AAAA,EACjB,GAAG,CAAC,OAAO,MAAM,CAAC;AAElB,QAAM,gBAAgB,CAAC,UAAgC;AACrD,UAAM,OAAO,oBAAI,IAAI;AACrB,WAAO,MAAM,OAAO,CAAC,SAAS;AAC5B,UAAI,KAAK,IAAI,KAAK,KAAK,EAAG,QAAO;AACjC,WAAK,IAAI,KAAK,KAAK;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,gCAAU,MAAM;AACd,cAAU,UAAU;AAAA,EACtB,GAAG,CAAC,MAAM,CAAC;AAEX,WAASC,gBAAe,KAAU,MAAc;AAC9C,QAAI,CAAC,OAAO,CAAC,KAAM,QAAO;AAC1B,UAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,WAAO,MAAM,OAAO,CAAC,KAAK,QAAQ,MAAM,GAAG,GAAG,GAAG;AAAA,EACnD;AAGA,QAAM,yBAAqB,4BAAY,CAAC,SAAsC;AAC5E,QAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC;AAC3C,UAAM,MAAM,UAAU;AAEtB,WAAO,KAAK,IAAI,UAAQ;AACtB,YAAM,QAAQA,gBAAe,MAAM,IAAI,OAAO,KAAK,KAAK,MAAM;AAC9D,UAAI,QAAa;AAEjB,UAAI,IAAI,WAAW;AACjB,gBAAQA,gBAAe,MAAM,IAAI,SAAS,KAAK,KAAK,QAAQ,KAAK,SAAS,KAAK,cAAc;AAAA,MAC/F;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,WAAS,2BAA2B,QAAgB,eAAwB;AAC1E,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,MACA,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAAA,IAC3D;AAEA,UAAM,UAA+B,CAAC;AACtC,QAAI,WAAW;AACf,UAAM,UAAU,OAAO,SAAS,OAAO;AAGvC,WAAO,aAAa,QAAQ,CAAC,OAAO,QAAQ;AAC1C,YAAM,UAAU,UAAU,MAAM,UAAU,UAAa,UAAU;AAEjE,UAAI,SAAS;AACX,mBAAW;AAGX,YAAI,cAAe;AAGnB;AAAA,MACF;AAEA,cAAQ,GAAG,IAAI;AAAA,IACjB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA,aAAa,iBAAiB;AAAA,MAC9B,QAAQ;AAAA,IACV;AAAA,EACF;AAGA,QAAM,mBAAe,4BAAY,OAAO,SAAiB,SAAiB;AACxE,QAAI,CAAC,UAAU,QAAQ,OAAQ,QAAO,CAAC;AACvC,UAAM,QAAQ;AACd,UAAM,SAAc,EAAE,MAAM,SAAS,MAAM;AAC3C,QAAI,KAAM,QAAO,UAAU,QAAQ,YAAY,GAAG,UAAU,QAAQ,SAAS,YAAY,eAAe,IAAI;AAE5G,UAAM,EAAE,SAAS,aAAa,QAAQ,UAAU,IAAI;AAAA,MAClD,UAAU,QAAQ;AAAA,MAClB,CAAC,CAAC,UAAU,QAAQ;AAAA,IACtB;AAEA,QAAI,aAAa;AACf,iBAAW,KAAK;AAChB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,cAAc,EAAE,GAAG,WAAW,GAAG,OAAO;AAE9C,UAAM,cAAc,UAAU,QAAQ,iBAAiB,cAAAC;AACvD,UAAM,MAAM,MAAM,YAAY,IAAI,SAAS;AAAA,MACzC,QAAQ;AAAA,MACR,iBAAiB;AAAA,IACnB,CAAC;AACD,QAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,YAAM,OAAO,IAAI,KAAK;AACtB,aAAO,mBAAmB,IAAI;AAAA,IAChC;AACA,WAAO,CAAC;AAAA,EACV,GAAG,CAAC,WAAW,kBAAkB,CAAC;AAGlC,QAAM,eAAW,4BAAY,OAAO,SAAiB,SAAiB;AACpE,UAAM,MAAM,UAAU;AACtB,QAAI,CAAC,IAAI,QAAS;AAClB,eAAW,IAAI;AAEf,QAAI;AACF,UAAI,cAAoC,CAAC;AAEzC,UAAI,IAAI,eAAe,OAAO;AAC5B,sBAAc,MAAM,aAAa,SAAS,IAAI;AAE9C,mBAAW,YAAY,WAAW,SAAS;AAAA,MAC7C,OAAO;AAEL,cAAM,UAAU,WAAW,WAAW,CAAC;AACvC,YAAI,WAAW;AACf,YAAI,MAAM;AACR,gBAAM,YAAY,KAAK,YAAY;AACnC,qBAAW,QAAQ,OAAO,UAAQ;AAChC,kBAAM,QAAQ,OAAO,KAAK,IAAI,SAAS,KAAK,KAAK,QAAQ,KAAK,SAAS,EAAE,EAAE,YAAY;AACvF,kBAAM,QAAQ,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,MAAM,EAAE,EAAE,YAAY;AACrE,mBAAO,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,SAAS;AAAA,UAC9D,CAAC;AAAA,QACH;AACA,cAAM,SAAS,UAAU,KAAK;AAC9B,cAAM,MAAM,QAAQ;AACpB,sBAAc,mBAAmB,SAAS,MAAM,OAAO,GAAG,CAAC;AAC3D,mBAAW,MAAM,SAAS,MAAM;AAAA,MAClC;AAEA,iBAAW,UAAQ;AACjB,cAAM,SAAS,YAAY,IACvB,cACA,CAAC,GAAG,MAAM,GAAG,WAAW;AAE5B,eAAO,cAAc,MAAM;AAAA,MAC7B,CAAC;AACD,cAAQ,OAAO;AAAA,IACjB,SAAS,KAAK;AACZ,cAAQ,MAAM,0CAAqC,GAAG;AACtD,iBAAW,KAAK;AAAA,IAClB,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,cAAc,kBAAkB,CAAC;AAErC,QAAM,iBAAiB,YAAY;AACjC,QAAI,CAAC,UAAU,QAAQ,OAAQ,QAAO,CAAC;AACvC,QAAI;AACF,iBAAW,IAAI;AACf,YAAM,cAAc,UAAU,QAAQ,iBAAiB,cAAAA;AACvD,UAAI,SAAc;AAAA,QAChB,CAAC,UAAU,QAAQ,OAAO,GAAG,UAAU,QAAQ;AAAA,MACjD;AACA,UAAI,MAAM,QAAQ,UAAU,QAAQ,KAAK,GAAG;AAC1C,YAAI,UAAU,QAAQ,MAAM,WAAW,GAAG;AACxC,qBAAW,KAAK;AAChB;AAAA,QACF;AACA,iBAAS;AAAA,UACP,CAAC,GAAG,UAAU,QAAQ,OAAO,MAAM,GAAG,UAAU,QAAQ,MAAM,KAAK,GAAG;AAAA,QACxE;AAAA,MACF;AACA,YAAM,EAAE,SAAS,aAAa,QAAQ,UAAU,IAAI;AAAA,QAClD,UAAU,QAAQ;AAAA,QAClB,CAAC,CAAC,UAAU,QAAQ;AAAA,MACtB;AAEA,UAAI,aAAa;AACf,mBAAW,KAAK;AAChB;AAAA,MACF;AAEA,YAAM,cAAc,EAAE,GAAG,WAAW,GAAG,OAAO;AAC9C,YAAM,MAAM,MAAM,YAAY,IAAI,SAAS;AAAA,QACzC,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB,CAAC;AAED,UAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,GAAG;AACjF,cAAM,UAAU,mBAAmB,IAAI,KAAK,IAAI;AAChD,mBAAW,UAAQ,cAAc,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,MACzD;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,KAAK,4DAAkD,GAAG;AAAA,IACpE,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,gCAAU,MAAM;AACd,UAAM,MAAM,UAAU;AACtB,QAAI,CAAC,IAAI,WAAW,CAAC,IAAI,SAAS,IAAI,eAAe,SAAS,CAAC,IAAI,OAAQ;AAE3E,QAAI,IAAI,eAAe;AACrB,YAAM,SAAS,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,IAAI,CAAC;AACpF,YAAM,cAAc,OAAO,MAAM,SAAO,QAAQ,KAAK,SAAO,IAAI,UAAU,GAAG,CAAC;AAC9E,UAAI,YAAa;AAAA,IACnB,OAAO;AACL,YAAM,cAAc,QAAQ,KAAK,SAAO,IAAI,UAAU,IAAI,KAAK;AAC/D,UAAI,YAAa;AAAA,IACnB;AACA,mBAAe;AAAA,EACjB,GAAG,CAAC,KAAK,UAAU,OAAO,KAAK,GAAG,OAAO,SAAS,OAAO,QAAQ,OAAO,UAAU,CAAC;AAGnF,QAAM,eAAW,4BAAY,MAAM;AACjC,QAAI,CAAC,WAAW,SAAS;AACvB,eAAS,OAAO,GAAG,UAAU;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,MAAM,UAAU,CAAC;AAGvC,QAAM,aAAS,4BAAY,CAAC,SAAiB;AAC3C,kBAAc,IAAI;AAElB,QAAI,cAAc,QAAS,cAAa,cAAc,OAAO;AAE7D,kBAAc,UAAU,WAAW,MAAM;AACvC,eAAS,GAAG,IAAI;AAAA,IAClB,GAAG,GAAG;AAAA,EACR,GAAG,CAAC,CAAC;AAGL,QAAM,YAAQ,4BAAY,MAAM;AAC9B,kBAAc,EAAE;AAChB,YAAQ,CAAC;AAAA,EACX,GAAG,CAAC,CAAC;AAGL,gCAAU,MAAM;AACd,QAAI,OAAO,aAAa,QAAQ;AAC9B,iBAAW,UAAU,OAAO;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,OAAO,WAAW,CAAC;AAEvB,gCAAU,MAAM;AACd,QAAI,OAAO,aAAc,UAAS,GAAG,EAAE;AAEvC,WAAO,MAAM;AACX,UAAI,cAAc,QAAS,cAAa,cAAc,OAAO;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,OAAO,UAAkB;AAC/C,QAAI,CAAC,UAAU,QAAQ,OAAQ,QAAO;AAEtC,UAAM,cAAc,UAAU,QAAQ,iBAAiB,cAAAA;AACvD,UAAM,SAAS,UAAU,QAAQ;AACjC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,MACA,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAAA,IAC3D;AAEA,UAAM,cAAsC,CAAC;AAC7C,WAAO,aAAa,QAAQ,CAAC,OAAO,QAAQ;AAC1C,kBAAY,GAAG,IAAI;AAAA,IACrB,CAAC;AAED,UAAM,OAAO;AAAA,MACX,GAAG;AAAA,MACH,CAAC,UAAU,QAAQ,SAAS,GAAG;AAAA,IACjC;AAEA,UAAM,MAAM,MAAM,YAAY,KAAK,OAAO,SAAS,OAAO,UAAU,MAAM;AAAA,MACxE,iBAAiB;AAAA,IACnB,CAAC;AAED,QAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,GAAG;AACjF,YAAM,UAAU,mBAAmB,IAAI,KAAK,IAAI;AAChD,iBAAW,UAAQ,cAAc,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AACvD,aAAO,QAAQ,CAAC;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADzMM,IAAAC,uBAAA;AAtHN,SAAS,mBAAmB;AAAA,EAC1B,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,2BAA2B;AAAA,EAC3B,GAAG;AACL,GAA4B;AAC1B,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,QAAM,kBAAc,uBAAuB,IAAI;AAC/C,QAAM,qBAAiB,uBAAuB,IAAI;AAElD,QAAM;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,gBAAgB;AAAA,IAClB,SAAS;AAAA,IACT,YAAY,UAAU;AAAA,IACtB;AAAA,IACA,UAAU,YAAY;AAAA,IACtB;AAAA,IACA;AAAA,IACA,aAAa,WAAW,CAAC;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,qBAAiB,wBAAQ,MAAM,YAAY,KAAK,SAAO,IAAI,UAAU,KAAK,GAAG,CAAC,aAAa,KAAK,CAAC;AAGvG,gCAAU,MAAM;AACd,UAAM,qBAAqB,CAAC,MAAkB;AAC5C,UAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,EAAE,MAAc,GAAG;AAC1E,kBAAU,KAAK;AACf,sBAAc,EAAE;AAAA,MAClB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,CAAC;AAGL,gCAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,WAAW,QAAS;AAEpC,UAAM,WAAW,IAAI;AAAA,MACnB,aAAW;AACT,YAAI,QAAQ,CAAC,EAAE,eAAgB,UAAS;AAAA,MAC1C;AAAA,MACA,EAAE,WAAW,IAAI;AAAA,IACnB;AAEA,QAAI,eAAe,QAAS,UAAS,QAAQ,eAAe,OAAO;AAEnE,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,QAAQ,SAAS,SAAS,QAAQ,CAAC;AAEvC,QAAM,qBAAqB,CAAC,MAA2C;AACrE,UAAM,OAAO,EAAE,OAAO;AACtB,kBAAc,IAAI;AAClB,WAAO,IAAI;AAAA,EACb;AAEA,QAAM,eAAe,CAAC,aAAqB;AACzC,eAAW,UAAU,MAAM,EAAE;AAC7B,cAAU,KAAK;AACf,kBAAc,EAAE;AAChB,UAAM;AAAA,EACR;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,SAAU,WAAU,IAAI;AAC7B,QAAI,YAAY,WAAW;AACzB,eAAS,GAAG,EAAE;AAAA,EAClB;AAEA,QAAM,wBAAwB,CAAC,MAA2C;AACxE,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,eAAW,IAAI,MAAM,EAAE;AACvB,kBAAc,EAAE;AAChB,UAAM;AACN,WAAO,EAAE;AAAA,EACX;AAEA,QAAM,qBAAqB,OAAO,cAAsB;AACtD,UAAM,SAAS,MAAM,gBAAgB,SAAS;AAC9C,QAAI,QAAQ;AACV,iBAAW,OAAO,OAAO,MAAM,EAAE;AACjC,gBAAU,KAAK;AACf,oBAAc,EAAE;AAChB,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,KAAK,aAAa,WAAU,mBAE/B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL;AAAA,QACA,MAAM;AAAA,QACN,WAAW;AAAA,UACT;AAAA,UACA,WAAW,mCAAmC;AAAA,UAC9C;AAAA,UACA,eAAe,mBAAmB;AAAA,QACpC;AAAA,QACA,aAAa,gBAAgB,SAAS;AAAA,QACtC,OAAO,SAAS,aAAa,gBAAgB,SAAS;AAAA,QACtD,SAAS;AAAA,QACT,UAAU;AAAA,QACV,UAAU,CAAC,UAAU;AAAA,QACrB;AAAA,QACA,cAAa;AAAA;AAAA,IACf;AAAA,IACC,kBAAkB,CAAC,YAAY,CAAC,YAC/B;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAW;AAAA,QACX,SAAS;AAAA,QACT,WAAU;AAAA,QAEV,wDAAC,oCAAY,WAAU,+BAA8B;AAAA;AAAA,IACvD;AAAA,IAED,gBACC,8CAAC,OAAE,WAAU,6BAA6B,wBAAa;AAAA,IAGxD,UAAU,CAAC,YACV,8CAAC,kBACC;AAAA,MAAC;AAAA;AAAA,QACC,aAAa,CAAC,MAAM,EAAE,gBAAgB;AAAA,QACtC,WAAU;AAAA,QACV,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO,YAAY,SAAS;AAAA,UAC5B,KAAK,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,SAAS,OAAO,UAAU;AAAA,UACjG,MAAM,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,OAAO,OAAO,UAAU;AAAA,QAClG;AAAA,QAGE,gBAAM,WAAW,CAAC,UAChB,+CAAC,SAAI,WAAU,sFACb;AAAA,wDAAC,SAAI,WAAU,gFAA+E;AAAA,UAAE;AAAA,WAElG,IAEA,+EACG,qBAAW,YAAY,WAAW,IACjC,+CAAC,SAAI,WAAU,sFACb;AAAA,wDAAC,SAAI,WAAU,gFAA+E;AAAA,UAAE;AAAA,WAElG,IACE,YAAY,SAAS,IACvB,gFACG;AAAA,sBAAY,IAAI,CAAC,QAAQ,UACxB;AAAA,YAAC;AAAA;AAAA,cAEC,SAAS,MAAM;AACb,6BAAa,OAAO,KAAK;AAAA,cAC3B;AAAA,cACA,WAAW,qDAAqD,OAAO,UAAU,QAAQ,gBAAgB,EAAE;AAAA,cAE1G,iBAAO;AAAA;AAAA,YANH,GAAG,OAAO,KAAK,IAAI,KAAK;AAAA,UAO/B,CACD;AAAA,UAEA,WACC;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,WAAU;AAAA,cAET,oBACC,+CAAC,SAAI,WAAU,kDACb;AAAA,8DAAC,SAAI,WAAU,gFAA+E;AAAA,gBAAE;AAAA,iBAElG,IAEA;AAAA;AAAA,UAEJ;AAAA,WAEJ,IAEA,+CAAC,SAAI,WAAU,+CACZ;AAAA,uBAAa,mBAAmB,UAAU,MAAM;AAAA,UAE/C,sBAAsB,cACpB;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM;AACb,mCAAmB,UAAU;AAAA,cAC/B;AAAA,cACA,WAAU;AAAA,cAET,kBAAQ,UAAU;AAAA;AAAA,UACrB;AAAA,WAGN,GAEJ;AAAA;AAAA,IAGN,GACF;AAAA,KAEJ;AAEJ;AAEA,IAAO,uBAAQ;;;AFxNT,IAAAC,uBAAA;AA7BN,IAAM,WAAW,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAgC;AAC7E,QAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,MAAM,OAAO,CAAC;AACxD,QAAM,cAAc,MAAM,cAAc,MAAM,cAAc;AAG5D,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,mBAAa,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAkB;AACtC,UAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EAC3C;AAEA,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,UAAU,KAAK,IAAI,CAAC,UAAe;AAAA,IACvC,OAAO,KAAK,OAAO;AAAA,IACnB,OAAO,KAAK,SAAS;AAAA,EACvB,EAAE;AAEF,MAAI,MAAM,UAAU;AAClB,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA,IAAI,MAAM,QAAQ;AAAA,QAClB,SAAS;AAAA,QACT,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ;AAAA,EAEJ;AAEA,SACE,gFACE;AAAA,mDAAC,UAAO,MAAM,MAAM,MAAM,OAAO,MAAM,SAAS,IAAI,eAAe,cAAc,UAAU,cAAc,CAAC,YACxG;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,WAAW,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,UACnE,OAAO;AAAA,YACL,GAAG;AAAA,YACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,UACvD;AAAA,UACA,iBAAe;AAAA,UAEf,wDAAC,eAAY,aAA0B;AAAA;AAAA,MACzC;AAAA,MACA,+CAAC,iBAEG;AAAA,cAAM,eACJ,8CAAC,cAAW,OAAM,QAAO,UAAQ,MAAC,wBAAU;AAAA,QAI9C,CAAC,MAAM,eAAe,QAAQ,WAAW,KACvC,8CAAC,cAAW,OAAM,QAAO,UAAQ,MAAC,wBAAU;AAAA,QAG/C,QAAQ,IAAI,CAAC,QACZ,8CAAC,cAA2B,OAAO,IAAI,OACpC,cAAI,SADU,IAAI,KAErB,CACD;AAAA,SACH;AAAA,OACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQ;;;AIjGf,IAAAC,iBAA0B;;;ACA1B,sBAAiC;AAiB3B,IAAAC,uBAAA;AAbN,SAAS,OAAO;AAAA,EACd;AAAA,EACA,GAAG;AACL,GAAsD;AACpD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAiB;AAAA,QAAhB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;ADJI,IAAAC,uBAAA;AAhBJ,IAAM,eAAe,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA8B;AAC/E,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAmB;AACvC,UAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EAC3C;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB,yDAAC,SAAI,WAAU,oCACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,SAAS,CAAC,CAAC,MAAM;AAAA,UACjB,iBAAiB;AAAA,UACjB,UAAU,cAAc,CAAC;AAAA;AAAA,MAC3B;AAAA,MACA,8CAACC,QAAA,EAAM,SAAS,MAAM,QAAQ,UAAW,gBAAM,MAAK;AAAA,OACtD,GACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,uBAAQ;;;AExCf,IAAAC,iBAA0B;AAC1B,uCAA8C;AAK9C,mBAAO;AAoCH,IAAAC,uBAAA;AAlCJ,IAAM,kBAAkB,CAAC,QAAgB;AACvC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,QAAQ,WAAW,GAAG,EAAG,QAAO;AACpC,QAAM,QAAQ,QAAQ,QAAQ,OAAO,EAAE;AACvC,SAAO,MAAM,KAAK;AACpB;AAEA,IAAM,aAAa,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAuB;AACtE,QAAM,cAAc,MAAM,eAAe;AAEzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,gCAAU,MAAM;AACd,QAAI,MAAM,UAAU,QAAW;AAE7B,YAAM,aAAa,gBAAgB,MAAM,KAAK;AAC9C,qBAAe,UAAU;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,QAAgB;AACpC,UAAM,aAAa,gBAAgB,GAAG;AACtC,UAAM,QAAQ;AAAA,MACZ,QAAQ;AAAA,QACN,MAAM,MAAM,QAAQ;AAAA,QACpB,OAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,WAAW,OAAO,MAAM,QAAQ,EAAE;AAAA,EAC1C;AAEA,SACE,gFACE;AAAA;AAAA,MAAC,iCAAAC;AAAA,MAAA;AAAA,QACC,gBAAe;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM,QAAQ,gBAAgB,MAAM,KAAK,IAAI;AAAA,QACpD,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,MAAM,eAAe,mBAAmB;AAAA,QAAE;AAAA,QAC5C,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,UAAU;AAAA,QACV,YAAY;AAAA,UACV,IAAI;AAAA,UACJ,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,SAAS,OAAO;AAAA,QAC1D;AAAA,QACA;AAAA,QACA,UAAU,cAAc,CAAC;AAAA;AAAA,IAC3B;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,qBAAQ;;;ACtEf,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA9BJ,IAAM,cAAc,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAwB;AACxE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,sBAAQ;;;AClEf,IAAAC,iBAA0B;AA8BtB,IAAAC,uBAAA;AAxBJ,IAAM,YAAY,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAsB;AACpE,QAAM,cAAc,MAAM,eAAe;AAEzC,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,+CAAC,SAAI,WAAU,6CACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAa;AAAA,QACb;AAAA,QACA,UAAU;AAAA;AAAA,IACZ;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,oBAAQ;;;ACtDf,IAAAC,SAAuB;AAEvB,sBAAuB;AACvB,IAAAC,uBAA2C;;;ACL3C,IAAAC,SAAuB;AACvB,IAAAC,uBAIO;AACP,8BAA2D;AAyH/C,IAAAC,uBAAA;AApHZ,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,QAAM,wBAAoB,8CAAqB;AAE/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MACA;AAAA,MACA,YAAY;AAAA,QACV,qBAAqB,CAAC,SACpB,KAAK,eAAe,WAAW,EAAE,OAAO,QAAQ,CAAC;AAAA,QACnD,GAAG;AAAA,MACL;AAAA,MACA,YAAY;AAAA,QACV,MAAM,GAAG,SAAS,kBAAkB,IAAI;AAAA,QACxC,QAAQ;AAAA,UACN;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO,GAAG,8BAA8B,kBAAkB,KAAK;AAAA,QAC/D,KAAK;AAAA,UACH;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,iBAAiB;AAAA,UACf,eAAe,EAAE,SAAS,cAAc,CAAC;AAAA,UACzC;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX,eAAe,EAAE,SAAS,cAAc,CAAC;AAAA,UACzC;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB,UACd,YACA;AAAA,UACJ,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO;AAAA,QACP,UAAU,GAAG,QAAQ,kBAAkB,QAAQ;AAAA,QAC/C,SAAS;AAAA,UACP;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,MAAM,GAAG,oBAAoB,kBAAkB,IAAI;AAAA,QACnD,oBAAoB;AAAA,UAClB;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,KAAK;AAAA,UACH;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,cAAc,GAAG,gBAAgB,kBAAkB,YAAY;AAAA,QAC/D,WAAW,GAAG,0BAA0B,kBAAkB,SAAS;AAAA,QACnE,OAAO;AAAA,UACL;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,SAAS;AAAA,UACP;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,QAAQ,GAAG,aAAa,kBAAkB,MAAM;AAAA,QAChD,GAAG;AAAA,MACL;AAAA,MACA,YAAY;AAAA,QACV,MAAM,CAAC,EAAE,WAAAC,YAAW,SAAS,GAAGC,OAAM,MAAM;AAC1C,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,KAAK;AAAA,cACL,WAAW,GAAGD,UAAS;AAAA,cACtB,GAAGC;AAAA;AAAA,UACN;AAAA,QAEJ;AAAA,QACA,SAAS,CAAC,EAAE,WAAAD,YAAW,aAAa,GAAGC,OAAM,MAAM;AACjD,cAAI,gBAAgB,QAAQ;AAC1B,mBACE,8CAAC,wCAAgB,WAAW,GAAG,UAAUD,UAAS,GAAI,GAAGC,QAAO;AAAA,UAEpE;AAEA,cAAI,gBAAgB,SAAS;AAC3B,mBACE;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,UAAUD,UAAS;AAAA,gBAChC,GAAGC;AAAA;AAAA,YACN;AAAA,UAEJ;AAEA,iBACE,8CAAC,wCAAgB,WAAW,GAAG,UAAUD,UAAS,GAAI,GAAGC,QAAO;AAAA,QAEpE;AAAA,QACA,WAAW;AAAA,QACX,YAAY,CAAC,EAAE,UAAU,GAAGA,OAAM,MAAM;AACtC,iBACE,8CAAC,QAAI,GAAGA,QACN,wDAAC,SAAI,WAAU,mEACZ,UACH,GACF;AAAA,QAEJ;AAAA,QACA,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2C;AACzC,QAAM,wBAAoB,8CAAqB;AAE/C,QAAM,MAAY,cAA0B,IAAI;AAChD,EAAM,iBAAU,MAAM;AACpB,QAAI,UAAU,QAAS,KAAI,SAAS,MAAM;AAAA,EAC5C,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,YAAU,IAAI,KAAK,mBAAmB;AAAA,MACtC,wBACE,UAAU,YACV,CAAC,UAAU,eACX,CAAC,UAAU,aACX,CAAC,UAAU;AAAA,MAEb,oBAAkB,UAAU;AAAA,MAC5B,kBAAgB,UAAU;AAAA,MAC1B,qBAAmB,UAAU;AAAA,MAC7B,WAAW;AAAA,QACT;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AC/MA,uBAAkC;AAOzB,IAAAC,uBAAA;AAHT,SAAS,QAAQ;AAAA,EACf,GAAG;AACL,GAAuD;AACrD,SAAO,8CAAkB,uBAAjB,EAAsB,aAAU,WAAW,GAAG,OAAO;AAC/D;AAEA,SAAS,eAAe;AAAA,EACtB,GAAG;AACL,GAA0D;AACxD,SAAO,8CAAkB,0BAAjB,EAAyB,aAAU,mBAAmB,GAAG,OAAO;AAC1E;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,GAAG;AACL,GAA0D;AACxD,SACE,8CAAkB,yBAAjB,EACC;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ;;;AFyNU,IAAAC,uBAAA;AA5OV,SAAS,YAAY,QAAa,cAAsC;AACtE,MAAI,CAAC,OAAQ,QAAO;AAEpB,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,oBAAI,KAAK;AAAA,IAClB,KAAK;AACH,aAAO,eAAe,IAAI,KAAK,YAAY,IAAI;AAAA,IACjD,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEe,SAAR,eAAgC;AAAA,EACrC;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAyB;AAEvB,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AACA,QAAM,cAAc,MAAM,eAAe,eAAe,IAAmC;AAE3F,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,oBAAoB,MAAM,qBAAqB;AAErD,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,oBAAoB,MAAM,qBAAqB;AAErD,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,QAAM,UAAU,YAAY,aAAa,iBAAiB;AAC1D,QAAM,UAAU,YAAY,aAAa,iBAAiB;AAG1D,QAAM,CAAC,MAAM,OAAO,IAAU,gBAA2B,MAAM;AAC7D,QAAI,CAAC,MAAM,MAAO,QAAO;AACzB,UAAM,IAAI,IAAI,KAAK,MAAM,KAAY;AACrC,WAAO,MAAM,EAAE,QAAQ,CAAC,IAAI,SAAY;AAAA,EAC1C,CAAC;AAGD,QAAM,eAAe,OAAO,KAAK,SAAS,IAAI;AAC9C,QAAM,iBAAiB,OAAO,KAAK,WAAW,IAAI;AAClD,QAAM,CAAC,OAAO,QAAQ,IAAU,gBAAS,YAAY;AACrD,QAAM,CAAC,SAAS,UAAU,IAAU,gBAAS,cAAc;AAE3D,QAAM,CAAC,MAAM,OAAO,IAAU,gBAAS,IAAI;AAE3C,QAAM,eAAqB,eAAQ,MAAM;AACvC,QAAI,UAAU,EAAG,QAAO;AACxB,QAAI,QAAQ,GAAI,QAAO,QAAQ;AAC/B,WAAO;AAAA,EACT,GAAG,CAAC,KAAK,CAAC;AAEV,EAAM,iBAAU,MAAM;AACpB,YAAQ,SAAS,KAAK,OAAO,IAAI;AAAA,EACnC,GAAG,CAAC,KAAK,CAAC;AAEV,EAAM,iBAAU,MAAM;AACpB,QAAI,CAAC,MAAM,OAAO;AAChB,cAAQ,MAAS;AACjB;AAAA,IACF;AACA,UAAM,IAAI,IAAI,KAAK,MAAM,KAAY;AACrC,QAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;AACvB,cAAQ,CAAC;AACT,eAAS,EAAE,SAAS,CAAC;AACrB,iBAAW,EAAE,WAAW,CAAC;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,CAAC;AAEhB,QAAM,CAAC,MAAM,OAAO,IAAU,gBAAS,OAAO,KAAK,YAAY,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC;AAE3F,EAAM,iBAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,UAAM,UAAU,IAAI,KAAK,IAAI;AAC7B,YAAQ,YAAY,IAAI;AACxB,YAAQ,OAAO;AACf,eAAW,OAAO;AAAA,EACpB,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,aAAa,CAAC,aAA+B;AACjD,QAAI,CAAC,MAAM,SAAU;AAErB,QAAI,cAAc;AAClB,QAAI,CAAC,UAAU;AACb,oBAAc;AAAA,IAChB,WAAW,SAAS,QAAQ;AAC1B,wBAAc,wBAAO,UAAU,YAAY;AAAA,IAC7C,WAAW,SAAS,QAAQ;AAC1B,wBAAc,wBAAO,UAAU,UAAU;AAAA,IAC3C,OAAO;AACL,oBAAc,SAAS,YAAY;AAAA,IACrC;AAEA,UAAM,SAAS;AAAA,MACb,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO;AAAA,IACT;AAEA,UAAM,QAAQ;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,SAAS,OAAO,MAAM,QAAQ,EAAE;AAAA,EACxC;AAEA,QAAM,iBAAiB,CAAC,cAAgC,IAAI,OAAO,IAAI,YAAY;AACjF,QAAI,CAAC,cAAc;AACjB,cAAQ,MAAS;AACjB,iBAAW,MAAS;AACpB;AAAA,IACF;AAEA,UAAM,IAAI,IAAI,KAAK,YAAY;AAC/B,QAAI,SAAS,QAAQ;AACnB,QAAE,SAAS,CAAC;AACZ,QAAE,WAAW,CAAC;AACd,QAAE,WAAW,CAAC;AACd,QAAE,gBAAgB,CAAC;AAAA,IACrB,OAAO;AACL,QAAE,SAAS,GAAG,GAAG,GAAG,CAAC;AAAA,IACvB;AAEA,QAAI,WAAW,IAAI,QAAS;AAC5B,QAAI,WAAW,IAAI,QAAS;AAE5B,YAAQ,CAAC;AACT,YAAQ,EAAE,YAAY,CAAC;AACvB,eAAW,CAAC;AAAA,EACd;AAEA,QAAM,kBAAkB,CAAC,SAA2B;AAClD,QAAI,CAAC,MAAM;AACT,cAAQ,MAAS;AACjB,iBAAW,MAAS;AACpB;AAAA,IACF;AAEA,UAAM,cAAc,IAAI,KAAK,IAAI;AAEjC,mBAAe,WAAW;AAAA,EAC5B;AAEA,QAAM,mBAAmB,CAAC,GAAW,MAAc;AACjD,QAAI,CAAC,MAAM;AAET,YAAM,eAAe,oBAAI,KAAK;AAC9B,mBAAa,SAAS,CAAC;AACvB,mBAAa,WAAW,CAAC;AACzB,mBAAa,WAAW,CAAC;AACzB,mBAAa,gBAAgB,CAAC;AAC9B,cAAQ,YAAY;AACpB,iBAAW,YAAY;AAAA,IACzB,OAAO;AACL,YAAM,UAAU,IAAI,KAAK,IAAI;AAC7B,cAAQ,SAAS,CAAC;AAClB,cAAQ,WAAW,CAAC;AACpB,cAAQ,WAAW,CAAC;AACpB,cAAQ,gBAAgB,CAAC;AACzB,cAAQ,OAAO;AACf,iBAAW,OAAO;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,MAA4C;AACrE,QAAI,IAAI,OAAO,EAAE,OAAO,KAAK;AAC7B,QAAI,SAAS,QAAQ,IAAI,GAAI,MAAK;AAClC,QAAI,SAAS,QAAQ,MAAM,GAAI,KAAI;AACnC,aAAS,CAAC;AACV,qBAAiB,GAAG,OAAO;AAAA,EAC7B;AAEA,QAAM,sBAAsB,CAAC,MAA4C;AACvE,UAAM,IAAI,OAAO,EAAE,OAAO,KAAK;AAC/B,eAAW,CAAC;AACZ,qBAAiB,OAAO,CAAC;AAAA,EAC3B;AAEA,QAAM,mBAAmB,CAAC,MAA4C;AACpE,UAAM,MAAM,EAAE,OAAO;AACrB,YAAQ,GAAG;AACX,QAAI,IAAI;AACR,QAAI,QAAQ,QAAQ,IAAI,GAAI,MAAK;AACjC,QAAI,QAAQ,QAAQ,MAAM,GAAI,KAAI;AAClC,aAAS,CAAC;AACV,qBAAiB,GAAG,OAAO;AAAA,EAC7B;AAEA,QAAM,eAAc,oBAAI,KAAK,GAAE,YAAY;AAC3C,QAAM,cAAc,CAAC;AACrB,WAAS,IAAI,cAAc,IAAI,KAAK,cAAc,IAAI,KAAK;AACzD,gBAAY,KAAK,CAAC;AAAA,EACpB;AAEA,QAAM,eAAqB,eAAQ,MAAM;AACvC,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI;AACF,UAAI,SAAS,OAAQ,YAAO,wBAAO,MAAM,YAAY;AACrD,UAAI,SAAS,OAAQ,YAAO,wBAAO,MAAM,UAAU;AACnD,iBAAO,wBAAO,MAAM,qBAAqB;AAAA,IAC3C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,QAAM,kBAAkB,cAAc,CAAC;AAEvC,QAAM,CAAC,oBAAoB,qBAAqB,IAAU,gBAAS,MAAM;AACvE,UAAM,gBAAe,oBAAI,KAAK,GAAE,SAAS;AACzC,WAAO,OAAO,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,MAAM,YAAY;AAAA,EAC3F,CAAC;AAED,EAAM,iBAAU,MAAM;AACpB,0BAAsB,IAAI,KAAK,MAAM,mBAAmB,SAAS,CAAC,CAAC;AAAA,EACrE,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,cAAc,MAAM;AACxB,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,mBAAmB,IAAI,KAAK,MAAM,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AACzE,mBAAe,gBAAgB;AAAA,EACjC;AAEA,SACE,+CAAC,SAAI,WAAU,iBACb;AAAA,mDAAC,WACC;AAAA,oDAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,WAAW;AAAA,YACT;AAAA,YACA,CAAC,QAAQ;AAAA,YACT,MAAM,gBAAgB;AAAA,YACtB;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,GAAG;AAAA,YACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,UACvD;AAAA,UACA,UAAU;AAAA,UAEV;AAAA,0DAAC,sCAAc,WAAU,yBAAwB;AAAA,YACjD,8CAAC,UAAK,WAAU,QAAQ,0BAAgB,aAAY;AAAA,YACnD,gBACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,OAAO,EAAE,eAAe,OAAO;AAAA,gBAC/B,SAAS,OAAK;AACZ,oBAAE,gBAAgB;AAClB,0BAAQ,MAAS;AACjB,6BAAW,MAAS;AAAA,gBACtB;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MAEJ,GACF;AAAA,MAEA,8CAAC,kBAAe,WAAU,sBAAqB,OAAM,SACnD,yDAAC,SAAI,WAAU,uBACX;AAAA,kBAAS,UAAU,SAAS,eAC5B,gFACE;AAAA,yDAAC,SAAI,WAAU,2CACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,SAAS;AAAA,gBACV;AAAA;AAAA,YAED;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,QAAQ,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,gBAC/C,UAAU,mBAAmB;AAAA,gBAE5B,sBAAY,IAAI,CAAC,MAChB,8CAAC,YAAe,OAAO,GACpB,eADU,CAEb,CACD;AAAA;AAAA,YACH;AAAA,aACF;AAAA,UAEA,8CAAC,SAAI,WAAU,sBACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,UAAU;AAAA,cACV,OAAO;AAAA,cACP,eAAe,CAAC,aAAa,sBAAsB,QAAQ;AAAA,cAC3D,UAAU,CAAC,MAAM;AACf,oBAAI,WAAW,IAAI,QAAS,QAAO;AACnC,oBAAI,WAAW,IAAI,QAAS,QAAO;AACnC,uBAAO;AAAA,cACT;AAAA,cACA,WAAU;AAAA,cACV,WAAS;AAAA;AAAA,UACX,GACF;AAAA,WACF;AAAA,SAGA,SAAS,UAAU,SAAS,eAC5B,+CAAC,SAAI,WAAU,gCACb;AAAA,wDAAC,WAAM,WAAU,iCAAgC,kBAAI;AAAA,UACrD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,cACP,UAAU;AAAA,cACV,UAAU,mBAAmB;AAAA,cAE5B,gBAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,SAChD,8CAAC,YAAkB,OAAO,MACvB,eAAK,SAAS,EAAE,SAAS,GAAG,GAAG,KADrB,IAEb,CACD;AAAA;AAAA,UACH;AAAA,UACA,8CAAC,UAAK,WAAU,WAAU,eAAC;AAAA,UAC3B;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,cACP,UAAU;AAAA,cACV,UAAU,mBAAmB;AAAA,cAE5B,gBAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACxC,sBAAM,MAAM,IAAI;AAChB,uBACE,8CAAC,YAAiB,OAAO,KACtB,cAAI,SAAS,EAAE,SAAS,GAAG,GAAG,KADpB,GAEb;AAAA,cAEJ,CAAC;AAAA;AAAA,UACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,cACP,UAAU;AAAA,cACV,UAAU,mBAAmB;AAAA,cAE7B;AAAA,8DAAC,YAAO,OAAM,MAAK,gBAAE;AAAA,gBACrB,8CAAC,YAAO,OAAM,MAAK,gBAAE;AAAA;AAAA;AAAA,UACvB;AAAA,WACF;AAAA,SAEJ,GAEF;AAAA,OACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,cAAc,iBAAiB,OAAO;AAAA,QACtC,UAAU;AAAA,QACV,OACE,CAAC,OACG,KACA,SAAS,aACP,wBAAO,MAAM,YAAY,IACzB,SAAS,aACP,wBAAO,MAAM,UAAU,IACvB,KAAK,YAAY;AAAA,QAE3B,UAAU,MAAM;AAAA,QAAE;AAAA;AAAA,IACpB;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;;;AGhZA,IAAAC,iBAAiC;AAEjC,IAAAC,mBAAgC;AAsDd,IAAAC,uBAAA;AAzClB,IAAM,YAAY,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA2B;AACzE,QAAM,cAAc,CAAC,QAAoC,CAAC,CAAC,OAAO,IAAI,gBAAgB;AAEtF,QAAM,CAAC,MAAM,OAAO,IAAI,eAAAC,QAAM;AAAA,IAC5B,YAAY,MAAM,KAAK,IACnB,MAAM,QACN;AAAA,MACA,MAAM,oBAAI,KAAK;AAAA,MACf,QAAI,0BAAQ,oBAAI,KAAK,GAAG,CAAC;AAAA,IAC3B;AAAA,EACJ;AAEA,gCAAU,MAAM;AAEd,QAAI,MAAM,SAAS,YAAY,MAAM,KAAK,GAAG;AAC3C,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAsC;AAC1D,YAAQ,KAAK;AACb,QAAI,OAAO;AACT,YAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,IAC3C;AAAA,EACF;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB,yDAAC,WACC;AAAA,oDAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,SAAS;AAAA,UACT,WAAW;AAAA,YACT;AAAA,YACA,CAAC,QAAQ;AAAA,UACX;AAAA,UAEC,gBAAM,OACL,KAAK,KACH,gFACG;AAAA,yCAAO,KAAK,MAAM,WAAW;AAAA,YAAE;AAAA,YAAG;AAAA,gBAClC,yBAAO,KAAK,IAAI,WAAW;AAAA,aAC9B,QAEA,yBAAO,KAAK,MAAM,WAAW,IAG/B,8CAAC,UAAK,+BAAiB;AAAA;AAAA,MAE3B,GACF;AAAA,MACA,8CAAC,kBAAe,WAAU,cAAa,OAAM,SAC3C;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAc,MAAM;AAAA,UACpB,UAAU;AAAA,UACV,UAAU;AAAA,UACV,gBAAgB;AAAA;AAAA,MAClB,GACF;AAAA,OACF,GACF;AAAA,IACC,MAAM,gBAAgB,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KACtF;AAEJ;AAEA,IAAO,oBAAQ;;;ACpFf,IAAAC,iBAA0B;AA2BtB,IAAAC,uBAAA;AAtBJ,IAAM,iBAAiB,CAAC,EAAE,WAAW,OAAO,SAAS,QAAQ,GAAG,MAAM,MAA2B;AAC/F,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE;AAC3C,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,SACE,gFACE;AAAA;AAAA,MAAC;AAAA;AAAA,QAAI,WACH;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAM,eAAe,mBAAmB;AAAA,QAC1C;AAAA,QAGC;AAAA,qBACC,8CAAC,SAAI,WAAU,mEACZ,mBACH;AAAA,UAEF;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,MAAM,QAAQ;AAAA,cAClB,MAAK;AAAA,cACL,MAAM,MAAM;AAAA,cACZ,OAAO,MAAM,SAAS;AAAA,cACtB,WACE;AAAA,gBACE;AAAA,gBACA;AAAA,cACF;AAAA,cAEF,OAAO;AAAA,gBACL,GAAG;AAAA,gBACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,cACvD;AAAA,cACA,cAAc,iBAAiB,OAAO;AAAA,cACtC;AAAA,cACA,UAAU;AAAA,cACV,UAAU,cAAc,CAAC;AAAA,cACzB,UAAU;AAAA;AAAA,UACZ;AAAA,UACC,UACC,8CAAC,SAAI,WAAU,mEACZ,kBACH;AAAA;AAAA;AAAA,IAEJ;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,yBAAQ;;;AC5Ef,IAAAC,iBAAkE;AAElE,IAAAC,wBAAmC;AAwLzB,IAAAC,uBAAA;AA5JK,SAAR,wBAAyC;AAAA,EAC9C,QAAQ,CAAC;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,GAAG;AACL,GAAiC;AAC/B,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,QAAM,kBAAc,uBAAuB,IAAI;AAC/C,QAAM,qBAAiB,uBAAuB,IAAI;AAElD,QAAM,eAAe,CAAC,QAA4B;AAChD,WAAO,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC;AAAA,EAChC;AAEA,QAAM,iBAAiB,CAACC,WAAyB;AAC/C,QAAI,MAAgB,CAAC;AAErB,QAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,YAAMA;AAAA,IACR,WAAW,OAAOA,WAAU,UAAU;AACpC,UAAI,CAACA,OAAM,KAAK,EAAG,QAAO,CAAC;AAC3B,UAAIA,OAAM,SAAS,GAAG,EAAG,OAAMA,OAAM,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,eACxDA,OAAM,SAAS,GAAG,EAAG,OAAMA,OAAM,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,UACjE,OAAM,CAACA,OAAM,KAAK,CAAC;AAAA,IAC1B;AAEA,WAAO,aAAa,GAAG;AAAA,EACzB;AAEA,QAAM,kBAAkB,eAAe,KAAK;AAE5C,QAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,MAAM,OAAO,CAAC;AACxD,QAAM;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,gBAAgB;AAAA,IAClB,SAAS;AAAA,IACT,YAAY,UAAU;AAAA,IACtB;AAAA,IACA,UAAU,YAAY;AAAA,IACtB;AAAA,IACA;AAAA,IACA,aAAa,QAAQ,CAAC;AAAA,IACtB,OAAO;AAAA,IACP;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,QAAM,cAAc,MAAM,WAAW;AAErC,QAAM,gBAAgB,CAAC,WAAwC;AAC7D,UAAM,SAAS,aAAa,MAAM;AAClC,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB,KAAK;AACH,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,sBAAkB,wBAAQ,MAAgB;AAC9C,WAAO,gBAAgB,IAAI,CAAAC,QAAM;AAC/B,YAAM,WAAW,YAAY,KAAK,SAAO,IAAI,UAAUA,GAAE;AACzD,UAAI,SAAU,QAAO;AACrB,aAAO,EAAE,OAAOA,KAAI,OAAOA,IAAG;AAAA,IAChC,CAAC;AAAA,EACH,GAAG,CAAC,iBAAiB,WAAW,CAAC;AAEjC,gCAAU,MAAM;AACd,UAAM,cAAc,CAAC,MAAkB;AACrC,UAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,EAAE,MAAc,GAAG;AAC1E,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,WAAW;AAClD,WAAO,MAAM,SAAS,oBAAoB,aAAa,WAAW;AAAA,EACpE,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,WAAW,QAAS;AAEpC,UAAM,MAAM,IAAI;AAAA,MACd,aAAW;AACT,YAAI,QAAQ,CAAC,EAAE,eAAgB,UAAS;AAAA,MAC1C;AAAA,MACA,EAAE,WAAW,IAAI;AAAA,IACnB;AAEA,QAAI,eAAe,QAAS,KAAI,QAAQ,eAAe,OAAO;AAC9D,WAAO,MAAM,IAAI,WAAW;AAAA,EAC9B,GAAG,CAAC,QAAQ,SAAS,SAAS,QAAQ,CAAC;AAEvC,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,OAAO,EAAE,OAAO;AACtB,kBAAc,IAAI;AAClB,WAAO,IAAI;AAAA,EACb;AAEA,QAAM,eAAe,CAAC,QAAgB;AACpC,QAAI;AAEJ,QAAI,gBAAgB,SAAS,GAAG,GAAG;AACjC,gBAAU,gBAAgB,OAAO,OAAK,MAAM,GAAG;AAAA,IACjD,OAAO;AACL,gBAAU,aAAa,CAAC,GAAG,iBAAiB,GAAG,CAAC;AAAA,IAClD;AAEA,eAAW,cAAc,OAAO,GAAG,EAAE;AAAA,EACvC;AAEA,QAAM,YAAY,CAAC,QAAgB;AACjC,UAAM,UAAU,gBAAgB,OAAO,OAAK,MAAM,GAAG;AACrD,eAAW,cAAc,OAAO,GAAG,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,UAAU;AACb,gBAAU,IAAI;AACd,UAAI,YAAY,WAAW,GAAG;AAC5B,iBAAS,GAAG,EAAE;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,KAAK,aAAa,WAAU,mBAC/B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA,0BAAgB,IAAI,SACnB;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cAET;AAAA,oBAAI;AAAA,gBACJ,CAAC,YAAY,CAAC,YACb;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS,CAAC,MAAM;AACd,wBAAE,gBAAgB;AAClB,gCAAU,IAAI,KAAK;AAAA,oBACrB;AAAA,oBACA,WAAU;AAAA,oBAEV,wDAAC,+BAAM,MAAM,IAAI;AAAA;AAAA,gBACnB;AAAA;AAAA;AAAA,YAdG,IAAI;AAAA,UAgBX,CACD;AAAA,UAED;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,aAAa,gBAAgB,SAAS,KAAK;AAAA,cAC3C,WAAU;AAAA,cACV,OAAO,SAAS,aAAa;AAAA,cAC7B,UAAU;AAAA,cACV;AAAA,cACA;AAAA,cACA,cAAa;AAAA;AAAA,UACf;AAAA;AAAA;AAAA,IACF;AAAA,IAEC,gBACC,8CAAC,OAAE,WAAU,6BAA6B,wBAAa;AAAA,IAGxD,UAAU,CAAC,YACV,8CAAC,kBACC;AAAA,MAAC;AAAA;AAAA,QACC,aAAa,CAAC,MAAM,EAAE,gBAAgB;AAAA,QACtC,WAAU;AAAA,QACV,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO,YAAY,SAAS;AAAA,UAC5B,KAAK,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,SAAS,OAAO,UAAU;AAAA,UACjG,MAAM,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,OAAO,OAAO,UAAU;AAAA,QAClG;AAAA,QAEC,yBAAe,YAAY,WAAW,IACrC,8CAAC,SAAI,WAAU,uCAAsC,wBAErD,IACE,YAAY,SAAS,IACvB,gFACG;AAAA,sBAAY,IAAI,CAAC,WAAW;AAC3B,kBAAM,aAAa,gBAAgB,SAAS,OAAO,KAAK;AACxD,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,SAAS,MAAM,aAAa,OAAO,KAAK;AAAA,gBACxC,WAAW;AAAA,kBACT;AAAA,kBACA,cAAc;AAAA,gBAChB;AAAA,gBAEC;AAAA,yBAAO;AAAA,kBACP,cAAc,8CAAC,qCAAY,MAAM,IAAI;AAAA;AAAA;AAAA,cARjC,OAAO;AAAA,YASd;AAAA,UAEJ,CAAC;AAAA,UAEA,WACC;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,WAAU;AAAA,cAET,oBAAU,kBAAa;AAAA;AAAA,UAC1B;AAAA,WAEJ,IAEA,8CAAC,SAAI,WAAU,uCAAsC,wBAErD;AAAA;AAAA,IAEJ,GACF;AAAA,KAEJ;AAEJ;;;ACrRA,IAAAC,UAAuB;AAEvB,IAAAC,+BAA4B;AAC5B,IAAAC,4BAAgC;AAChC,IAAAC,sBAQO;AACP,IAAAC,wBAAwD;;;ACHlD,IAAAC,uBAAA;AANN,SAAS,MAAM,EAAE,WAAW,GAAG,MAAM,GAAkC;AACrE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MAEV;AAAA,QAAC;AAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAW,GAAG,kBAAkB,SAAS;AAAA,UACxC,GAAG;AAAA;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAkC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAkC;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAeA,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAA+B;AACrE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAA+B;AACtE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAA+B;AACtE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AChGA,yBAAmC;;;ACEnC,IAAAC,iBAAkB;AAElB,IAAAC,eAA6B;AAC7B,IAAAC,wBAAiC;AACjC,mBAAkB;;;ACNlB,mBAAkB;AAClB,iBAAgB;AAEhB,aAAAC,QAAM,OAAO,WAAAC,OAAG;AAEhB,IAAO,sBAAQ,aAAAD;;;ACHR,IAAM,iBAAiB,CAC5B,OACAE,SACA,mBAAsD,CAAC,MACpD;AACH,MAAI,CAACA,QAAQ,QAAO;AACpB,MAAI,SAAS,QAAQ,UAAU,MAAM,UAAU,OAAW,QAAO;AAGjE,MAAIA,QAAO,WAAW,SAAS,GAAG;AAChC,UAAM,MAAMA,QAAO,QAAQ,WAAW,EAAE;AACxC,WAAO,iBAAiB,GAAG,IAAI,iBAAiB,GAAG,EAAE,KAAK,IAAI;AAAA,EAChE;AAGA,QAAM,CAAC,MAAM,GAAG,IAAIA,QAAO,MAAM,GAAG;AAEpC,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,oBAAM,KAAK,EAAE,OAAO,OAAO,YAAY;AAAA,IAChD,KAAK;AACH,YAAM,SAAS,oBAAM,KAAK,EAAE,QAAQ,IAAI,oBAAM,KAAK,EAAE,IAAI,IAAI,oBAAM,KAAK;AACxE,aAAO,OAAO,OAAO,kBAAkB;AAAA,IACzC,KAAK;AACH,YAAM,WAAW,oBAAM,KAAK,EAAE,QAAQ,IAAI,oBAAM,KAAK,EAAE,IAAI,IAAI,oBAAM,KAAK;AAC1E,aAAO,SAAS,OAAO,qBAAqB;AAAA,IAC9C,KAAK;AACH,aAAO,GAAG,oBAAM,EAAE,KAAK,oBAAM,KAAK,GAAG,KAAK,CAAC;AAAA,IAC7C,KAAK;AACH,aAAO,GAAG,oBAAM,EAAE,KAAK,oBAAM,KAAK,GAAG,OAAO,CAAC;AAAA,IAC/C,KAAK;AACH,aAAO,GAAG,oBAAM,EAAE,KAAK,oBAAM,KAAK,GAAG,MAAM,CAAC;AAAA,IAC9C,KAAK;AACH,aAAO,oBAAM,KAAK,EAAE,OAAO,OAAO;AAAA,IACpC,KAAK;AACH,aAAO,OAAO,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,CAAC;AAAA,IACnD,KAAK;AACH,aAAO,IAAI,KAAK,aAAa,SAAS;AAAA,QACpC,OAAO;AAAA,QACP,UAAU,OAAO;AAAA,MACnB,CAAC,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,IACzB,KAAK;AACH,aAAO,OAAO,KAAK,EAAE,YAAY;AAAA,IACnC,KAAK;AACH,aAAO,OAAO,KAAK,EAAE,YAAY;AAAA,IACnC;AACE,aAAO;AAAA,EACX;AACF;;;AFOmD,IAAAC,uBAAA;AA9CnD,IAAM,mBAAmB,CAAC,OAAe;AAEvC,MAAI,IAAI,GAAG,KAAK,EAAE,YAAY;AAC9B,MAAI,sBAAsB,KAAK,CAAC,GAAG;AACjC,QAAI,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,OAAK,IAAI,CAAC,EAAE,KAAK,EAAE;AAAA,EACxD;AAEA,QAAM,QAAgC;AAAA,IACpC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACA,MAAI,CAAC,EAAE,WAAW,GAAG,GAAG;AACtB,UAAM,QAAQ,EAAE,YAAY;AAC5B,QAAI,MAAM,KAAK,EAAG,KAAI,MAAM,KAAK;AAAA,QAC5B,QAAO;AAAA,EACd;AACA,MAAI,CAAC,sBAAsB,KAAK,CAAC,EAAG,QAAO;AAC3C,QAAM,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AACpC,QAAM,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AACpC,QAAM,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAEpC,QAAM,cAAc,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AACnD,SAAO,aAAa,MAAM,YAAY;AACxC;AAGO,IAAM,gBAAgB,CAAC,QAAkB;AAC9C,MAAI,OAAO,KAAM,QAAO;AAGxB,MAAI,eAAAC,QAAM,eAAe,GAAG,EAAG,QAAO;AAGtC,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,SAAU,QAAO;AAG/D,MAAI,MAAM,QAAQ,GAAG,EAAG,QAAO,IAAI,IAAI,CAAC,GAAG,MAAM,8CAAC,eAAAA,QAAM,UAAN,EAAwB,wBAAc,CAAC,KAAnB,CAAqB,CAAiB;AAG5G,MAAI,OAAO,QAAQ,UAAU;AAC3B,QAAI,UAAU,OAAO,OAAO,IAAI,SAAS,SAAU,QAAO,IAAI;AAC9D,QAAI,WAAW,OAAO,OAAO,IAAI,UAAU,SAAU,QAAO,IAAI;AAChE,QAAI;AACF,aAAO,KAAK,UAAU,GAAG;AAAA,IAC3B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAGA,SAAO,OAAO,GAAG;AACnB;AAEO,IAAM,sBAAsB,CACjC,UACA,eACA,OACA,KACA,kBAA4D,CAAC,GAC7DC,SACA,mBAAsD,CAAC,GACvD,SACG;AACH,QAAM,iBAAiB,eAAe,OAAOA,SAAQ,gBAAgB;AACrE,QAAM,WAAW,MAAM,eAAe,QAAQ;AAE9C,UAAQ,UAAU;AAAA;AAAA,IAEhB,KAAK;AACH,aAAO,8CAAC,UAAM,sBAAY,gBAAe;AAAA,IAE3C,KAAK;AACH,aACE,8CAAC,UAAK,WAAU,2BACb,yBAAe,YAAY,OAAO,UAAU,GAC/C;AAAA,IAGJ,KAAK;AACH,aAAO,8CAAC,UAAM,yBAAe,YAAY,OAAOA,OAAM,GAAE;AAAA,IAE1D,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,GAAG,eAAe,UAAU,EAAE,GAAG,YAAY,cAAc;AAAA,UACjE,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAW,2BAA2B,eAAe,aAAa,EAAE;AAAA,UAEnE,yBAAe,SAAS;AAAA;AAAA,MAC3B;AAAA;AAAA,IAIJ,KAAK;AACH,aACE,8CAAC,SAAI,WAAU,YACb;AAAA,QAAC,aAAAC;AAAA,QAAA;AAAA,UACC,KACE,YACA,kBACA,eAAe,YACf;AAAA,UAEF,KAAK,eAAe,OAAO;AAAA,UAC3B,OAAO,eAAe,SAAS;AAAA,UAC/B,QAAQ,eAAe,UAAU;AAAA,UACjC,WAAW,gBAAgB,eAAe,UAAU,iBAAiB,EAAE,IAAI,eAAe,aAAa,EAAE;AAAA,UACzG,OAAO;AAAA,YACL,cAAc,eAAe,UAAU,QAAQ;AAAA,YAC/C,WAAW;AAAA,UACb;AAAA;AAAA,MACF,GACF;AAAA,IAGJ,KAAK;AACH,UAAI,CAAC,eAAgB,QAAO;AAE5B,aACE;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,eAAe;AAAA,UACxB,MAAM,eAAe;AAAA,UACrB,QAAQ,eAAe;AAAA,UACvB,UAAU,eAAe;AAAA,UACzB,WAAW,eAAe;AAAA,UAC1B,OAAO;AAAA,YACL,GAAI,eAAe,QAAQ,EAAE,OAAO,eAAe,MAAM,IAAI,CAAC;AAAA,UAChE;AAAA;AAAA,MACF;AAAA,IAGJ,KAAK,SAAS;AACZ,YAAM,QACJ,eAAe,WAAW,cAAc,KACxC,eAAe,SACf;AAEF,UAAI,CAAC,eAAgB,QAAO;AAE5B,YAAM,YAAY,iBAAiB,KAAK;AACxC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,kDAAkD,KAAK,aAAa,SAAS,QAAQ,eAAe,aAAa,EAAE;AAAA,UAC9H,OAAO,EAAE,iBAAiB,OAAO,OAAO,UAAU;AAAA,UAEjD;AAAA;AAAA,MACH;AAAA,IAEJ;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,QAAQ,eAAe,SAAS;AACtC,YAAM,YAAYC,aAAY,eAAe,IAAgC;AAE7E,YAAM,gBACJ,OAAO,cAAc,aAAc,YAAuC;AAC5E,UAAI,CAAC,eAAgB,QAAO;AAE5B,YAAM,YAAY,iBAAiB,KAAK;AAExC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,qEAAqE,KAAK,eAAe,SAAS;AAAA,UAC7G,OAAO,EAAE,iBAAiB,OAAO,OAAO,UAAU;AAAA,UAEjD;AAAA,2BAAe,QACd,+EACG,0BAAgB,8CAAC,iBAAc,WAAU,WAAU,IAAK,8CAAa,kBAAZ,EAAgB,WAAU,WAAU,GAChG;AAAA,YAED;AAAA;AAAA;AAAA,MACH;AAAA,IAEJ;AAAA;AAAA,IAGA,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,eAAe,UAAU,KAAK,cAAc;AAAA,UAC3D,WAAW,8DAA8D,eAAe,aAAa,EAAE;AAAA,UAEtG,sBAAY,cAAc,SAAS;AAAA;AAAA,MACtC;AAAA,IAGJ,KAAK;AACH,aACE,+CAAC,WAAM,WAAU,2CACf;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,CAAC,CAAC;AAAA,YACX,UAAU,CAAC,MACT,eAAe,WAAW,KAAK,EAAE,OAAO,OAAO;AAAA,YAEjD,WAAU;AAAA;AAAA,QACZ;AAAA,QACA,8CAAC,SAAI,WAAU,qFACb,wDAAC,SAAI,WAAU,yGAAwG,GACzH;AAAA,SACF;AAAA,IAGJ,KAAK;AACH,aACE,8CAAC,SAAI,WAAU,uCACb;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,GAAG,YAAY,kBAAkB,CAAC,IAAI;AAAA;AAAA,MACxD,GACF;AAAA,IAGJ,KAAK,UAAU;AACb,YAAM,QAAQ,KAAK,MAAM,OAAO,YAAY,cAAc,KAAK,CAAC;AAChE,aACE,8CAAC,SAAI,WAAU,qBACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM;AAAA,UACN,WAAW,IAAI,QAAQ,oBAAoB;AAAA,UAC3C,MAAM,IAAI,QAAQ,YAAY;AAAA;AAAA,QAHzB;AAAA,MAIP,CACD,GACH;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,KAAK,IAAI,cAAc;AAAA,UAChC,UAAU,CAAC,KAAK,IAAI,aAAa;AAAA,UACjC,UAAU,KAAK,IAAI,yBAAyB;AAAA;AAAA,MAC9C;AAAA,IAGJ,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,yBAAyB,EAAE,QAAQ,OAAO,YAAY,cAAc,EAAE;AAAA;AAAA,MACxE;AAAA;AAAA,IAIJ,KAAK,UAAU;AACb,YAAM,iBACJ,gBAAgB,eAAe,gBAAgB,KAC/C,gBAAgB,eAAe,UAAU;AAC3C,UAAI;AACF,eACE;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP;AAAA,YACC,GAAG;AAAA;AAAA,QACN;AAEJ,aAAO,8CAAC,UAAK,qCAAuB;AAAA,IACtC;AAAA;AAAA,IAGA;AACE,aAAO,8CAAC,UAAM,4BAAkB,KAAI;AAAA,EACxC;AACF;;;AD5RA,IAAM,mBAAe,uCAAwB;AAG7C,SAAS,eAAe,KAAU,MAAc;AAC9C,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,KAAK,QAAQ,MAAM,GAAG,GAAG,GAAG;AAC7D;AAEO,IAAM,oBAAoB,CAC/B,QACA,kBAAkB,CAAC,GACnB,mBAAmB,CAAC,MACjB;AACH,SAAO,OAAO,QAAQ,IAAI,CAAC,QAAa;AACtC,UAAM,cAAc,IAAI,eAAe,IAAI;AAG3C,UAAM,aAAa,CAAC,QAAa;AAC/B,UAAI,CAAC,IAAK,QAAO;AAGjB,UAAI,OAAO,UAAU,eAAe,KAAK,KAAK,WAAW,GAAG;AAC1D,eAAO,cAAc,IAAI,WAAW,CAAC;AAAA,MACvC;AAEA,UAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,cAAM,MAAM,eAAe,KAAK,WAAW;AAC3C,eAAO,cAAc,GAAG;AAAA,MAC1B;AAEA,aAAO,cAAc,IAAI,WAAW,CAAC;AAAA,IACvC;AAGA,UAAM,eAAe,IAAI,QAAQ,CAAC;AAElC,UAAM,aAAa,CAAC;AACpB,QAAI,IAAI,QAAQ,IAAI,OAAO,GAAG;AAC5B,aAAO,OAAO,YAAY,EAAE,MAAM,IAAI,KAAK,CAAC;AAAA,IAC9C,OAAO;AACL,aAAO,OAAO,YAAY,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,OAAO,iBAAiB,CAAC;AACrF,aAAO,OAAO,cAAc,EAAE,WAAW,SAAS,CAAC;AAAA,IACrD;AAEA,WAAO,aAAa,SAAS,YAAY;AAAA,MACvC,GAAG;AAAA,MACH,GAAG;AAAA;AAAA,MAEH,IAAI,IAAI,MAAM;AAAA,MACd,QAAQ,IAAI;AAAA,MACZ,MAAM,CAAC,SAAS;AACd,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,MAAM,KAAK,IAAI;AACrB,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,eAAe,IAAI;AAAA,MACnB,oBAAoB,IAAI;AAAA;AAAA,MAExB,MAAM;AAAA,QACJ,GAAG;AAAA;AAAA,QAEH,GAAI,aAAa,cAAc,EAAE,aAAa,aAAa,YAAY,IAAI,CAAC;AAAA,MAC9E;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AFmBQ,IAAAC,uBAAA;AAlCD,SAAS,UAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,GAAkC;AAChC,QAAM,CAAC,eAAe,gBAAgB,IAAU,iBAA6B,CAAC,CAAC;AAC/E,QAAM,CAAC,kBAAkB,mBAAmB,IAAU,iBAAkC,CAAC,CAAC;AAC1F,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAsD,IAAI;AACpG,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAS,EAAE;AACrD,QAAM,YAAY,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAEhD,QAAM,YAAY,CAAC,GAAG,OAAO;AAE7B,MAAI,oBAAoB;AACtB,cAAU,QAAQ;AAAA,MAChB,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC,EAAE,OAAAC,OAAM,MACf;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAASA,OAAM,qBAAqB;AAAA,UACpC,UAAUA,OAAM,gCAAgC;AAAA;AAAA,MAClD;AAAA,MAEF,MAAM;AAAA,QACJ,WAAW;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,MACA,eAAe;AAAA,MACf,oBAAoB;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,kBAAkB,EAAE,SAAS,WAAW,mBAAmB,CAAC;AAChF,QAAM,CAAC,cAAc,eAAe,IAAU,iBAAS,CAAC,CAAC;AAEzD,QAAM,CAAC,eAAe,gBAAgB,IAAU,iBAAS,QAAQ;AAEjE,QAAM,YAAQ,mCAAc;AAAA,IAC1B,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,mBAAmB,WAAW;AAAA,QAChC,YAAY;AAAA,UACV,WAAW,uBAAuB;AAAA,UAClC,UAAU;AAAA,QACZ;AAAA,MACF,IAAI,CAAC;AAAA,IACP;AAAA,IACA,oBAAoB,CAAC,CAAC;AAAA,IACtB,sBAAsB,CAAC,YAAY;AACjC,sBAAgB,CAAC,QAAQ;AACvB,cAAM,WAAW,OAAO,YAAY,aAAa,QAAQ,GAAG,IAAI;AAEhE,cAAM,eAAe,OAAO,KAAK,QAAQ,EACtC,OAAO,CAAC,QAAQ,SAAS,GAAG,CAAC,EAC7B,IAAI,CAAC,UAAU,UAAU,OAAO,KAAK,CAAC,CAAC;AAE1C,0BAAkB,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,uBAAuB;AAAA,IACvB,0BAA0B;AAAA,IAC1B,qBAAiB,qCAAgB;AAAA,IACjC,yBAAqB,yCAAoB;AAAA,IACzC,uBAAuB,cAAc,mBAAmB,eAAW,2CAAsB,IAAI;AAAA,IAC7F,kBAAkB,mBAAmB;AAAA,IACrC,WAAW,mBAAmB,WAAW,KAAK,KAAK,eAAe,aAAa,IAAI;AAAA,IACnF,GAAI,mBAAmB,WACnB;AAAA,MACA,oBAAoB,CAAC,YAAY;AAC/B,cAAM,OAAO,MAAM,SAAS,EAAE;AAC9B,cAAM,OAAO,OAAO,YAAY,aAAa,QAAQ,IAAI,IAAI;AAC7D,uBAAe,KAAK,WAAW,KAAK,QAAQ;AAAA,MAC9C;AAAA,IACF,IACE,CAAC;AAAA,EACP,CAAC;AAED,QAAM,iBAAiB,CAAC,aAAqB,YAAoB,kBAAkB,MAAM;AACvF,QAAI,cAAc,iBAAiB;AACjC,aAAO,MAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IAC3D;AAEA,UAAM,mBAAmB,KAAK,IAAI,cAAc,GAAG,CAAC;AACpD,UAAM,oBAAoB,KAAK,IAAI,cAAc,GAAG,UAAU;AAE9D,UAAM,qBAAqB,mBAAmB;AAC9C,UAAM,sBAAsB,oBAAoB,aAAa;AAE7D,QAAI,CAAC,sBAAsB,qBAAqB;AAC9C,aAAO,CAAC,GAAG,GAAG,GAAG,KAAK;AAAA,IACxB;AACA,QAAI,sBAAsB,CAAC,qBAAqB;AAC9C,aAAO,CAAC,GAAG,OAAO,aAAa,GAAG,aAAa,GAAG,UAAU;AAAA,IAC9D;AACA,QAAI,sBAAsB,qBAAqB;AAC7C,aAAO,CAAC,GAAG,OAAO,cAAc,GAAG,aAAa,cAAc,GAAG,KAAK;AAAA,IACxE;AACA,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAY,MAAM,aAAa,MAAM,IAAI,IAAI,MAAM,aAAa;AAEtE,QAAM,uBAAuB,CAAC,MAA4C;AACxE,UAAM,UAAU,OAAO,EAAE,OAAO,KAAK;AACrC,UAAM,mBAAmB,MAAM,SAAS,EAAE,WAAW;AACrD,mBAAe,kBAAkB,OAAO;AACxC,qBAAiB,OAAO;AAAA,EAC1B;AAEA,QAAM,kBAAwB,gBAAQ,MAAM;AAC1C,UAAM,UAAU,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,OAAO,UAAQ,OAAO,YAAY;AACvE,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,YAAY,CAAC;AAEjB,SACE,+CAAC,SAAI,WAAU,qCAEZ;AAAA,KAAC,WACA,+CAAC,SAAI,WAAW,uCACd;AAAA,qDAAC,SAAI,WAAU,kCACZ;AAAA,SAAC,CAAC,gBAAiB,+CAAC,OAAE,WAAU,uBAAsB;AAAA;AAAA,UAAiB,aAAa,eAAe,OAAO,KAAK;AAAA,WAAE;AAAA,QACjH,gBACC,+CAAC,SAAI,WAAU,2CACb;AAAA,yDAAC,SAAI,WAAU,mBACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,aAAY;AAAA,gBACZ,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,KAAK;AAAA,gBAC7C,WAAW,CAAC,MAAM;AAChB,sBAAI,EAAE,QAAQ,WAAW,gBAAgB;AACvC,mCAAe,WAAW,KAAK,CAAC;AAAA,kBAClC;AAAA,gBACF;AAAA,gBACA,WAAU;AAAA;AAAA,YACZ;AAAA,YACA,8CAAC,gCAAO,WAAU,yCAAwC,MAAM,IAAI;AAAA,aACtE;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAM,iBAAiB,WAAW,KAAK,CAAC;AAAA,cAClD;AAAA;AAAA,UAED;AAAA,WACF;AAAA,SAEJ;AAAA,MAGA,+CAAC,WACC;AAAA,sDAAC,kBAAe,SAAO,MACrB;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAU;AAAA,YACX;AAAA;AAAA,QAED,GACF;AAAA,QACA,+CAAC,kBAAe,OAAM,OAAM,WAAU,sBACpC;AAAA,wDAAC,SAAI,WAAU,4BAA2B,iCAAmB;AAAA,UAE7D,+CAAC,WAAM,WAAU,oEACf;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAC;AAAA,gBACpE,KAAK,CAAC,UAAU;AACd,sBAAI,OAAO;AACT,0BAAM,gBACJ,MAAM,kBAAkB,EAAE,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC,KAC1D,CAAC,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAC;AAAA,kBAChE;AAAA,gBACF;AAAA,gBACA,UAAU,CAAC,MAAM;AACf,wBAAM,kBAAkB,EAAE;AAAA,oBAAQ,CAAC,QACjC,IAAI,iBAAiB,EAAE,OAAO,OAAO;AAAA,kBACvC;AAAA,gBACF;AAAA;AAAA,YACF;AAAA,YAAE;AAAA,aAEJ;AAAA,UAEC,MAAM,kBAAkB,EAAE,IAAI,CAAC,WAAW;AACzC,kBAAM,SAAS,OAAO,UAAU;AAChC,mBACE,+CAAC,WAAsB,WAAU,mCAC/B;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS,OAAO,aAAa;AAAA,kBAC7B,UAAU,CAAC,MAAM,OAAO,iBAAiB,EAAE,OAAO,OAAO;AAAA;AAAA,cAC3D;AAAA,cACC,OAAO,WAAW,aACf,OAAO,EAAE,QAAQ,QAAuB,MAAM,CAAC,IAC/C,OAAO,WAAW,WAChB,SACA,OAAO;AAAA,iBAVH,OAAO,EAYnB;AAAA,UAEJ,CAAC;AAAA,WACH;AAAA,SACF;AAAA,OACF;AAAA,IAIF,+CAAC,SAAM,WAAU,eACf;AAAA,oDAAC,eACE,gBAAM,gBAAgB,EAAE,IAAI,CAAC,OAC5B,8CAAC,YACE,aAAG,QAAQ,IAAI,CAAC,QAAQ,UAAU;AACjC,cAAM,UAAU,OAAO,OAAO,WAAW;AACzC,cAAM,YAAY,OAAO,OAAO,aAAa;AAC7C,cAAM,UAAU,YAAY,QAAQ,OAAO,OAAO,KAAK,WAAW,MAAM;AAExE,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO,OAAO,OAAO,QAAQ;AAAA,cAC7B,UAAU,OAAO,OAAO,UAAU;AAAA,cAClC,UAAU,OAAO,OAAO,UAAU;AAAA,YACpC;AAAA,YAEA,yDAAC,SAAI,WAAU,qCACb;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,2BAA2B,UAAU,mBAAmB,EAAE;AAAA,kBACrE,SAAS,MAAM;AACb,wBAAI,CAAC,QAAS;AACd,0BAAM,SACJ,YAAY,QAAQ,OAAO,OAAO,MAAM,WAAW,QAAQ,QACvD,SACA;AACN,kCAAc,EAAE,KAAK,OAAO,OAAO,IAAI,KAAK,OAAO,CAAC;AACpD,mCAAe,OAAO,OAAO,IAAI,MAAM;AAAA,kBACzC;AAAA,kBAEC;AAAA,wDAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,WAAW,CAAC;AAAA,oBAC9D,WACC,gFACG;AAAA,kCAAY,SAAS,8CAAC,iCAAQ,MAAM,IAAI,WAAU,iBAAgB;AAAA,sBAClE,YAAY,UAAU,8CAAC,mCAAU,MAAM,IAAI,WAAU,iBAAgB;AAAA,sBACrE,CAAC,WAAW,8CAAC,qCAAY,MAAM,IAAI,WAAU,iBAAgB;AAAA,uBAChE;AAAA;AAAA;AAAA,cAEJ;AAAA,cAEC,aACC,+CAAC,WACC;AAAA,8DAAC,kBAAe,SAAO,MACrB;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,oBAElC,wDAAC,6CAAgB,MAAM,0CAAa,WAAU,yBAAwB;AAAA;AAAA,gBACxE,GACF;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,YAAY;AAAA,oBACZ,WAAU;AAAA,oBACV,iBAAiB;AAAA,oBAEjB;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,CAAC,MAAM;AACf,4BAAE,eAAe;AACjB,gCAAM,WAAW,IAAI,SAAS,EAAE,aAAa;AAC7C,gCAAM,QAAS,SAAS,IAAI,QAAQ,KAAgB;AACpD,8BAAI,kBAAkB,OAAO;AAC3B,2CAAe,EAAE,WAAW,OAAO,OAAO,IAAI,YAAY,MAAM,CAAC;AAAA,0BACnE;AAAA,wBACF;AAAA,wBACA,WAAU;AAAA,wBAEV;AAAA,wEAAC,WAAM,SAAQ,UAAS,WAAU,qCAAoC,8BAEtE;AAAA,0BACA;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,aAAY;AAAA,8BACZ,cAAe,OAAO,OAAO,eAAe,KAAK;AAAA,8BACjD,WAAU;AAAA,8BACV,cAAa;AAAA;AAAA,0BACf;AAAA,0BACA,8CAAC,SAAI,WAAU,oBACb;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,WAAU;AAAA,8BACX;AAAA;AAAA,0BAED,GACF;AAAA;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA,iBACF;AAAA,eAEJ;AAAA;AAAA,UAjFK,UAAU,OAAO,EAAE,IAAI,KAAK;AAAA,QAkFnC;AAAA,MAEJ,CAAC,KA5FY,gBAAgB,GAAG,EAAE,EA6FpC,CACD,GACH;AAAA,MAEA,8CAAC,aACE,oBACC,+EACG,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,8CAAC,YACE,sBAAY,IAAI,CAACC,IAAG,MACnB,8CAAC,aAAkB,WAAU,OAC3B,wDAAC,UAAK,WAAU,qDAAoD,KADtD,CAEhB,CACD,KALY,CAMf,CACD,GACH,IACE,MAAM,YAAY,EAAE,KAAK,SAC3B,MAAM,YAAY,EAAE,KAAK,IAAI,CAAC,QAC5B,8CAAC,YACE,cAAI,gBAAgB,EAAE,IAAI,CAAC,MAAM,WAAW,QAAQ;AACnD,cAAM,OAAO,KAAK,OAAO,UAAU,QAAe,CAAC;AACnD,cAAM,cAAc,MAAM;AAC1B,cAAM,aAAa,cAAc,IAAI,SAAS;AAE9C,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,2CAA2C,MAAM,aAAa,EAAE,IAAI,cAAc,6DAA6D,EAAE;AAAA,YAC5J,OAAO;AAAA,cACL,OAAO,KAAK,OAAO,QAAQ;AAAA,cAC3B,UAAU,KAAK,OAAO,UAAU;AAAA,cAChC,UAAU,KAAK,OAAO,UAAU;AAAA,cAChC,GAAI,MAAM,aAAa,CAAC;AAAA,YAC1B;AAAA,YACA,SAAS,MAAM;AACb,kBAAI,eAAe,aAAa;AAC9B,4BAAY,KAAK,IAAI,UAAU,KAAK,OAAO,EAAE;AAAA,cAC/C;AAAA,YACF;AAAA,YAEC;AAAA,kDAAW,KAAK,OAAO,UAAU,MAAM,KAAK,WAAW,CAAC;AAAA,cAExD,cAAc,cAAc,WAAW,SAAS,KAC/C,8CAAC,SAAI,WAAU,uJACZ,qBAAW,IAAI,CAAC,WAAW;AAC1B,sBAAM,WAAW,OAAO,OAAO,YAAY,OAAO,SAAS;AAC3D,uBACE;AAAA,kBAAC;AAAA;AAAA,oBAEC,WAAW,qDAAqD,WAAW,+CAA+C,+BAA+B;AAAA,oBACzJ,SAAS,CAAC,UAAU;AAClB,4BAAM,gBAAgB;AACtB,0BAAI,UAAU;AACZ,sCAAc,KAAK,IAAI,UAAU,QAAQ;AAAA,sBAC3C,OAAO;AACL,sCAAc,KAAK,IAAI,UAAU,KAAK,OAAO,EAAE;AAAA,sBACjD;AAAA,oBACF;AAAA,oBACA,OAAO,OAAO;AAAA,oBAEb,iBAAO;AAAA;AAAA,kBAZH,OAAO;AAAA,gBAad;AAAA,cAEJ,CAAC,GACH;AAAA;AAAA;AAAA,UAtCG,QAAQ,KAAK,EAAE,IAAI,SAAS;AAAA,QAwCnC;AAAA,MAEJ,CAAC,KAlDY,IAAI,EAoDnB,CACD,IAED,8CAAC,YACC,wDAAC,aAAU,SAAS,YAAY,QAAQ,WAAU,oBAChD,wDAAC,UAAK,WAAU,sFAAqF,yBAErG,GACF,GACF,GAEJ;AAAA,OACF;AAAA,IAGC,cACC,+CAAC,SAAI,WAAU,yDACZ;AAAA,OAAC,WACA,+CAAC,SAAI,WAAU,2BACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP,UAAU;AAAA,YACV,WAAU;AAAA,YAET,0BAAgB,IAAI,CAAC,SACpB,+CAAC,YAAkB,OAAO,MACvB;AAAA;AAAA,cAAK;AAAA,iBADK,IAEb,CACD;AAAA;AAAA,QACH;AAAA,QACA,+CAAC,SAAI;AAAA;AAAA,UACG,MAAM,SAAS,EAAE,WAAW,YAAY;AAAA,UAAE;AAAA,UAAK;AAAA,WACvD;AAAA,SACF;AAAA,MAEF,+CAAC,SAAI,WAAU,2BACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,MAAM,aAAa;AAAA,YAClC,UAAU,CAAC,MAAM,qBAAqB;AAAA,YACtC,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,QACC;AAAA,UACC,MAAM,SAAS,EAAE,WAAW,YAAY;AAAA,UACxC,MAAM,aAAa;AAAA,UACnB;AAAA,QACF,EAAE,IAAI,CAAC,SAAS,UACd;AAAA,UAAC;AAAA;AAAA,YAEC,UAAU,YAAY;AAAA,YACtB,SAAS,MAAM,OAAO,YAAY,YAAY,MAAM,aAAa,UAAU,CAAC;AAAA,YAC5E,WAAW,4BAA4B,MAAM,SAAS,EAAE,WAAW,YAAY,MAAM,UACjF,4BACA,UAAU,IAAI,YAAY,QAAQ,mBAAmB,gBAAgB;AAAA,YAExE;AAAA;AAAA,UAPI;AAAA,QAQP,CACD;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,MAAM,SAAS;AAAA,YAC9B,UAAU,CAAC,MAAM,iBAAiB;AAAA,YAClC,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,SACF;AAAA,OACF;AAAA,KAEJ;AAEJ;;;AMtfM,IAAAC,uBAAA;AA5BN,IAAMC,SAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA0B;AACxB,QAAM,aAAa,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC;AACvD,QAAM,UAAU,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAE9C,QAAM,eAAe,OAAO,SAAS;AAErC,SACE,8CAAC,SAAI,WAAW,GAAG,aAAa,EAAE,cAAc,OAC9C;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,qBAAqB,eAAe,OAAQ,IAAI;AAAA,MAChD,cAAc,CAAC,WAAW,aAAa;AACrC,uBAAe,EAAE,MAAM,YAAY,GAAG,cAAc,SAAS,CAAC;AAAA,MAChE;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,CAAC,KAAK,QAAQ,eAAe,EAAE,SAAS,KAAK,YAAY,IAAI,CAAC;AAAA,MAC5E,gBAAgB,CAAC,YAAY,iBAAiB,EAAE,WAAW,QAAQ,WAAW,YAAY,QAAQ,WAAW,CAAC;AAAA,MAC9G,gBAAgB,CAAC,SAAS,iBAAiB,EAAE,YAAY,KAAK,CAAC;AAAA,MAC/D;AAAA,MACA,aAAa,CAAC,MAAM,aAAa;AAC/B,sBAAc,EAAE,IAAI,KAAK,IAAI,QAAQ,MAAM,SAAS,CAAC;AAAA,MACvD;AAAA,MACA,aAAa,CAAC,SAAS;AACrB,sBAAc,KAAK,EAAE;AAAA,MACvB;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,IAAO,gBAAQA;;;AC5Df,IAAAC,wBAIO;AAOH,IAAAC,uBAAA;AAFJ,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC5D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAA+B;AAC7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oCAAoC,SAAS;AAAA,MAC1D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,EAAE,GAAG,MAAM,GAA+B;AAChE,SAAO,8CAAC,QAAG,aAAU,mBAAmB,GAAG,OAAO;AACpD;AAOA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAwB;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAc,WAAW,SAAS;AAAA,MAClC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT,eAAe;AAAA,UACb,SAAS,WAAW,YAAY;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,GAAgD;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW,GAAG,0BAA0B,SAAS;AAAA,MAChD,GAAG;AAAA,MAEJ;AAAA,sDAAC,yCAAgB;AAAA,QACjB,8CAAC,UAAK,WAAU,mBAAkB,sBAAQ;AAAA;AAAA;AAAA,EAC5C;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,GAAG;AACL,GAAgD;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW,GAAG,0BAA0B,SAAS;AAAA,MAChD,GAAG;AAAA,MAEJ;AAAA,sDAAC,UAAK,WAAU,mBAAkB,kBAAI;AAAA,QACtC,8CAAC,0CAAiB;AAAA;AAAA;AAAA,EACpB;AAEJ;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,GAAiC;AAC/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW,GAAG,2CAA2C,SAAS;AAAA,MACjE,GAAG;AAAA,MAEJ;AAAA,sDAAC,4CAAmB,WAAU,UAAS;AAAA,QACvC,8CAAC,UAAK,WAAU,WAAU,wBAAU;AAAA;AAAA;AAAA,EACtC;AAEJ;;;ACtCQ,IAAAC,uBAAA;AA5DR,IAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AACF,MAA6B;AAE3B,QAAM,iBAAiB,MAAM;AAC3B,UAAM,QAA6B,CAAC;AAEpC,QAAI,cAAc,iBAAiB;AACjC,aAAO,MAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IAC3D;AAEA,UAAM,mBAAmB,KAAK,IAAI,cAAc,GAAG,CAAC;AACpD,UAAM,oBAAoB,KAAK,IAAI,cAAc,GAAG,UAAU;AAE9D,UAAM,qBAAqB,mBAAmB;AAC9C,UAAM,sBAAsB,oBAAoB,aAAa;AAE7D,QAAI,CAAC,sBAAsB,qBAAqB;AAC9C,YAAM,YAAY,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAC3D,aAAO,CAAC,GAAG,WAAW,OAAO,UAAU;AAAA,IACzC;AAEA,QAAI,sBAAsB,CAAC,qBAAqB;AAC9C,YAAM,aAAa,MAAM;AAAA,QACvB,EAAE,QAAQ,EAAE;AAAA,QACZ,CAAC,GAAG,MAAM,aAAa,IAAI;AAAA,MAC7B;AACA,aAAO,CAAC,GAAG,OAAO,GAAG,UAAU;AAAA,IACjC;AAEA,QAAI,sBAAsB,qBAAqB;AAC7C,YAAM,cAAc,MAAM;AAAA,QACxB,EAAE,QAAQ,EAAE;AAAA,QACZ,CAAC,GAAG,MAAM,mBAAmB;AAAA,MAC/B;AACA,aAAO,CAAC,GAAG,OAAO,GAAG,aAAa,OAAO,UAAU;AAAA,IACrD;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,SAAiB;AACzC,QAAI,QAAQ,KAAK,QAAQ,cAAc,SAAS,aAAa;AAC3D,mBAAa;AAAA,QACX;AAAA,QACA,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,cAAc,eAAe;AAEnC,SACE,+CAAC,SAAI,WAAU,2DAEb;AAAA,mDAAC,SAAI,WAAU,2BACb;AAAA,oDAAC,OAAE,WAAU,mDAAkD,6BAAe;AAAA,MAC9E;AAAA,QAAC;AAAA;AAAA,UACC,cAAc,OAAO,OAAO;AAAA,UAC5B,eAAe,CAAC,UAAU;AACxB,yBAAa,EAAE,MAAM,GAAG,cAAc,OAAO,KAAK,EAAE,CAAC;AAAA,UACvD;AAAA,UAEA;AAAA,0DAAC,iBAAc,WAAU,aACvB,wDAAC,eAAY,aAAY,UAAS,GACpC;AAAA,YACA,+CAAC,iBACC;AAAA,4DAAC,cAAW,OAAM,KAAI,eAAC;AAAA,cACvB,8CAAC,cAAW,OAAM,MAAK,gBAAE;AAAA,cACzB,8CAAC,cAAW,OAAM,MAAK,gBAAE;AAAA,cACzB,8CAAC,cAAW,OAAM,MAAK,gBAAE;AAAA,eAC3B;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,8CAAC,cAAW,WAAU,eACpB,yDAAC,qBACC;AAAA,oDAAC,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,UAC/C,WAAW,gBAAgB,IAAI,mCAAmC;AAAA;AAAA,MACpE,GACF;AAAA,MAEC,YAAY,IAAI,CAAC,YAAY,UAC5B,8CAAC,kBACE,yBAAe,QACd,8CAAC,sBAAmB,IAEpB;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,iBAAiB,UAAoB;AAAA,UACpD,UAAU,gBAAgB;AAAA,UAC1B,WAAU;AAAA,UAET;AAAA;AAAA,MACH,KAViB,KAYrB,CACD;AAAA,MAED,8CAAC,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,UAC/C,WAAW,gBAAgB,aAAa,mCAAmC;AAAA;AAAA,MAC7E,GACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEA,IAAO,qBAAQ;;;ACnIf,IAAAC,iBAAwB;AAExB,IAAAC,wBAAmC;;;ACAnC,yBAAoC;AACpC,IAAAC,wBAAgC;AAOvB,IAAAC,uBAAA;AAHT,SAASC,WAAU;AAAA,EACjB,GAAG;AACL,GAAyD;AACvD,SAAO,8CAAoB,yBAAnB,EAAwB,aAAU,aAAa,GAAG,OAAO;AACnE;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,GAAG;AACL,GAAyD;AACvD,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,4BAA4B,SAAS;AAAA,MAClD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE,8CAAoB,2BAAnB,EAA0B,WAAU,QACnC;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAC,yCAAgB,WAAU,+GAA8G;AAAA;AAAA;AAAA,EAC3I,GACF;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MACT,GAAG;AAAA,MAEJ,wDAAC,SAAI,WAAW,GAAG,aAAa,SAAS,GAAI,UAAS;AAAA;AAAA,EACxD;AAEJ;;;AC1DI,IAAAC,uBAAA;AAFJ,SAAS,KAAK,EAAE,WAAW,GAAG,MAAM,GAAgC;AAClE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAgC;AACvE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,8BAA8B,SAAS;AAAA,MACpD,GAAG;AAAA;AAAA,EACN;AAEJ;AAyBA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAgC;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,QAAQ,SAAS;AAAA,MAC9B,GAAG;AAAA;AAAA,EACN;AAEJ;;;AFpBQ,IAAAC,uBAAA;AA5BR,SAAS,SACP,MACA,KACkB;AAClB,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,KAAK,GAAG;AACjB;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB,QAAQ;AAAA,EACR;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA4B;AAE1B,QAAM,WAAoB,wBAAQ,MAAM;AACtC,QAAI,MAAM,QAAQ,MAAM,IAAI,GAAG;AAC7B,aAAO,MAAM;AAAA,IACf;AACA,WAAO,CAAC;AAAA,EACV,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,MAAI,SAAS;AACX,WACE,8CAAC,QAAK,WAAW,GAAG,UAAU,SAAS,GACrC,yDAAC,eAAY,WAAU,8CACrB;AAAA,oDAAC,sCAAa,WAAU,8CAA6C;AAAA,MACrE,8CAAC,UAAK,WAAU,sCAAqC,mCAErD;AAAA,OACF,GACF;AAAA,EAEJ;AAEA,MAAI,KAAK,WAAW,GAAG;AACrB,WACE,8CAAC,QAAK,WAAW,GAAG,UAAU,SAAS,GACrC,wDAAC,eAAY,WAAU,+CAA8C,mCAErE,GACF;AAAA,EAEJ;AAEA,SACE,8CAAC,QAAK,WAAW,GAAG,UAAU,SAAS,GACrC,wDAACC,YAAA,EAAU,MAAK,UAAS,aAAW,MAAC,cAAa,WAChD,yDAAC,iBAAc,OAAM,WAAU,WAAU,YACvC;AAAA,kDAAC,cAAW,WAAU,uEACpB;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA,wDAAC,aAAU,WAAU,2BAClB,iBACH;AAAA;AAAA,IACF,GACF;AAAA,IAEA,8CAAC,oBAAiB,SAAO,MACvB,wDAAC,eAAY,WAAU,aACrB,wDAAC,QAAG,WAAU,uDACX,eAAK,IAAI,CAAC,MAAM,UAAU;AAEzB,YAAM,KAAM,KAAa,MAAM;AAC/B,YAAM,WAAW,SAAS,MAAM,QAAQ;AACxC,YAAM,iBAAiB,SAAS,MAAM,cAAc;AACpD,YAAM,eAAe,SAAS,MAAM,YAAY;AAEhD,YAAM,YAAY,OAAO,YAAY,EAAE;AACvC,YAAM,kBACJ,kBAAkB,OAAO,OAAO,cAAc,IAAI;AACpD,YAAM,gBACJ,gBAAgB,OAAO,IAAI,KAAK,YAAmB,IAAI;AAEzD,aACE,+CAAC,QAAY,WAAU,iBACrB;AAAA,sDAAC,UAAK,WAAU,uHACd,wDAAC,SAAI,WAAU,8CACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,YACF;AAAA;AAAA,QACF,GACF,GACF;AAAA,QAEA;AAAA,UAACA;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,aAAW;AAAA,YACX,WAAU;AAAA,YAEV,yDAAC,iBAAc,OAAO,QAAQ,KAAK,EAAE,IAAI,WAAU,YACjD;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,kBACF;AAAA,kBAEA,yDAAC,SAAI,WAAU,uBACb;AAAA,kEAAC,UAAK,WAAU,oCACb,qBACH;AAAA,oBACA,8CAAC,UAAK,WAAU,qCACb,cAAI,KAAK,eAAe,WAAW;AAAA,sBAClC,WAAW;AAAA,sBACX,WAAW;AAAA,oBACb,CAAC,EAAE,OAAO,iBAAiB,oBAAI,KAAK,CAAC,GACvC;AAAA,qBACF;AAAA;AAAA,cACF;AAAA,cAEA,8CAAC,oBAAiB,WAAU,QACzB,6BACC,8CAAC,OAAE,WAAU,+DACV,2BACH,GAEJ;AAAA,eACF;AAAA;AAAA,QACF;AAAA,WA5CO,EA6CT;AAAA,IAEJ,CAAC,GACH,GACF,GACF;AAAA,KACF,GACF,GACF;AAEJ;AAEA,IAAO,0BAAQ;;;AGlKf,IAAAC,iBAA+C;AAE/C,IAAAC,wBAAkC;AAClC,IAAAC,eAAiB;AACjB,IAAAC,qBAAuC;;;ACAvC,sBAAiC;AACjC,IAAAC,wBAAsB;AAOb,IAAAC,uBAAA;AAHT,SAAS,OAAO;AAAA,EACd,GAAG;AACL,GAAsD;AACpD,SAAO,8CAAiB,sBAAhB,EAAqB,aAAU,UAAU,GAAG,OAAO;AAC7D;AAQA,SAAS,aAAa;AAAA,EACpB,GAAG;AACL,GAAwD;AACtD,SAAO,8CAAiB,wBAAhB,EAAuB,aAAU,iBAAiB,GAAG,OAAO;AACtE;AAQA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,GAAG;AACL,GAAyD;AACvD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,GAAG;AACL,GAEG;AACD,SACE,+CAAC,gBAAa,aAAU,iBACtB;AAAA,kDAAC,iBAAc;AAAA,IACf;AAAA,MAAiB;AAAA,MAAhB;AAAA,QACC,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QAEH;AAAA;AAAA,UACA,mBACC;AAAA,YAAiB;AAAA,YAAhB;AAAA,cACC,aAAU;AAAA,cACV,WAAU;AAAA,cAEV;AAAA,8DAAC,+BAAM;AAAA,gBACP,8CAAC,UAAK,WAAU,WAAU,mBAAK;AAAA;AAAA;AAAA,UACjC;AAAA;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,gDAAgD,SAAS;AAAA,MACtE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA,GAAG;AACL,GAAuD;AACrD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC5D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAA6D;AAC3D,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA;AAAA,EACN;AAEJ;;;AClIA,oBAAsB;AAaf,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,UAAU;AAAA,IACd,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,QAAQ,cACJ;AAAA,MACA,OAAO;AAAA,MACP,SAAS,aAAa,MAAM;AAAA,MAAE;AAAA,IAChC,IACE;AAAA,EACN;AAEA,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,0BAAM,QAAQ,OAAO,OAAO;AAC5B;AAAA,IACF,KAAK;AACH,0BAAM,MAAM,OAAO,OAAO;AAC1B;AAAA,IACF,KAAK;AACH,0BAAM,KAAK,OAAO,OAAO;AACzB;AAAA,IACF,KAAK;AACH,0BAAM,QAAQ,OAAO,OAAO;AAC5B;AAAA,IACF;AACE,+BAAM,OAAO,OAAO;AAAA,EACxB;AACF;AASO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,cAAc;AAChB,GAA0C;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,SAAK,qBAAM,OAAO;AAAA,MACtB;AAAA,MACA,UAAU;AAAA,MACV,aAAa;AAAA,MACb,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS,MAAM;AACb,kBAAQ,IAAI;AACZ,8BAAM,QAAQ,EAAE;AAAA,QAClB;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS,MAAM;AACb,kBAAQ,KAAK;AACb,8BAAM,QAAQ,EAAE;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AF2EU,IAAAC,uBAAA;AA3IV,IAAM,OAAO,CAAC,EAAE,WAAW,OAAO,MAAM,cAAc,UAAU,YAAY,YAAY,OAAO,QAAQ,WAAW,aAAa,YAAY,SAAS,eAAe,gBAAgB,MAAiB;AAClM,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAwB,IAAI;AAC9D,QAAM,sBAAkB,gCAAY;AAEpC,WAAS,WAAW,QAAe,CAAC,GAAU;AAC5C,UAAM,UAAU,oBAAI,IAAiB;AAGrC,UAAM,QAAQ,UAAQ;AACpB,cAAQ,IAAI,KAAK,SAAS;AAAA,QACxB,GAAG;AAAA,QACH,KAAK,KAAK,cAAc,KAAK;AAAA,QAC7B,QAAQ,KAAK,eAAe,MAAM;AAAA,QAClC,YAAY;AAAA,QACZ,UAAU,CAAC;AAAA,MACb,CAAC;AAAA,IACH,CAAC;AAED,UAAM,YAAmB,CAAC;AAG1B,UAAM,QAAQ,UAAQ;AACpB,UAAI,KAAK,aAAa,UAAU,GAAG;AACjC,cAAM,SAAS,QAAQ,IAAI,KAAK,aAAa,UAAU,CAAC;AACxD,YAAI,QAAQ;AACV,iBAAO,SAAU,KAAK,QAAQ,IAAI,KAAK,OAAO,CAAE;AAAA,QAClD;AAAA,MACF,OAAO;AACL,kBAAU,KAAK,QAAQ,IAAI,KAAK,OAAO,CAAE;AAAA,MAC3C;AAAA,IACF,CAAC;AAGD,UAAM,YAAY,CAAC,SACjB,KACG,KAAK,CAAC,GAAG,OAAO,EAAE,cAAc,MAAM,EAAE,cAAc,EAAE,EACxD,IAAI,UAAQ;AACX,YAAM,iBAAiB,UAAU,KAAK,YAAY,CAAC,CAAC;AACpD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,QACV,YAAY,eAAe,SAAS;AAAA,MACtC;AAAA,IACF,CAAC;AAEL,WAAO,UAAU,SAAS;AAAA,EAC5B;AAEA,QAAM,cAAU,wBAAQ,MAAM;AAC5B,QAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC;AAClC,QAAI,WAAW,SAAU,QAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC9D,WAAO,WAAW,IAAI;AAAA,EACxB,GAAG,CAAC,MAAM,QAAQ,WAAW,aAAa,UAAU,CAAC;AAErD,QAAM,cACJ;AACF,QAAM,qBAAqB,gBAAgB,OAAO,aAAa,MAAM;AACrE,QAAM,uBAAuB,kBAAkB,SAAS,eAAe,MAAM;AAC7E,QAAM,gBAAgB,GAAG,kBAAkB,IAAI,oBAAoB;AACnE,QAAM,eAAe,GAAG,qBAAqB,mBAAmB,QAAQ,OAAO,WAAW,IAAI,kBAAkB,IAAI,uBAAuB,qBAAqB,QAAQ,SAAS,aAAa,IAAI,kBAAkB;AAEpN,QAAM,WAAW,CAAC,SAAkB;AAClC,QAAI,CAAC,KAAM,QAAO;AAGlB,UAAM,QAAQ,CAAC,MAAc;AAC3B,aAAO,EAAE,SAAS,GAAG,EAAG,KAAI,EAAE,MAAM,GAAG,EAAE;AACzC,aAAO;AAAA,IACT;AACA,UAAM,UAAU,MAAM,YAAY,mBAAmB,EAAE;AACvD,UAAM,SAAS,MAAM,IAAI;AAEzB,QAAI,CAAC,WAAW,CAAC,OAAQ,QAAO;AAGhC,QAAI,YAAY,OAAQ,QAAO;AAG/B,QAAI,QAAQ,WAAW,MAAM,KAAK,OAAO,WAAW,OAAO,EAAG,QAAO;AAGrE,UAAM,cAAc,QAAQ,MAAM,GAAG,EAAE,IAAI;AAC3C,UAAM,aAAa,OAAO,MAAM,GAAG,EAAE,IAAI;AAEzC,WAAO,CAAC,CAAC,eAAe,CAAC,CAAC,cAAc,gBAAgB;AAAA,EAC1D;AAEA,QAAM,iBAAiB,CAAC,QAAa;AACnC,QAAI,CAAC,MAAM,QAAQ,IAAI,QAAQ,EAAG,QAAO;AACzC,WAAO,IAAI,SAAS,KAAK,CAAC,UAAe,SAAS,MAAM,GAAG,CAAC;AAAA,EAC9D;AAEA,QAAM,aAAS,8BAAU;AAEzB,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAS,KAAK;AAC1D,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAwB,IAAI;AAEhE,QAAM,wBAAoB;AAAA,IACxB,CAAC,GAAwC,QAAgB;AACvD,UAAI,WAAW;AACb,UAAE,eAAe;AACjB,sBAAc,GAAG;AAEjB,wBAAgB;AAAA,UACd,SAAS;AAAA,UACT,OAAO;AAAA,UACP,aAAa,6BAA6B,GAAG;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY;AACd,wBAAkB,KAAK;AACvB,aAAO,KAAK,UAAU;AAAA,IACxB;AAAA,EACF;AAEA,MAAI;AAEJ,QAAM,mBAAmB,CAAC,KAAU,UAAkB;AACpD,UAAM,SAAS,SAAS,IAAI,GAAG,KAAK,eAAe,GAAG;AACtD,UAAM,eAAe,CAAC,aAAa,SAAS,gBAAgB,cAAc,IAAI,aAAa,EAAE,EAAE,KAAK,GAAG;AACvG,UAAM,aAAa;AAAA,MACjB,GAAG,IAAI;AAAA,MACP,iBAAiB,UAAU,gBAAgB,gBAAgB;AAAA,MAC3D,OAAO,UAAU,kBAAkB,kBAAkB;AAAA,MACrD,QAAQ,UAAU,kBAAkB,aAAa,eAAe,KAAK;AAAA,IACvE;AAEA,QAAI,MAAM,QAAQ,IAAI,QAAQ,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI,YAAY;AAC5E,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM,cAAc;AAAA,UACpB,cAAc,CAAC,SAAS,aAAa,OAAO,QAAQ,IAAI;AAAA,UAExD;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,YAAY;AAAA,gBAC1B,cAAc,MAAM;AAClB,+BAAa,OAAO;AACpB,+BAAa,KAAK;AAAA,gBACpB;AAAA,gBACA,cAAc,MAAM;AAClB,4BAAU,WAAW,MAAM,aAAa,IAAI,GAAG,GAAG;AAAA,gBACpD;AAAA,gBACA,OAAO;AAAA,gBAEN;AAAA,sBAAI;AAAA,kBACL,8CAAC,qCAAY,WAAU,sBAAqB;AAAA;AAAA;AAAA,YAC9C;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,YAAY;AAAA,gBACZ,WAAU;AAAA,gBACV,cAAc,MAAM;AAClB,+BAAa,OAAO;AACpB,+BAAa,KAAK;AAAA,gBACpB;AAAA,gBACA,cAAc,MAAM;AAClB,4BAAU,WAAW,MAAM,aAAa,IAAI,GAAG,GAAG;AAAA,gBACpD;AAAA,gBAEC,cAAI,SAAS,IAAI,CAAC,MAAWC,WAC5B;AAAA,kBAAC;AAAA;AAAA,oBAEC,SAAO;AAAA,oBACP,WAAU;AAAA,oBAEV;AAAA,sBAAC,aAAAC;AAAA,sBAAA;AAAA,wBACC,MAAM,KAAK,OAAO;AAAA,wBAClB,QAAQ,KAAK,mBAAmB,WAAW;AAAA,wBAC3C,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,OAAO,GAAG;AAAA,wBACpD,eAAK;AAAA;AAAA,oBAAO;AAAA;AAAA,kBART,KAAK,MAAMD;AAAA,gBASlB,CACD;AAAA;AAAA,YACH;AAAA;AAAA;AAAA,QA3CK;AAAA,MA4CP;AAAA,IAEJ;AAEA,WAAO,IAAI,MACT;AAAA,MAAC,aAAAC;AAAA,MAAA;AAAA,QAEC,MAAM,IAAI;AAAA,QACV,QAAQ,IAAI,mBAAmB,WAAW;AAAA,QAC1C,WAAW;AAAA,QAAc,OAAO;AAAA,QAChC,SAAS,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,GAAG;AAAA,QAElD,cAAI;AAAA;AAAA,MANA;AAAA,IAOP,IAEA,8CAAC,SAAgB,WAAW,cAAc,OAAO,YAAY,MAAK,UAAS,UAAU,GAClF,cAAI,UADG,KAEV;AAAA,EAEJ;AAEA,QAAM,mBAAmB,MACvB,+CAAC,gBACC;AAAA,mDAAC,uBAAoB,WAAU,+EAC7B;AAAA,oDAAC,8BAAK,WAAU,WAAU;AAAA,MAAE;AAAA,OAE9B;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,YAAY;AAAA,QACZ,WAAU;AAAA,QAET,kBAAQ,IAAI,CAAC,KAAU,MAAc;AACpC,gBAAM,cACJ,MAAM,QAAQ,IAAI,QAAQ,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI;AAEhE,cAAI,aAAa;AACf,mBACE,+CAAC,mBACC;AAAA,4DAAC,0BAAuB,WAAU,2HAC/B,cAAI,QACP;AAAA,cACA,8CAAC,0BAAuB,WAAU,4CAC/B,cAAI,SAAS,IAAI,CAAC,MAAW,UAC5B;AAAA,gBAAC;AAAA;AAAA,kBAEC,SAAO;AAAA,kBACP,WAAU;AAAA,kBAEV,wDAAC,aAAAA,SAAA,EAAK,MAAM,KAAK,OAAO,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,OAAO,GAAG,GAAI,eAAK,QAAO;AAAA;AAAA,gBAJ5F,KAAK,MAAM;AAAA,cAKlB,CACD,GACH;AAAA,iBAdoB,CAetB;AAAA,UAEJ;AAEA,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,SAAO;AAAA,cACP,WAAU;AAAA,cAEV,wDAAC,aAAAA,SAAA,EAAK,MAAM,IAAI,OAAO,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,GAAG,GAAI,cAAI,QAAO;AAAA;AAAA,YAJzF;AAAA,UAKP;AAAA,QAEJ,CAAC;AAAA;AAAA,IACH;AAAA,KACF;AAGF,QAAM,cAAc,aAAa,eAAe,YAAY,eAAe,WAAW;AACtF,QAAM,eAAe,aAAa,eAAe,YAAY;AAE7D,SACE,gFACE;AAAA,mDAAC,SAAI,WAAW,GAAG,YAAY,SAAS,GAAG,OACxC;AAAA,uBAAiB,SAChB,gBACE,8CAAC,SAAI,WAAU,kBACb,wDAAC,SAAI,WAAW,cAAc,eAAe,yBAAyB,UAAU,IAC7E,kBAAQ,IAAI,gBAAgB,GAC/B,GACF,IAGF,8CAAC,SAAI,WAAU,kBACb,wDAAC,SAAI,WAAW,cAAc,eAAe,yBAAyB,UAAU,IAC7E,kBAAQ,IAAI,gBAAgB,GAC/B,GACF;AAAA,MAGD,gBAAgB,SACf,eAAe,8CAAC,SAAK,2BAAiB,GAAE,IAExC,8CAAC,SAAI,WAAU,kBAAkB,2BAAiB,GAAE;AAAA,OAExD;AAAA,IAEA,8CAAC,UAAO,MAAM,gBAAgB,cAAc,mBAC1C,yDAAC,iBAAc,WAAU,aACvB;AAAA,qDAAC,gBACC;AAAA,sDAAC,eAAY,2BAAa;AAAA,QAC1B,8CAAC,qBAAkB,kFAEnB;AAAA,SACF;AAAA,MACA,+CAAC,gBACC;AAAA,sDAAC,UAAO,WAAU,2CAA0C,SAAQ,WAAU,SAAS,MAAM,kBAAkB,KAAK,GAAG,oBAEvH;AAAA,QACA,8CAAC,UAAO,WAAU,0CAAyC,SAAS,aAAa,uBAAS;AAAA,SAC5F;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEA,IAAO,eAAQ;;;AGhUf,IAAAC,iBAA2C;;;ACC3C,uBAAkC;AAS9B,IAAAC,uBAAA;AALJ,SAAS,gBAAgB;AAAA,EACvB,gBAAgB;AAAA,EAChB,GAAG;AACL,GAA2D;AACzD,SACE;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,QAAQ;AAAA,EACf,GAAG;AACL,GAAuD;AACrD,SACE,8CAAC,mBACC,wDAAkB,uBAAjB,EAAsB,aAAU,WAAW,GAAG,OAAO,GACxD;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB,GAAG;AACL,GAA0D;AACxD,SAAO,8CAAkB,0BAAjB,EAAyB,aAAU,mBAAmB,GAAG,OAAO;AAC1E;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,GAAG;AACL,GAA0D;AACxD,SACE,8CAAkB,yBAAjB,EACC;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAkB,wBAAjB,EAAuB,WAAU,sGAAqG;AAAA;AAAA;AAAA,EACzI,GACF;AAEJ;;;AD4Ec,IAAAC,uBAAA;AA9Hd,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,aAAa;AACf,MAAmB;AACjB,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,EAAE;AACjD,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AACpD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAc,IAAI;AAClE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAc,IAAI;AAEhE,gCAAU,MAAM;AACd,QAAI,cAAc;AAChB,qBAAe,YAAY;AAAA,IAC7B,OAAO;AACL,qBAAe,UAAU,OAAO,SAAS,IAAI,OAAO,CAAC,EAAE,OAAO,IAAI,IAAI;AAAA,IACxE;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,cAAc,CAAC,aAAqB;AACxC,mBAAe,QAAQ;AACvB,oBAAgB,QAAQ;AACxB,UAAM,EAAE,YAAY,YAAY,IAAI,iBAAiB,QAAQ,QAAQ;AAErE,uBAAmB,UAAU;AAC7B,wBAAoB,WAAW;AAAA,EACjC;AAEA,QAAM,YAAY,MAAM;AACtB,QAAI,CAAC,UAAU,OAAO,WAAW,EAAG;AACpC,UAAM,eAAe,OAAO,UAAU,CAAC,UAAe,MAAM,OAAO,MAAM,WAAW;AAEpF,QAAI,eAAe,MAAM,OAAO,QAAQ;AACtC,YAAM,kBAAkB,OAAO,YAAY;AAC3C,kBAAY,gBAAgB,OAAO,CAAC;AACpC,qBAAe,IAAI;AACnB;AAAA,IACF;AAEA,QAAI,eAAe,OAAO,SAAS,GAAG;AACpC,YAAM,eAAe,OAAO,YAAY;AACxC,kBAAY,aAAa,OAAO,CAAC;AACjC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,UAAU,OAAO,SAAS,IAAI,OAAO,OAAO,SAAS,CAAC,EAAE,OAAO,IAAI;AACrF,QAAM,WAAW,eAAe;AAEhC,QAAM,eAAe,CAAC,aAAkB;AACtC,QAAI,CAAC,YAAY,aAAa,eAAe,gBAAgB,UAAW;AACxE,mBAAe,QAAQ;AACvB,QAAI,gBAAgB;AAClB,sBAAgB,QAAQ;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,mBAAmB,CACvB,OACA,MACA,OAAY,SAC4C;AACxD,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,EAAE,YAAY,MAAM,aAAa,KAAK;AAAA,IAC/C;AACA,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,aAAO,EAAE,YAAY,MAAM,aAAa,KAAK;AAAA,IAC/C;AAEA,eAAW,QAAQ,OAAO;AACxB,YAAM,cAAc,QAAQ;AAE5B,UAAI,OAAO,OAAO,MAAM,MAAM;AAC5B,eAAO;AAAA,UACL,YAAY,QAAQ;AAAA,UACpB,aAAa;AAAA,QACf;AAAA,MACF;AAEA,YAAM,SAAS,iBAAiB,MAAM,UAAU,MAAM,WAAW;AACjE,UAAI,OAAO,aAAa;AACtB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,EAAE,YAAY,MAAM,aAAa,KAAK;AAAA,EAC/C;AAEA,gCAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3C,yBAAmB,IAAI;AACvB,0BAAoB,IAAI;AACxB;AAAA,IACF;AAEA,UAAM,EAAE,YAAY,YAAY,IAAI,iBAAiB,QAAQ,YAAY;AAEzE,uBAAmB,UAAU;AAC7B,wBAAoB,WAAW;AAAA,EACjC,GAAG,CAAC,cAAc,MAAM,CAAC;AAEzB,QAAM,uBAAuB,eAAgB,kBAAkB,OAAO,MAAM;AAC5E,QAAM,WAAW,wBAAwB,WAAW;AAEpD,SACE,8CAAC,SAAI,WAAsB,OACzB;AAAA,IAAC;AAAA;AAAA,MAAI,WAAW;AAAA;AAAA;AAAA;AAAA,UAIZ,WAAW,eAAe,KAAK;AAAA;AAAA,MAIjC;AAAA,sDAAC,SAAI,WAAU,sDACb,wDAAC,YAAO,WAAU,+CAChB,wDAAC,SAAI,WAAU,yBAAwB,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAC/E,wDAAC,UAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,kBAAiB,GACxF,GACF,GACF;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YAAI,WAAW;AAAA;AAAA;AAAA,YAGZ,WAAW,yBAAyB,SAAS;AAAA;AAAA,YAG9C,oBACC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,GAAG,UAC1B;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMP,WAAW,WAAW,EAAE;AAAA;AAAA,gBAE5B,UAAQ;AAAA;AAAA,cATH;AAAA,YAUP,CACD,KACE,UAAU,CAAC,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,OAAiF,UAAkB;AAChJ,oBAAM,eAAe,OAAO,UAAU,CAAC,MAAW,EAAE,OAAO,MAAM,WAAW;AAC5E,oBAAM,mBAAmB,wBAAwB,SAAS;AAC1D,oBAAM,WAAW,CAAC,wBAAwB,UAAU;AACpD,kBAAI,aAAa;AAEjB,kBAAI,MAAM,eAAe,WAAW,KAAK,MAAM,cAAc,OAAO;AAClE,6BAAa;AAAA,cACf;AAEA,kBAAI,aAAa,MAAM,SAAS;AAChC,kBAAI,MAAM,OAAO,MAAM,mBAAmB,OAAO,KAAK,kBAAkB,OAAO,MAAM,MAAM,OAAO,GAAG;AACnG,6BAAa,mBAAmB,SAAS,KAAK;AAC9C,6BAAa;AAEb,oBAAI,iBAAiB,eAAe,WAAW,KAAK,iBAAiB,cAAc,OAAO;AACxF,+BAAa;AAAA,gBACf;AAAA,cACF;AACA,oBAAM,WAAW,OAAO,MAAM,OAAO,MAAM,WAAW,MAAM,OAAO,IAAI,KAAK,UAAU,MAAM,OAAO,CAAC;AACpG,qBACE,8CAAC,eAAAC,QAAM,UAAN,EACC,yDAAC,WAAQ,eAAe,KAAK,yBAAuB,MAClD;AAAA,8DAAC,kBAAe,SAAO,MACrB;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW;AAAA;AAAA;AAAA;AAAA,sBAIX,WAAW,sCACL,mBAAmB,aACjB,iEAAiE;AAAA,sBACzE,WAAW,8BAA8B,EAAE;AAAA;AAAA,oBAE3C,SAAS,MAAM;AACb,0BAAI,qBAAsB;AAC1B,mCAAa,MAAM,OAAO,CAAC;AAAA,oBAC7B;AAAA,oBAEC;AAAA;AAAA,gBACH,GACF;AAAA,gBAEA,8CAAC,kBAAe,WAAU,6DACxB,wDAAC,UAAK,wDAAC,OAAG,sBAAW,GAAI,GAC3B;AAAA,gBAGC,CAAC,YAAY,QAAQ,OAAO,SAAS,KACpC,8CAAC,SAAI,WAAU,+DAA8D;AAAA,mBA3BvB,QA6B1D,KA9BmB,QA+BrB;AAAA,YAEJ,CAAC;AAAA;AAAA,QACH;AAAA,QAGC,aACC;AAAA,UAAC;AAAA;AAAA,YAAI,WAAW;AAAA;AAAA,cAEZ,WAAW,yBAAyB,SAAS;AAAA;AAAA,YAG/C;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA;AAAA;AAAA,4BAGG,WAAW,kCAAkC,iBAAiB;AAAA;AAAA,gBAE5E,SAAS;AAAA,gBACT;AAAA,gBAEC,mBAAS,gBAAgB;AAAA;AAAA,YAC5B;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ,GACF;AAEJ;AAEA,IAAO,iBAAQ;;;AE7OX,IAAAC,uBAAA;AAFJ,IAAM,SAAS,CAAC,EAAE,WAAW,MAAM,MAAoB;AACrD,SACE,8CAAC,SAAI,WAAW,GAAG,SAAS,IAAI,OAAc;AAElD;AAEA,IAAO,iBAAQ;;;ACHT,IAAAC,uBAAA;;;ACAA,IAAAC,uBAAA;;;ACaE,IAAAC,uBAAA;;;AChBR,IAAAC,iBAA0D;AAE1D,IAAAC,wBAAmC;AACnC,IAAAC,gBAAkB;AAClB,IAAAC,eAAiB;AACjB,IAAAC,qBAA0B;;;ACP1B,IAAAC,UAAuB;AAEvB,sBAAiC;AAQ/B,IAAAC,uBAAA;AAJF,IAAM,SAAe,mBAGnB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,OAAO,cAA8B,qBAAK;AAE1C,IAAM,cAAoB,mBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,IACrD,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAA8B,sBAAM;AAEhD,IAAM,iBAAuB,mBAG3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,eAAe,cAA8B,yBAAS;;;AD4ChD,IAAAC,uBAAA;AAnES,SAAR,OAAwB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA;AAAA,EACb,OAAO,CAAC;AAAA,EACR,cAAc,CAAC;AAAA,EACf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AACF,GAAgB;AACd,QAAM,aAAS,8BAAU;AAGzB,QAAM,CAAC,YAAY,aAAa,QAAI;AAAA,IAClC;AAAA,EACF;AAEA,gCAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,UAAI,OAAO,aAAa,IAAK,eAAc,QAAQ;AAAA,eAC1C,OAAO,aAAa,KAAM,eAAc,QAAQ;AAAA,UACpD,eAAc,SAAS;AAAA,IAC9B;AAEA,eAAW;AACX,WAAO,iBAAiB,UAAU,UAAU;AAC5C,WAAO,MAAM,OAAO,oBAAoB,UAAU,UAAU;AAAA,EAC9D,GAAG,CAAC,CAAC;AAEL,QAAM,OAAO,cAAc;AAE3B,QAAM,WAAW,SAAS;AAC1B,QAAM,WAAW,SAAS;AAC1B,QAAM,YAAY,SAAS;AAE3B,QAAM,wBAAoB;AAAA,IACxB,CAAC,GAAQ,QAAgB;AACvB,UAAI,WAAW;AACb,UAAE,eAAe;AACjB,wBAAgB,EAAE,SAAS,QAAQ,OAAO,6BAA6B,GAAG,qBAAqB,UAAU,IAAK,CAAC;AAAA,MACjH,OAAO;AACL,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,oBAAgB,wBAAQ,MAAM;AAClC,QAAI,WAAW,WAAW,SAAS,QAAQ;AACzC,aAAO,QAAQ,IAAI,CAAC,OAAY;AAAA,QAC9B,GAAG;AAAA,QACH,QAAQ,EAAE,QAAQ;AAAA,MACpB,EAAE;AAAA,IACJ;AACA,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,SAAS,IAAI,CAAC;AAE1B,QAAM,oBAAoB,MACxB,8CAAC,SAAI,WAAU,eACb,yDAAC,SAAI,WAAU,8DACb;AAAA,kDAAC,gCAAO,WAAU,kFAAiF;AAAA,IACnG;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,WAAW,CAAC,UAAU;AACpB,cAAI,MAAM,QAAQ,SAAS;AACzB,kBAAM,QAAS,MAAM,OAA4B;AACjD,uBAAW;AAAA,cACT,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KACF,GACF;AAGF,SACE,gFAEE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV;AAAA,QAEA,yDAAC,SAAI,WAAU,mEAGb;AAAA;AAAA,YAAC,aAAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,CAAC,MAAM,kBAAkB,GAAG,GAAG;AAAA,cACxC,WAAU;AAAA,cAET,qBACC,8CAAC,cAAAC,SAAA,EAAM,KAAK,UAAU,KAAK,SAAS,OAAO,KAAK,QAAQ,IAAI,IAE5D,8CAAC,UAAK,WAAU,+BAA8B,kBAAI;AAAA;AAAA,UAEtD;AAAA,UAGC,aACC,8CAAC,SAAI,WAAU,yCACZ,wBAAc,IAAI,CAAC,SAClB;AAAA,YAAC,aAAAD;AAAA,YAAA;AAAA,cAEC,MAAM,KAAK;AAAA,cACX,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,GAAG;AAAA,cAC7C,WAAU;AAAA,cAET,eAAK;AAAA;AAAA,YALD,KAAK;AAAA,UAMZ,CACD,GACH;AAAA,UAIF,+CAAC,SAAI,WAAU,+BAGX;AAAA,0BAAa,aAAa,8CAAC,qBAAkB;AAAA,YAG/C,+CAAC,SAAI,WAAU,oDACb;AAAA,4DAAC,UAAO,SAAQ,SAAQ,MAAK,QAC3B,wDAAC,8BAAK,WAAU,4CAA2C,GAC7D;AAAA,cAEC,cAAc,YAAY,EAAE,qBAAqB,eAAe,MAAM,OAAO,UAAU,IAAI,IAC1F,8CAAC,UAAK,WAAU,oHACb,sBACH,IAEA,CAAC,qBACC,8CAAC,UAAK,WAAU,4DAA2D;AAAA,eAGjF;AAAA,YAGA,+CAAC,gBACC;AAAA,4DAAC,uBAAoB,SAAO,MAC1B,yDAAC,SAAI,WAAU,8CACZ;AAAA,iBAAC,YAAY,YACZ,8CAAC,QAAG,WAAU,4CACX,oBACH;AAAA,gBAEF,8CAAC,UAAO,WAAU,WACf,0BAAgB,WACf,8CAAC,eAAY,KAAI,0CAAyC,KAAI,WAAU,IAExE,8CAAC,SAAI,WAAU,+FACZ,sBAAY,QAAQ,GACvB,GAEJ;AAAA,iBAEE,YAAY,aACZ,8CAAC,UAAO,SAAQ,SAAQ,MAAK,QAC3B,wDAAC,8BAAK,WAAU,WAAU,GAC5B;AAAA,iBAEJ,GACF;AAAA,cAEA,+CAAC,uBAAoB,OAAM,OAAM,WAAU,6BACxC;AAAA,4BAAY,IAAI,CAAC,SAChB,8CAAC,oBACC,wDAAC,aAAAA,SAAA,EAAK,MAAM,KAAK,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,GAAG,GAChE,eAAK,QACR,KAHqB,KAAK,EAI5B,CACD;AAAA,iBAGC,YAAY,aACZ,gFACE;AAAA,gEAAC,yBAAsB;AAAA,kBACtB,cAAc,IAAI,CAAC,SAClB,8CAAC,oBACC,wDAAC,aAAAA,SAAA,EAAK,MAAM,KAAK,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,GAAG,GAChE,eAAK,QACR,KAHqB,KAAK,EAI5B,CACD;AAAA,mBACH;AAAA,iBAEJ;AAAA,eACF;AAAA,aACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,IAGC,YACC,8CAAC,SAAI,WAAU,OACb,wDAAC,qBAAkB,GACrB;AAAA,KAEJ;AAEJ;;;AEtOA,IAAAE,iBAAiE;AAEjE,IAAAC,gBAAkB;AAClB,sBAWO;AA4HG,IAAAC,uBAAA;AAvHV,IAAM,iBAAiB,MAAM;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,EAC9C;AACA,SAAO,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,QAAQ,MAAM,CAAC;AAC3D;AAEA,IAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,MAAqB;AACnB,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAgB,CAAC,CAAC;AAChD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAc,IAAI;AAChD,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,KAAK;AACtD,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,CAAC;AAEhD,QAAM,gBAAgB,SAAS,UAAW,MAAM,QAA8B,CAAC;AAC/E,QAAM,mBAAmB,SAAS,eAAe;AAEjD,gCAAU,MAAM;AACd,QAAI,QAAQ;AACV,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,gBAAY,4BAAY,OAAO,SAAiB;AACpD,QAAI,CAAC,OAAQ;AAEb,UAAM,YAAY;AAElB,QAAI;AACF,sBAAgB,IAAI;AAEpB,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,MAAM,KAAK,SAAS;AAAA,QACpB,OAAO,MAAM,SAAS;AAAA,MACxB,CAAC;AAED,YAAM,cAAc,MAAM,iBAAiB,cAAAC;AAE3C,YAAM,MAAM,MAAM,YAAY,IAAI,GAAG,MAAM,IAAI,OAAO,SAAS,CAAC,IAAI;AAAA,QAClE,iBAAiB;AAAA,MACnB,CAAC;AAED,UAAI,CAAC,WAAW;AACd,YAAIC,QAAO,CAAC;AACZ,YAAI,OAAO;AACX,YAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,UAAAA,QAAO,IAAI,KAAK;AAChB,iBAAO,IAAI,KAAK,QAAQ;AAAA,QAC1B,WAAW,MAAM,QAAQ,IAAI,IAAI,GAAG;AAClC,UAAAA,QAAO,IAAI;AAAA,QACb;AACA,mBAAWA,KAAI;AACf,mBAAW,IAAI;AAAA,MACjB;AAAA,IACF,SAAS,KAAU;AACjB,UAAI,CAAC,WAAW;AACd,wBAAgB;AAAA,UACd,OAAO,KAAK,UAAU,MAAM,WAAW,KAAK,WAAW;AAAA,UACvD,SAAS;AAAA,QACX,CAAC;AACD,mBAAW,CAAC,CAAC;AAAA,MACf;AAAA,IACF,UAAE;AACA,UAAI,CAAC,UAAW,iBAAgB,KAAK;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,QAAQ,KAAK,CAAC;AAElB,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,cAAU,WAAW;AAAA,EACvB,GAAG,CAAC,QAAQ,aAAa,SAAS,CAAC;AAEnC,QAAM,mBAAmB,CAAC,YAAoB;AAC5C,QAAI,YAAY,UAAU,KAAK,UAAU,QAAQ,OAAQ;AACzD,mBAAe,OAAO;AAAA,EACxB;AAEA,QAAM,WAAO,wBAAQ,MAAM;AACzB,QAAI,CAAC,MAAM,QAAQ,aAAa,KAAK,cAAc,WAAW,KAAK,CAAC,WAAW,CAAC,WAAW;AACzF,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,cAAc,IAAI,CAAC,UAAe;AAAA,MACvC,GAAG;AAAA,MACH,CAAC,OAAO,GAAG,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MACpC,MAAM,eAAe;AAAA,IACvB,EAAE;AAAA,EACJ,GAAG,CAAC,eAAe,SAAS,SAAS,CAAC;AAEtC,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,kBAAkB,CAAC,UAAU,QAAQ,EAAE,SAAS,MAAM,eAAyB,IACjF,MAAM,kBACN;AAEJ,MAAI,oBAAoB,KAAK,WAAW,GAAG;AACzC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,kHAAkH,SAAS;AAAA,QACtI;AAAA,QAEA;AAAA,wDAAC,SAAI,WAAU,4BACb,yDAAC,SAAI,WAAU,2HACb;AAAA,0DAAC,SAAI,WAAU,gFAA+E;AAAA,YAC9F,8CAAC,UAAK,WAAU,+FAA8F,mCAE9G;AAAA,aACF,GACF;AAAA,UAEA,8CAAC,SAAI,WAAU,6GAA4G;AAAA,UAC3H,8CAAC,SAAI,WAAU,2HACb,wDAAC,SAAI,WAAU,+FACZ,WAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ;AAC9B,kBAAM,eAAe,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,IAAI,EAAE;AAC3D,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAW,kLAAkL,GAAG;AAAA,gBAChM,OAAO,EAAE,QAAQ,cAAc,gBAAgB,GAAG,MAAM,IAAI,IAAI;AAAA,gBAEhE;AAAA,gEAAC,SAAI,WAAU,mGAAkG;AAAA,kBACjH,8CAAC,SAAI,WAAU,sFAAqF;AAAA;AAAA;AAAA,cAL/F,OAAO,GAAG;AAAA,YAMjB;AAAA,UAEJ,CAAC,GACH,GACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,+CAAC,SAAI,WAAW,GAAG,SAAS,cAAc,OACvC;AAAA,2BAAuB,WACtB,+CAAC,SAAI,WAAU,+CACb;AAAA,qDAAC,SAAI,WAAU,yCAAwC;AAAA;AAAA,QAC/C,QAAQ;AAAA,QAAK;AAAA,QAAK,QAAQ;AAAA,QAAM;AAAA,QAAG,QAAQ,MAAM,eAAe;AAAA,QAAE;AAAA,SAC1E;AAAA,MACA,+CAAC,SAAI,WAAU,+DACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,gBAAgB,KAAK;AAAA,YAC/B,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,QACA,8CAAC,UAAK,WAAU,wFACb,uBACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,eAAe,QAAQ,SAAS;AAAA,YAC1C,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,SACF;AAAA,MAEA,+CAAC,SAAI,WAAU,8CACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,gBAAgB,KAAK;AAAA,YAC/B,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,QACA,8CAAC,UAAK,WAAU,+CACb,uBACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,eAAe,QAAQ,SAAS;AAAA,YAC1C,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,SACF;AAAA,OACF;AAAA,IAKF,8CAAC,uCAAoB,OAAM,QAAO,QAAO,QACtC,wBAAc,QACb,+CAAC,4BAAS,MACR;AAAA,oDAAC,iCAAc,iBAAgB,OAAM;AAAA,MACrC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,OAAO;AAAA,UACP,YAAW;AAAA,UACX,UAAU;AAAA,UACV,eAAe,CAAC,UACd,OAAO,SAAS,EAAE,SAAS,KAAK,GAAG,MAAM,SAAS,EAAE,UAAU,GAAG,EAAE,CAAC,QAAQ;AAAA,UAE9E,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,UACR,WAAW;AAAA;AAAA,MACb;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,eAAe,CAAC,UAAkB,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,UAC9D,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,QAAQ,CAAC,WAAW,SAAS;AAAA,UAC7B,OAAO;AAAA;AAAA,MACT;AAAA,MACA,8CAAC,2BAAQ,WAAW,CAAC,UAAkB,CAAC,GAAG,KAAK,IAAI,OAAO,GAAG;AAAA,MAC9D,8CAAC,0BAAO,eAAe,iBAAwB,OAAM,UAAS;AAAA,MAC9D;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,UACnB,mBAAmB;AAAA;AAAA,MACrB;AAAA,OACF,IAEA,+CAAC,6BAAU,MACT;AAAA,oDAAC,UACC,yDAAC,oBAAe,IAAG,cAAa,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KACtD;AAAA,sDAAC,UAAK,QAAO,MAAK,WAAU,WAAU,aAAa,KAAK;AAAA,QACxD,8CAAC,UAAK,QAAO,OAAM,WAAU,WAAU,aAAa,GAAG;AAAA,SACzD,GACF;AAAA,MACA,8CAAC,iCAAc,iBAAgB,OAAM;AAAA,MACrC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA;AAAA,MACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,eAAe,CAAC,UAAkB,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,UAC9D,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,QAAQ,CAAC,WAAW,SAAS;AAAA,UAC7B,OAAO;AAAA;AAAA,MACT;AAAA,MACA,8CAAC,2BAAQ,WAAW,CAAC,UAAkB,GAAG,KAAK,KAAK;AAAA,MACpD;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL;AAAA,UACA,QAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAK;AAAA,UACL,mBAAmB;AAAA;AAAA,MACrB;AAAA,OACF,GAEJ;AAAA,KACF;AAEJ;AAEA,IAAO,mBAAQ,eAAAC,QAAM,KAAK,cAAc;;;AChTxC,IAAAC,iBAAoD;AAEpD,IAAAC,gBAAkB;AAClB,IAAAC,mBAMO;AAgKO,IAAAC,uBAAA;AA3Jd,IAAMC,kBAAiB,MAAM;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,EAC9C;AACA,SAAO,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,QAAQ,MAAM,CAAC;AAC3D;AAEA,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAqB;AACnB,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,aAAa,MAAM;AAEzB,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAgB,CAAC,CAAC;AAChD,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,KAAK;AAEtD,QAAM,gBAAgB,SAAS,UAAW,MAAM,QAA8B,CAAC;AAC/E,QAAM,mBAAmB,SAAS,eAAe;AAEjD,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,QAAI,YAAY;AAEhB,UAAM,YAAY,YAAY;AAC5B,UAAI;AACF,wBAAgB,IAAI;AAEpB,cAAM,cAAc,MAAM,iBAAiB,cAAAC;AAC3C,cAAM,MAAM,MAAM,YAAY,IAAI,QAAQ;AAAA,UACxC,iBAAiB;AAAA,QACnB,CAAC;AAED,YAAI,CAAC,WAAW;AACd,cAAIC,QAAO,CAAC;AACZ,cAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,YAAAA,QAAO,IAAI,KAAK;AAAA,UAClB,WAAW,MAAM,QAAQ,IAAI,IAAI,GAAG;AAClC,YAAAA,QAAO,IAAI;AAAA,UACb;AACA,qBAAWA,KAAI;AAAA,QACjB;AAAA,MACF,SAAS,KAAU;AACjB,YAAI,CAAC,WAAW;AACd,0BAAgB;AAAA,YACd,OAAO,KAAK,UAAU,MAAM,WAAW,KAAK,WAAW;AAAA,YACvD,SAAS;AAAA,UACX,CAAC;AACD,qBAAW,CAAC,CAAC;AAAA,QACf;AAAA,MACF,UAAE;AACA,YAAI,CAAC,UAAW,iBAAgB,KAAK;AAAA,MACvC;AAAA,IACF;AAEA,cAAU;AAEV,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,WAAO,wBAAQ,MAAM;AACzB,QAAI,CAAC,MAAM,QAAQ,aAAa,KAAK,cAAc,WAAW,EAAG,QAAO,CAAC;AACzE,WAAO,cAAc,IAAI,CAAC,UAAe;AAAA,MACvC,GAAG;AAAA,MACH,OAAO,KAAK,SAASF,gBAAe;AAAA,MACpC,CAAC,OAAO,GAAG,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MACpC,CAAC,SAAS,GAAG,KAAK,SAAS,KAAK;AAAA,IAClC,EAAE;AAAA,EACJ,GAAG,CAAC,eAAe,SAAS,SAAS,CAAC;AAEtC,QAAM,YAAQ;AAAA,IAAQ,MACpB,KAAK,OAAO,CAAC,KAAa,MAAW,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAAA,IAAG,CAAC,MAAM,OAAO;AAAA,EAClF;AAEA,QAAM,qBAAiB,wBAAQ,MAAM;AACnC,QAAI,SAAS,KAAS;AACpB,aAAO,IAAI,QAAQ,KAAS,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,IACrC;AACA,WAAO,MAAM,SAAS;AAAA,EACxB,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,gBAAY,wBAAQ,MAAM;AAC9B,QAAI,UAAU,EAAG,QAAO;AAExB,UAAM,aAAa,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK,EAAE;AACjF,UAAM,WAAW,MAAM,KAAK,IAAI,IAAI,WAAW,MAAM;AACrD,UAAM,WAAY,QAAQ,WAAY;AAEtC,WAAO,WAAW,IAAI,CAAC,MAAM,UAAU;AACrC,YAAM,QAAQ,KAAK,OAAO,KAAK;AAC/B,UAAI,QAAQ,YAAY,QAAQ,IAAI;AAClC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,CAAC,OAAO,GAAG,WAAW;AAAA,UACtB,WAAW;AAAA,QACb;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,OAAO,OAAO,CAAC;AAEzB,QAAM,cAAc,eAAe,YAAY,eAAe;AAE9D,QAAM,mBAAmB,MAAM;AAC7B,QAAI,YAAa,QAAO,EAAE,OAAO,IAAI,OAAO,IAAI;AAChD,QAAI,UAAU,UAAU,EAAG,QAAO,EAAE,OAAO,IAAI,OAAO,IAAI;AAC1D,WAAO,EAAE,OAAO,IAAI,OAAO,IAAI;AAAA,EACjC;AAEA,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,gCAAU,MAAM;AACd,UAAM,UAAU,WAAW,MAAM,WAAW,IAAI,GAAG,GAAG;AACtD,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB,wBAAQ,MAAM;AAClC,QAAI,CAAC,YAAa,QAAO;AACzB,WACE,8CAAC,SAAI,WAAU,6DACZ,oBAAU,IAAI,CAAC,GAAQ,UAAkB;AACxC,YAAM,cAAc,KAAK;AAAA,QAAK,CAAC,SAC7B,KAAK,SAAS,MAAM,EAAE,SAAS;AAAA,MACjC,IAAI,OAAO,KAAK,EAAE,OAAO;AAEzB,YAAM,eAAe,eAAe,MAChC,IAAI,cAAc,KAAM,QAAQ,CAAC,CAAC,MAClC,YAAY,eAAe;AAE/B,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UAEV;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,iBAAiB,EAAE,MAAM;AAAA;AAAA,YACpC;AAAA,YACA,+CAAC,SAAI,WAAU,kBACb;AAAA,4DAAC,UAAK,WAAU,uFACb,YAAE,SAAS,GACd;AAAA,cACA,+CAAC,SAAI,WAAU,6DACb;AAAA,8DAAC,UAAM,wBAAa;AAAA,gBACpB,+CAAC,UAAQ;AAAA,iCAAc,QAAS,KAAK,QAAQ,CAAC;AAAA,kBAAE;AAAA,mBAAC;AAAA,gBAChD,EAAE,aACD,8CAAC,UAAK,WAAU,iEAAgE,iBAEhF;AAAA,iBAEJ;AAAA,eACF;AAAA;AAAA;AAAA,QApBK,UAAU,KAAK;AAAA,MAqBtB;AAAA,IAEJ,CAAC,GACH;AAAA,EAEJ,GAAG,CAAC,WAAW,MAAM,WAAW,SAAS,OAAO,WAAW,CAAC;AAE5D,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,oBAAoB,KAAK,WAAW,GAAG;AACzC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,+HAA+H,SAAS;AAAA,QACnJ;AAAA,QAEA;AAAA,wDAAC,SAAI,WAAU,6GAA4G;AAAA,UAE3H,8CAAC,SAAI,WAAU,oBACb,yDAAC,SAAI,WAAU,2HACb;AAAA,0DAAC,SAAI,WAAU,gFAA+E;AAAA,YAC9F,8CAAC,UAAK,WAAU,+FAA8F,mCAE9G;AAAA,aACF,GACF;AAAA,UAEA,8CAAC,SAAI,WAAU,6DACZ,WAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,QACtB;AAAA,YAAC;AAAA;AAAA,cAEC,WAAW,kKAAkK,GAAG;AAAA,cAEhL;AAAA,8DAAC,SAAI,WAAU,mFAAkF;AAAA,gBACjG,+CAAC,SAAI,WAAU,oBACb;AAAA,gEAAC,SAAI,WAAU,8CAA6C;AAAA,kBAC5D,8CAAC,SAAI,WAAU,2DAA0D;AAAA,mBAC3E;AAAA;AAAA;AAAA,YAPK;AAAA,UAQP,CACD,GACH;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,EAAE,OAAO,MAAM,IAAI,iBAAiB;AAC1C,QAAM,cAAc;AACpB,QAAM,cAAc;AAEpB,SACE,+CAAC,SAAI,WAAW,uCAAuC,SAAS,IAAI,OAClE;AAAA,mDAAC,SAAI,WAAU,2FACb;AAAA,oDAAC,wCAAoB,OAAM,QAAO,QAAO,QACvC,yDAAC,6BACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,IAAG;AAAA,YACH,IAAG;AAAA,YACH;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,mBAAmB;AAAA,YACnB,mBAAmB;AAAA,YACnB,UAAU;AAAA,YAET,oBAAU,IAAI,CAAC,OAAY,UAC1B;AAAA,cAAC;AAAA;AAAA,gBAEC,MAAM,MAAM;AAAA,gBACZ,QAAQ,MAAM,YAAY,SAAS;AAAA,gBACnC,aAAa,MAAM,YAAY,MAAM;AAAA;AAAA,cAHhC,QAAQ,KAAK;AAAA,YAIpB,CACD;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,CAAC,OAAe,MAAc,YAAY;AACnD,oBAAM,QAAQ,WAAW,QAAQ,UAAU,QAAQ,QAAQ,SAAS,IAAI;AACxE,oBAAM,aAAa,KAAK,KAAK,CAAC,SAAc,KAAK,SAAS,MAAM,KAAK;AACrE,oBAAM,cAAc,aAAa,WAAW,OAAO,IAAI;AAEvD,oBAAM,iBAAiB,eAAe,MAClC,IAAI,cAAc,KAAM,QAAQ,CAAC,CAAC,MAClC,YAAY,eAAe;AAC/B,oBAAM,cAAe,cAAc,QAAS,KAAK,QAAQ,CAAC;AAE1D,qBAAO;AAAA,gBACL,GAAG,KAAK,KAAK,cAAc,KAAK,UAAU;AAAA,cAC5C;AAAA,YACF;AAAA,YACA,cAAc;AAAA,cACZ,iBAAiB;AAAA,cACjB,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,UAAU;AAAA,cACV,SAAS;AAAA,YACX;AAAA;AAAA,QACF;AAAA,SACF,GACF;AAAA,MAEC,QAAQ,KACP,8CAAC,SAAI,WAAW,+FAA+F,cAAc,iBAAiB,eAAe,uEAC3J,yDAAC,SAAI,WAAU,gCACZ;AAAA;AAAA,QACD,8CAAC,UAAK,WAAU,gFAA+E,mBAE/F;AAAA,SACF,GACF;AAAA,OAEJ;AAAA,IAEC;AAAA,KACH;AAEJ;AAEA,IAAO,mBAAQ,eAAAG,QAAM,KAAK,UAAU;;;ACzS1B,IAAAC,uBAAA;AANK,SAAR,cAA+B,EAAE,WAAW,OAAO,IAAI,OAAO,QAAQ,WAAW,SAAS,YAAY,IAAI,OAAO,KAAK,QAAQ,SAAS,YAAY,MAAM,QAAQ,GAAuB;AAE7L,SACE,8CAAC,SAAI,WAAsB,OACzB,yDAAC,SAAI,WAAU,kEACb;AAAA,kDAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,UAAQ;AAAA;AAAA,IACV,GACF;AAAA,IACA,8CAAC,SAAI,WAAU,QACb,yDAAC,SAAI,WAAU,2BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,UACvC,aAAY;AAAA,UACZ,WAAU;AAAA,UACV,UAAQ;AAAA;AAAA,MACV;AAAA,MACC,CAAC,UACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,YAAY,IAAI;AAAA,UAC/B,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MAED,CAAC,WACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,aAAa,IAAI;AAAA,UAChC,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,OAEJ,GACF;AAAA,IACC,UACC,8CAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,QACvC,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAED,WACC,8CAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,QACxC,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAIF,8CAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,aAAa,EAAE,OAAO,KAAK;AAAA,QAC5C,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,IACA,8CAAC,SAAI,WAAU,QACb,wDAAC,YAAc,OAAO,MAAM,UAAU,SAAS,GACjD;AAAA,IACA,+CAAC,SAAI,WAAU,0BACb;AAAA,oDAAC,YAAO,WAAU,wDAAuD,qBAEzE;AAAA,MACA,8CAAC,YAAO,WAAU,+DAA8D,mBAEhF;AAAA,MACA,8CAAC,YAAO,WAAU,gDAA+C,kBAEjE;AAAA,OACF;AAAA,KACF,GACF;AAEJ;;;AC9FA,yBAAyB;AACzB,IAAAC,iBAAgD;AAM5C,IAAAC,uBAAA;AAJJ,IAAM,UAAU,CAAC,EAAE,GAAG,MAAM,MAAoB;AAC9C,QAAM,EAAE,QAAQ,SAAS,QAAI,6BAAS;AAEtC,SACE;AAAA,IAAC,eAAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAU;AAAA,MACV,OACE;AAAA,QACE,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,MACrB;AAAA,MAED,GAAG;AAAA;AAAA,EACN;AAEJ;","names":["ReactDOM","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_react","import_react","axios","import_jsx_runtime","import_jsx_runtime","import_react","React","import_jsx_runtime","Link","import_lucide_react","import_link","import_lucide_react","import_jsx_runtime","import_jsx_runtime","Link","import_react","import_react_fontawesome","import_jsx_runtime","prefix","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","Textarea","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","Label","import_jsx_runtime","Label","import_react","import_lucide_react","import_jsx_runtime","RadioGroup","import_jsx_runtime","RadioGroup","Label","import_react","import_jsx_runtime","Label","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_react","import_axios","getValueByPath","axios","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","Label","import_react","import_jsx_runtime","PhoneInputField","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_lucide_react","React","import_lucide_react","import_jsx_runtime","className","props","import_jsx_runtime","import_jsx_runtime","import_react","import_date_fns","import_jsx_runtime","React","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","value","id","React","import_free_solid_svg_icons","import_react_fontawesome","import_react_table","import_lucide_react","import_jsx_runtime","import_react","LucideIcons","import_lucide_react","dayjs","utc","format","import_jsx_runtime","React","format","Image","LucideIcons","import_jsx_runtime","table","_","import_jsx_runtime","Table","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_lucide_react","import_jsx_runtime","Accordion","import_jsx_runtime","import_jsx_runtime","Accordion","import_react","import_lucide_react","import_link","import_navigation","import_lucide_react","import_jsx_runtime","import_jsx_runtime","index","Link","import_react","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_image","import_link","import_navigation","React","import_jsx_runtime","import_jsx_runtime","Link","Image","import_react","import_axios","import_jsx_runtime","axios","data","React","import_react","import_axios","import_recharts","import_jsx_runtime","getRandomColor","axios","data","React","import_jsx_runtime","import_sonner","import_jsx_runtime","Sonner"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Layout/Modal.tsx","../src/lib/utils.ts","../src/components/Wrappers/Portal.tsx","../src/components/Layout/Flex.tsx","../src/components/Layout/Grid.tsx","../src/components/Layout/Container.tsx","../src/components/Layout/Accordion.tsx","../src/components/Layout/Slot.tsx","../src/components/Layout/AccordionGroup.tsx","../src/components/Layout/TabList.tsx","../src/components/Layout/TabGroup.tsx","../src/components/Layout/Repeater.tsx","../src/components/ui/button.tsx","../src/components/Basic/Button/Button.tsx","../src/components/Basic/Image/Image.tsx","../src/hooks/useFileService.ts","../src/components/Basic/Shape/Shape.tsx","../src/components/Basic/Typography/Typography.tsx","../src/components/Basic/Breadcrumb/Breadcrumb.tsx","../src/components/Basic/ButtonGroup/ButtonGroup.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/Basic/Icon/Icon.tsx","../src/components/Inputs/TextInput/TextInput.tsx","../src/components/ui/input.tsx","../src/components/Inputs/NumberInput/NumberInput.tsx","../src/components/Inputs/EmailInput/EmailInput.tsx","../src/components/Inputs/PasswordInput/PasswordInput.tsx","../src/components/Inputs/Textarea/Textarea.tsx","../src/components/ui/textarea.tsx","../src/components/Inputs/UrlInput/UrlInput.tsx","../src/components/Inputs/Checkbox/Checkbox.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/label.tsx","../src/components/Inputs/RadioInput/RadioInput.tsx","../src/components/ui/radio-group.tsx","../src/components/Inputs/MultiCheckbox/MultiCheckbox.tsx","../src/components/Inputs/RichText/RichText.tsx","../src/components/Global/TinyMceEditor.tsx","../src/components/Inputs/Dropdown/Dropdown.tsx","../src/components/ui/select.tsx","../src/components/Inputs/Dropdown/LazyDropdown.tsx","../src/hooks/useLazyDropdown.ts","../src/components/Inputs/SwitchToggle/SwitchToggle.tsx","../src/components/ui/switch.tsx","../src/components/Inputs/PhoneInput/PhoneInput.tsx","../src/components/Inputs/SearchInput/SearchInput.tsx","../src/components/Inputs/FileInput/FileInput.tsx","../src/components/Inputs/DatePicker/DatePicker.tsx","../src/components/ui/calendar.tsx","../src/components/ui/popover.tsx","../src/components/Inputs/DateRange/DateRange.tsx","../src/components/Inputs/TextInputGroup/TextInputGroup.tsx","../src/components/Inputs/Multiselect/MultiSelect.tsx","../src/components/ui/data-table.tsx","../src/components/ui/table.tsx","../src/lib/table/useDynamicColumns.ts","../src/lib/table/cellRendererFactory.tsx","../src/lib/dayjs-setup.ts","../src/lib/table/valueFormatter.ts","../src/components/DataDisplay/Table/Table.tsx","../src/components/ui/pagination.tsx","../src/components/DataDisplay/Pagination/Pagination.tsx","../src/components/DataDisplay/HistoryTimeline/HistoryTimeline.tsx","../src/components/ui/accordion.tsx","../src/components/ui/card.tsx","../src/components/Navigation/Tabs/Tabs.tsx","../src/components/ui/dialog.tsx","../src/components/ui/sonner-toast.tsx","../src/components/Navigation/Stages/Stages.tsx","../src/components/ui/tooltip.tsx","../src/components/Navigation/Spacer/Spacer.tsx","../src/components/Navigation/Profile/Profile.tsx","../src/components/Navigation/Notification/Notification.tsx","../src/components/Navigation/Logo/Logo.tsx","../src/components/Navigation/Navbar/Navbar.tsx","../src/components/ui/avatar.tsx","../src/components/Chart/BarChart.tsx","../src/components/Chart/PieChart.tsx","../src/components/Blocks/EmailComposer.tsx","../src/components/ui/sonner.tsx"],"sourcesContent":["import './global.css'\r\n\r\nexport * from \"@/components\";\r\nexport * from \"@/lib/utils\";\r\n","import React, { useEffect } from 'react';\r\n\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport Portal from '../Wrappers/Portal';\r\n\r\ninterface ModalProps {\r\n isOpen: boolean | string;\r\n onModalClose?: () => void;\r\n onModalOpen?: () => void;\r\n title: string;\r\n children: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg' | 'xl';\r\n showCloseButton?: boolean;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onModalClose,\r\n onModalOpen,\r\n title,\r\n children,\r\n size = 'md',\r\n showCloseButton = true,\r\n className = '',\r\n style = {}\r\n}: ModalProps) {\r\n useEffect(() => {\r\n if (isOpen && onModalOpen) {\r\n onModalOpen();\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onModalClose?.();\r\n }\r\n };\r\n\r\n if (isOpen) {\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 }, [isOpen, onModalClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n const sizeClasses = {\r\n sm: 'w-md',\r\n md: 'w-lg',\r\n lg: 'w-2xl',\r\n xl: 'w-4xl'\r\n };\r\n\r\n return (\r\n <Portal>\r\n <div className=\"fixed inset-0 bg-black/60 z-40 flex items-center justify-center\">\r\n <div className=\"fixed flex items-center justify-center z-50 shadow-lg rounded-md\">\r\n <div\r\n className={cn(\r\n 'bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-h-[90vh] overflow-hidden',\r\n className,\r\n `${sizeClasses[size]}`\r\n )}\r\n style={style}\r\n >\r\n {/* Header */}\r\n {(title || showCloseButton) && (\r\n <div className=\"flex items-center justify-between p-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n {title && (\r\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n )}\r\n {showCloseButton && (\r\n <button\r\n onClick={onModalClose}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors cursor-pointer\"\r\n aria-label=\"Close modal\"\r\n >\r\n <FontAwesomeIcon icon={faTimes} className=\"w-5 h-5\" />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"p-4 py-3 overflow-y-auto max-h-[calc(90vh-140px)] min-h-[90px]\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </Portal>\r\n );\r\n}\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport function getInitials(name: string) {\r\n const words = name.split(' ');\r\n if (words.length === 0) {\r\n return '';\r\n }\r\n if (words.length === 1) {\r\n return words[0].charAt(0);\r\n }\r\n return words[0].charAt(0) + words[1].charAt(0);\r\n}","import React from 'react';\r\n\r\nimport ReactDOM from 'react-dom';\r\n\r\ntype PortalProps = {\r\n children: React.ReactNode;\r\n container?: HTMLElement;\r\n};\r\n\r\nconst Portal: React.FC<PortalProps> = ({ children, container }) => {\r\n // Default to rendering into document.body if no container is given\r\n const target = container || document.body;\r\n\r\n return ReactDOM.createPortal(children, target);\r\n};\r\n\r\nexport default Portal;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Flex = ({\r\n children, className, style, ...props\r\n}: ElementProps) => {\r\n return (\r\n <div {...props} className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Flex;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Grid = ({\r\n children, className, style, ...props\r\n}: ElementProps) => {\r\n return (\r\n <div {...props} className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Grid;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Container = ({\r\n children, className, style, ...props\r\n}: ElementProps) => {\r\n return (\r\n <div {...props} className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Container;\r\n","import React, { useState } from 'react';\r\n\r\nimport { AccordionProps } from '@/types/global';\r\n\r\nconst Accordion = ({\r\n children, name = 'Accordion', style, className\r\n}: AccordionProps) => {\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const onToggleCollapse = () => {\r\n setIsOpen(prev => !prev);\r\n };\r\n\r\n return (\r\n <div className={`bg-white border rounded overflow-hidden ${className} min-h-auto`} style={{ backgroundColor: style?.backgroundColor }}>\r\n <div\r\n className='flex justify-between items-center p-2 px-4 border-b bg-transparent cursor-pointer'\r\n onClick={onToggleCollapse}\r\n role='presentation'\r\n >\r\n <span className='text-[14px] text-[#000]'>{name}</span>\r\n <button\r\n className='ml-2 px-2 py-1 text-sm text-[#000] rounded transition'\r\n style={{ color: style?.color }}\r\n >\r\n {isOpen ? '−' : '+'}\r\n </button>\r\n </div>\r\n <div className={` bg-white relative transition-all duration-200 ${isOpen ? 'min-h-30 p-4' : 'max-h-0 p-0 overflow-hidden'}`}>\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Accordion;\r\n","import { ElementProps } from '@/types/global';\r\n\r\nconst Slot = ({\r\n children\r\n}: ElementProps) => {\r\n return (\r\n <>\r\n {children}\r\n </>\r\n );\r\n};\r\n\r\nexport default Slot;\r\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst AccordionGroup = ({ children, style, className }: ElementProps) => {\r\n return (\r\n <div className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AccordionGroup;\r\n","'use client';\r\n\r\nimport { TabListProps } from \"@/types/global\";\r\n\r\nexport default function TabList({\r\n children, style, className, activeTab, tabId\r\n}: TabListProps) {\r\n\r\n return (\r\n <div\r\n className={`min-h-30 ${className} ${activeTab === tabId ? 'visible' : 'hidden'}`}\r\n style={style}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\nimport { TabGroupProps } from '@/types/global';\r\nimport { useEffect, useMemo, useState } from 'react';\r\n\r\nexport default function TabGroupComponent({\r\n children, style, className, list, activeTab, onTabChange,\r\n}: TabGroupProps) {\r\n const [mounted, setMounted] = useState(false)\r\n\r\n useEffect(() => {\r\n // Handle tab change side effects if needed\r\n if (list && list.length > 0 && !activeTab && onTabChange && !mounted) {\r\n onTabChange(list[0]?.tabId);\r\n setMounted(true);\r\n }\r\n\r\n }, [list, activeTab, onTabChange, mounted]);\r\n\r\n const formatedList = useMemo(\r\n () => Array.isArray(list)\r\n ? [...list].sort((a, b) => (a.orderNumber ?? 0) - (b.orderNumber ?? 0))\r\n : [],\r\n [list]\r\n );\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className=\"flex border-b border-gray-200 gap-1\">\r\n {formatedList.map((tab: any) => (\r\n <button\r\n key={tab.tabId}\r\n data-id={tab.tabId}\r\n className={`px-4 py-2 text-sm border-b-2 font-medium transition-colors cursor-pointer ${activeTab === tab.tabId\r\n ? ' bg-blue-500 text-white'\r\n : 'bg-gray-100 '}`}\r\n onClick={() => onTabChange && onTabChange(tab.tabId)}\r\n >\r\n {tab.name || 'Tab List'}\r\n </button>\r\n ))}\r\n </div>\r\n {children}\r\n </div>\r\n );\r\n}","import React from 'react';\r\n\r\nexport interface RepeaterProps<T> {\r\n data: T[];\r\n count?: number; // optionally limit how many to render\r\n render: (item: T, index: number, array: T[]) => React.ReactNode;\r\n emptyFallback?: React.ReactNode;\r\n wrapper?: (children: React.ReactNode) => React.ReactNode;\r\n className?: string;\r\n loading?: boolean;\r\n loadingText?: string;\r\n}\r\n\r\nfunction Repeater<T>({\r\n data = [],\r\n count,\r\n render,\r\n emptyFallback = null,\r\n wrapper,\r\n className,\r\n loading = false,\r\n loadingText = 'Loading...',\r\n}: RepeaterProps<T>) {\r\n const list = React.useMemo(\r\n () => (typeof count === 'number' ? data.slice(0, count) : data),\r\n [data, count]\r\n );\r\n\r\n if (loading) {\r\n return (\r\n <div className={className}>{loadingText}</div>\r\n );\r\n }\r\n\r\n if (!list.length) {\r\n return emptyFallback ? <>{emptyFallback}</> : (\r\n <div className={className}>No items to display.</div>\r\n );\r\n }\r\n\r\n const content = list.map((item, i) => (\r\n <React.Fragment key={i}>{render(item, i, list)}</React.Fragment>\r\n ));\r\n\r\n return wrapper ? (\r\n <>{wrapper(content)}</>\r\n ) : (\r\n <div className={className}>{content}</div>\r\n );\r\n}\r\n\r\nexport default React.memo(Repeater) as typeof Repeater;","import * as React from \"react\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant,\r\n size,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { ButtonProps } from '@/types/global';\r\nimport { Button } from '@/components/ui/button';\r\n\r\nconst ButtonWrapper = ({\r\n className,\r\n style,\r\n textContent = 'Button',\r\n loadingText = 'Loading...',\r\n loading = false,\r\n ...props\r\n}: ButtonProps) => {\r\n\r\n return (\r\n <Button\r\n {...props}\r\n className={className}\r\n style={style}\r\n disabled={props.disabled || loading}\r\n >\r\n {loading ? loadingText : textContent}\r\n </Button>\r\n );\r\n};\r\n\r\nexport default ButtonWrapper;","\r\nimport { useRef, useState } from 'react';\r\n\r\nimport { useParams } from 'next/navigation';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport { ImageProps } from '@/types/global';\r\nimport { useFileService } from '@/hooks/useFileService';\r\n\r\nconst ImageControl = ({\r\n className,\r\n style,\r\n imageUrl,\r\n altText = 'Preview',\r\n apiUrl,\r\n ...props\r\n}: ImageProps) => {\r\n\r\n const defaultImgClass = cn(\r\n 'w-full h-full',\r\n className\r\n );\r\n\r\n const placeholder = 'https://placehold.co/400';\r\n const url = imageUrl || placeholder;\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const params = useParams();\r\n const [loader, setLoader] = useState(false);\r\n\r\n const onClickImage = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n const { uploadFile } = useFileService({\r\n axiosInstance: props.axiosInstance,\r\n apiUrl,\r\n onSuccess: async (result) => {\r\n if (!result?.data?.url && !props.onSuccess) {\r\n setLoader(false);\r\n return;\r\n }\r\n props.onSuccess?.({ url: result.data.url || '', fileName: result.data.originalname || '' });\r\n setLoader(false);\r\n }\r\n });\r\n\r\n const onChangeFile = async (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n const file = e.target.files?.[0];\r\n if (!file) return;\r\n setLoader(true);\r\n uploadFile(file, {\r\n key: file.name\r\n });\r\n };\r\n\r\n if (loader) {\r\n return (\r\n <div className=\"flex items-center justify-center\">\r\n <div className=\"h-10 w-10 animate-spin rounded-full border-4 border-gray-300 border-t-blue-500\" />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n onClick={props.enableUpload ? onClickImage : undefined}\r\n role=\"button\"\r\n className={props.enableUpload ? 'cursor-pointer' : ''}\r\n >\r\n <img\r\n src={url} alt={altText} className={defaultImgClass} style={style}\r\n />\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n accept=\"image/*\"\r\n className=\"hidden\"\r\n onChange={onChangeFile}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default ImageControl;\r\n","import axios from 'axios';\r\nimport { useState } from 'react';\r\n\r\nexport interface FileServiceOptions {\r\n onSuccess?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n axiosInstance?: typeof axios;\r\n apiUrl?: string;\r\n}\r\n\r\nexport interface UseFileServiceResult {\r\n loading: boolean;\r\n error: any;\r\n data: any;\r\n uploadFile: (file: File, params?: Record<string, any>) => Promise<any>;\r\n getSignedUrl: (bucket: string, key: string, expiresIn?: number) => Promise<any>;\r\n getObject: (bucket: string, key: string) => Promise<any>;\r\n}\r\n\r\nexport function useFileService(options: FileServiceOptions): UseFileServiceResult {\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<any>(null);\r\n const [data, setData] = useState<any>(null);\r\n\r\n // Upload file\r\n const uploadFile = async (file: File, params: Record<string, any> = {}) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n Object.entries(params).forEach(([key, value]) => {\r\n formData.append(key, value as string);\r\n });\r\n\r\n const axiosClient = options.axiosInstance ?? axios;\r\n const apiUrl = options.apiUrl ?? '/fileservice/upload';\r\n\r\n const result = await axiosClient.post(`${apiUrl}`, formData, {\r\n withCredentials: true,\r\n });\r\n\r\n setData(result);\r\n if (result.status === 200) {\r\n options?.onSuccess?.(result.data);\r\n } else {\r\n const err = new Error(`Fetch failed with status ${result.status}`);\r\n throw err;\r\n }\r\n return result;\r\n\r\n } catch (err) {\r\n setError(err);\r\n options?.onError?.(err);\r\n throw err;\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // Get signed URL\r\n const getSignedUrl = async (bucket: string, key: string, expiresIn?: number) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n\r\n const axiosClient = options.axiosInstance ?? axios;\r\n const apiUrl = '/fileservice/signed-url';\r\n\r\n const result = await axiosClient.get(`${apiUrl}?bucket=${encodeURIComponent(bucket)}&key=${encodeURIComponent(key)}${expiresIn ? `&expiresIn=${expiresIn}` : ''}`, {\r\n withCredentials: true,\r\n });\r\n\r\n setData(result);\r\n if (result.status === 200) {\r\n options?.onSuccess?.(result.data);\r\n } else {\r\n const err = new Error(`Fetch failed with status ${result.status}`);\r\n throw err;\r\n }\r\n return result;\r\n } catch (err) {\r\n setError(err);\r\n options?.onError?.(err);\r\n throw err;\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // // Get object\r\n const getObject = async (bucket: string, key: string) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const axiosClient = options.axiosInstance ?? axios;\r\n const apiUrl = '/fileservice/object';\r\n\r\n const result = await axiosClient.get(`${apiUrl}?bucket=${encodeURIComponent(bucket)}&key=${encodeURIComponent(key)}`, {\r\n withCredentials: true,\r\n });\r\n\r\n setData(result);\r\n if (result.status === 200) {\r\n options?.onSuccess?.(result.data);\r\n } else {\r\n const err = new Error(`Fetch failed with status ${result.status}`);\r\n throw err;\r\n }\r\n return result;\r\n } catch (err) {\r\n setError(err);\r\n options?.onError?.(err);\r\n throw err;\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return {\r\n loading,\r\n error,\r\n data,\r\n uploadFile,\r\n getSignedUrl,\r\n getObject,\r\n };\r\n}\r\n","import { ElementProps } from '@/types/global';\r\n\r\nconst Shape = ({\r\n children,\r\n className, \r\n style\r\n}: ElementProps) => {\r\n\r\n return (\r\n <div className={className} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Shape;\r\n","import React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport { TypographyProps } from '@/types/global';\r\n\r\nconst Typography = ({\r\n className,\r\n style,\r\n tagName,\r\n textContent,\r\n onClick,\r\n}: TypographyProps) => {\r\n const Tag = tagName || 'h1';\r\n\r\n return React.createElement(\r\n Tag,\r\n {\r\n style,\r\n className: cn(className, 'pointer-events-auto'),\r\n onClick,\r\n },\r\n [\r\n React.createElement('span', {\r\n key: 'html',\r\n className: 'pointer-events-none',\r\n dangerouslySetInnerHTML: { __html: textContent || '--' },\r\n }),\r\n ]\r\n );\r\n};\r\n\r\nexport default Typography;\r\n","import { cn } from \"@/lib/utils\";\r\nimport { ChevronRight } from \"lucide-react\";\r\nimport { BreadcrumbProps } from \"@/types/global\";\r\nimport Link from \"next/link\";\r\n\r\nconst Breadcrumb = ({ list = [], className, style }: BreadcrumbProps) => {\r\n return (\r\n <nav\r\n aria-label=\"breadcrumb\"\r\n className={cn(\"flex items-center text-sm text-muted-foreground\", className)}\r\n style={style}\r\n >\r\n {list.map((item: { url: string; header: string, id: string }, index: number) => {\r\n const isLast = index === list.length - 1;\r\n\r\n return (\r\n <div key={item.id} className=\"flex items-center\">\r\n {item.url && !isLast ? (\r\n <Link\r\n href={item.url}\r\n className=\"hover:text-foreground transition-colors\"\r\n >\r\n {item.header}\r\n </Link>\r\n ) : (\r\n <span className=\"text-foreground font-medium\">{item.header}</span>\r\n )}\r\n\r\n {!isLast && (\r\n <ChevronRight className=\"mx-2 h-4 w-4 text-muted-foreground\" />\r\n )}\r\n </div>\r\n );\r\n })}\r\n </nav>\r\n );\r\n}\r\n\r\nexport default Breadcrumb;","import { ChevronDown } from 'lucide-react';\r\nimport Link from 'next/link';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n} from '@/components/ui/dropdown-menu';\r\nimport { ButtonGroupProps } from '@/types/global';\r\n\r\nexport default function ButtonGroup({ style, textContent, className, list = [], onGroupItemClick, onClick }: ButtonGroupProps) {\r\n const data = Array.isArray(list) ? list : [];\r\n const bgColor = style?.backgroundColor || '';\r\n\r\n return (\r\n <div className={'inline-flex rounded-md overflow-hidden border border-teal-200 bg-teal-700 items-center focus:ring-0'} style={{ backgroundColor: bgColor }}>\r\n <Button\r\n className={`rounded-none border-r px-4 py-2 text-whit focus:ring-0 ${className || ''}`}\r\n style={{ backgroundColor: bgColor }}\r\n onClick={(e) => onClick?.(e)}\r\n >\r\n {textContent || 'Button'}\r\n </Button>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n className=\"rounded-none bg-teal-700 px-4 py-2 text-white ring-0 shadow-none hover:bg-teal-600 focus:ring-0\"\r\n aria-label=\"Open Dropdown\"\r\n style={{ backgroundColor: bgColor }}\r\n >\r\n <ChevronDown className=\"w-4 h-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n align=\"end\"\r\n className=\"bg-white min-w-[120px]\"\r\n >\r\n {data.map((item: { url: string; header: string, id: string }) => (\r\n <DropdownMenuItem\r\n key={item.id} className=\"text-black\" onSelect={() => onGroupItemClick?.({\r\n item\r\n })}\r\n >\r\n <Link href={item.url || '#'}>{item.header}</Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction DropdownMenu({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\r\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\r\n}\r\n\r\nfunction DropdownMenuPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\r\n );\r\n}\r\n\r\nfunction DropdownMenuTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\r\n return (\r\n <DropdownMenuPrimitive.Trigger\r\n data-slot=\"dropdown-menu-trigger\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuContent({\r\n className,\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\r\n return (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n data-slot=\"dropdown-menu-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n );\r\n}\r\n\r\nfunction DropdownMenuGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\r\n return (\r\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\r\n );\r\n}\r\n\r\nfunction DropdownMenuItem({\r\n className,\r\n inset,\r\n variant = 'default',\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n variant?: 'default' | 'destructive'\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Item\r\n data-slot=\"dropdown-menu-item\"\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*=\\'text-\\'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\r\n return (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n data-slot=\"dropdown-menu-checkbox-item\"\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n );\r\n}\r\n\r\nfunction DropdownMenuRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioGroup\r\n data-slot=\"dropdown-menu-radio-group\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\r\n return (\r\n <DropdownMenuPrimitive.RadioItem\r\n data-slot=\"dropdown-menu-radio-item\"\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n );\r\n}\r\n\r\nfunction DropdownMenuLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.Label\r\n data-slot=\"dropdown-menu-label\"\r\n data-inset={inset}\r\n className={cn(\r\n 'px-2 py-1.5 text-sm font-medium data-[inset]:pl-8',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\r\n return (\r\n <DropdownMenuPrimitive.Separator\r\n data-slot=\"dropdown-menu-separator\"\r\n className={cn('bg-border -mx-1 my-1 h-px', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<'span'>) {\r\n return (\r\n <span\r\n data-slot=\"dropdown-menu-shortcut\"\r\n className={cn(\r\n 'text-muted-foreground ml-auto text-xs tracking-widest',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DropdownMenuSub({\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\r\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\r\n}\r\n\r\nfunction DropdownMenuSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <DropdownMenuPrimitive.SubTrigger\r\n data-slot=\"dropdown-menu-sub-trigger\"\r\n data-inset={inset}\r\n className={cn(\r\n 'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto size-4\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n );\r\n}\r\n\r\nfunction DropdownMenuSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\r\n return (\r\n <DropdownMenuPrimitive.SubContent\r\n data-slot=\"dropdown-menu-sub-content\"\r\n className={cn(\r\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuPortal,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuGroup,\r\n DropdownMenuLabel,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuSub,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuSubContent,\r\n};\r\n","import React, { useEffect, useState, type CSSProperties } from 'react';\r\n\r\nimport type { SizeProp } from '@fortawesome/fontawesome-svg-core';\r\nimport * as SolidIcons from '@fortawesome/free-solid-svg-icons';\r\nimport * as RegularIcons from '@fortawesome/free-regular-svg-icons';\r\nimport * as BrandIcons from '@fortawesome/free-brands-svg-icons';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\n\r\nexport type IconSet = 'fa-css' | 'fa' | 'fontawesome' | 'lucide';\r\nexport type FAPrefix = 'fas' | 'far' | 'fab' | string;\r\n\r\nexport interface IconProps extends React.HTMLAttributes<HTMLElement> {\r\n /** Icon provider */\r\n iconSet?: IconSet;\r\n\r\n /** Icon name\r\n * - For Lucide: component name (e.g. \"Search\", \"User\").\r\n * - For FA CSS: icon name without prefix (e.g. \"coffee\").\r\n */\r\n icon?: string | any;\r\n\r\n /** FontAwesome CSS prefix (e.g. fas, far, fab) */\r\n prefix?: FAPrefix;\r\n /** Size in px (number) or FontAwesome size */\r\n iconSize?: number | SizeProp;\r\n\r\n /** Additional CSS classes */\r\n className?: string;\r\n\r\n /** Inline styles (include FA CSS variables to satisfy FontAwesomeIcon typings) */\r\n style?: CSSProperties;\r\n\r\n /** Tooltip / accessible title */\r\n title?: string;\r\n\r\n /** FA CSS helpers */\r\n spin?: boolean;\r\n pulse?: boolean;\r\n fixedWidth?: boolean;\r\n onClick?: () => void;\r\n}\r\n\r\nexport default function Icon(props: IconProps) {\r\n const {\r\n iconSet = 'fontawesome',\r\n icon,\r\n prefix = 'fas',\r\n iconSize = 16,\r\n className = '',\r\n style = {} as IconProps['style'],\r\n title = '',\r\n spin = false,\r\n fixedWidth = false,\r\n pulse = false,\r\n ...rest\r\n } = props;\r\n\r\n const [dynamicIcon, setDynamicIcon] = useState<any>(icon || null);\r\n\r\n async function loadFAIcon(iconName: string, prefix: string) {\r\n\r\n const pkgMap: Record<string, any> = {\r\n fas: SolidIcons,\r\n far: RegularIcons,\r\n fab: BrandIcons,\r\n };\r\n\r\n const basePackage = pkgMap[prefix] ?? SolidIcons\r\n return basePackage[iconName] ?? null;\r\n }\r\n\r\n useEffect(() => {\r\n if (icon && (iconSet === 'fontawesome') && prefix) {\r\n loadFAIcon(icon, prefix).then((ico) => setDynamicIcon(ico));\r\n }\r\n }, [iconSet, icon, prefix]);\r\n\r\n // Lucide mode\r\n if (iconSet === 'lucide') {\r\n const Comp = (LucideIcons as any)[icon];\r\n if (!Comp) {\r\n console.warn(`Lucide icon not found: ${icon}`);\r\n return null;\r\n }\r\n\r\n const numericSize =\r\n typeof iconSize === 'number' ? iconSize : parseInt(iconSize as string, 10) || 16;\r\n\r\n return (\r\n <Comp\r\n size={numericSize}\r\n className={cn(\r\n className,\r\n props.onClick ? 'cursor-pointer' : '',\r\n )}\r\n title={title}\r\n style={style}\r\n aria-hidden={title ? undefined : true}\r\n onClick={() => props.onClick?.()}\r\n {...rest}\r\n />\r\n );\r\n }\r\n\r\n // FontAwesome SVG mode\r\n if (iconSet === 'fontawesome') {\r\n if (!dynamicIcon) return null;\r\n const tempStyle = { ...style };\r\n delete tempStyle.height;\r\n delete tempStyle.width;\r\n return (\r\n <FontAwesomeIcon\r\n icon={dynamicIcon}\r\n size={typeof iconSize === 'string' ? iconSize : undefined}\r\n spin={spin}\r\n spinPulse={pulse}\r\n widthAuto={fixedWidth}\r\n className={cn(\r\n className,\r\n props.onClick ? 'cursor-pointer' : '',\r\n )}\r\n title={title}\r\n style={{\r\n ...tempStyle,\r\n }}\r\n onClick={() => props.onClick?.()}\r\n />\r\n );\r\n }\r\n\r\n // FontAwesome CSS mode\r\n if (iconSet === 'fa' || iconSet === 'fa-css') {\r\n const sizeStyle: CSSProperties =\r\n typeof iconSize === 'number' ? { fontSize: iconSize } : {};\r\n\r\n const cls = [\r\n `${prefix} fa-${icon}`,\r\n spin ? 'fa-spin' : '',\r\n pulse ? 'fa-pulse' : '',\r\n fixedWidth ? 'fa-fw' : '',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <i\r\n className={cls}\r\n style={{ ...sizeStyle, ...style }}\r\n title={title}\r\n aria-hidden={title ? undefined : true}\r\n onClick={() => props.onClick?.()}\r\n {...rest}\r\n />\r\n );\r\n }\r\n\r\n console.warn('Unknown icon set:', iconSet);\r\n return null;\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Input } from '@/components/ui/input';\r\nimport { cn } from '@/lib/utils';\r\nimport { TextInputProps } from '@/types/global';\r\n\r\nconst TextInput = ({ className, style, ...props }: TextInputProps) => {\r\n\r\n const placeholder = props.placeholder || 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <Input\r\n type={props.inputType || 'text'}\r\n name={props.name}\r\n id={props.name || 'text-field'}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n value={formatValue(props.value)}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default TextInput;","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { NumberInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst NumberInput = ({ className, style, ...props }: NumberInputProps) => {\r\n\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return 0;\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'number'}\r\n id={props.name || 'number-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default NumberInput;","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Mail } from 'lucide-react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { EmailInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst EmailInput = ({ className, style, ...props }: EmailInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'email'}\r\n name={props.name}\r\n id={props.name || 'email-field'}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default EmailInput;","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { PasswordInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst PasswordInput = ({ className, style, ...props }: PasswordInputProps) => {\r\n\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'password'}\r\n id={props.name || 'password-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default PasswordInput;","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Textarea as TextareaInput } from '@/components/ui/textarea';\r\nimport { TextAreaProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Textarea = ({ className, style, ...props }: TextAreaProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLTextAreaElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <TextareaInput\r\n id={'textarea-field'}\r\n name={props.name}\r\n value={props.value || ''}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default Textarea;","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Input } from '@/components/ui/input';\r\nimport { UrlInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst UrlInput = ({ className, style, ...props }: UrlInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <div className=\"bg-[#E9E9E9] absolute px-10 text-center top-1/2 h-full justify-center items-center flex w-10 -translate-y-1/2 text-[#383838] font-[500] text-[12px]\">\r\n https://\r\n </div>\r\n <Input\r\n id={props.name || 'url-field'}\r\n type={props.inputType || 'url'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default UrlInput;","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport { Label } from '@/components/ui/label';\r\nimport { CheckboxInputProps } from '@/types/global';\r\n\r\nconst CheckboxInput = ({ className, style, ...props }: CheckboxInputProps) => {\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n\r\n const text = props.text ? props.text : 'Subscribe';\r\n\r\n const formatValue = (value: any) => {\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n if (value === 'true' || value === '1') {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value) {\r\n handleChange(formatValue(props.value));\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: boolean) => {\r\n props.onChange?.(value, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <div className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n id={props.name || 'checkbox'}\r\n checked={formatValue(props.value)}\r\n onCheckedChange={handleChange}\r\n disabled={!isEditable || isDisabled}\r\n />\r\n <Label htmlFor={props.name || 'checkbox'}>{text}</Label>\r\n </div>\r\n </div>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default CheckboxInput;","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Label } from '@/components/ui/label';\r\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\r\nimport { RadioInputProps } from '@/types/global';\r\n\r\nexport type Option = {\r\n label: string;\r\n value: string;\r\n};\r\n\r\nconst RadioInput = ({\r\n className,\r\n style,\r\n defaultValue,\r\n onChange,\r\n data = [],\r\n dataKey,\r\n dataLabel,\r\n ...props\r\n}: RadioInputProps) => {\r\n const list = Array.isArray(data) ? data : [];\r\n const options: Option[] = (list || []).map((item: any) => ({\r\n value: item[dataKey || 'value'],\r\n label: item[dataLabel || 'label'],\r\n }));\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: string) => {\r\n onChange?.(value, props?.name || '');\r\n };\r\n\r\n // Ensure defaultValue passed to RadioGroup is a string or undefined\r\n const resolvedDefaultValue = (typeof defaultValue === 'string' ? defaultValue : undefined) ?? options[0]?.value;\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <RadioGroup\r\n defaultValue={resolvedDefaultValue}\r\n onValueChange={handleChange}\r\n >\r\n {\r\n options.length === 0 && (\r\n <div className=\"text-sm text-gray-500\">No options available</div>\r\n )\r\n }\r\n {options.map((item) => (\r\n <div className=\"flex items-center space-x-2\" key={item.value}>\r\n <RadioGroupItem value={item.value} id={`radio-${item.value}`} />\r\n <Label htmlFor={`radio-${item.value}`}>{item.label}</Label>\r\n </div>\r\n ))}\r\n </RadioGroup>\r\n </div>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default RadioInput;\r\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","'use client';\r\n\r\nimport { useEffect, useState, useRef, useCallback } from 'react';\r\n\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport { Label } from '@/components/ui/label';\r\nimport { cn } from '@/lib/utils';\r\nimport { MultiCheckboxInputProps } from '@/types/global';\r\n\r\ntype Option = { value: string; label: string };\r\n\r\nexport default function MultiCheckbox({\r\n apiUrl,\r\n axiosInstance,\r\n data = [],\r\n dataKey = 'id',\r\n dataLabel = 'name',\r\n pageSize = 20,\r\n value,\r\n onChange,\r\n outputFormat = 'array',\r\n className,\r\n style,\r\n source,\r\n loading,\r\n onUncheckItems,\r\n ...props\r\n}: MultiCheckboxInputProps) {\r\n const [options, setOptions] = useState<Option[]>([]);\r\n const [page, setPage] = useState(1);\r\n const [hasMore, setHasMore] = useState(true);\r\n const [pageLoading, setPageLoading] = useState(false);\r\n\r\n const loadMoreRef = useRef<HTMLDivElement>(null);\r\n\r\n const normalizeInput = (val: any): string[] => {\r\n if (!val) return [];\r\n if (Array.isArray(val)) return val;\r\n if (typeof val === 'string') {\r\n if (val.includes(';')) return val.split(';').map((s) => s.trim());\r\n if (val.includes(',')) return val.split(',').map((s) => s.trim());\r\n return [val.trim()];\r\n }\r\n return [];\r\n };\r\n\r\n const selected = normalizeInput(value);\r\n\r\n const convertOutput = (arr: string[]) => {\r\n switch (outputFormat) {\r\n case 'comma':\r\n return arr.join(',');\r\n case 'semicolon':\r\n return arr.join(';');\r\n default:\r\n return arr;\r\n }\r\n };\r\n\r\n const fetchApiPage = useCallback(async () => {\r\n if (!apiUrl) return [];\r\n const client = axiosInstance || (await import('axios')).default;\r\n const res = await client.get(apiUrl, {\r\n params: { page, limit: pageSize },\r\n withCredentials: true,\r\n });\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n return res.data.data;\r\n }\r\n return Array.isArray(res.data) ? res.data : [];\r\n }, [apiUrl, axiosInstance, page, pageSize]);\r\n\r\n const mapData = useCallback(\r\n (items: any[]) => {\r\n if (Array.isArray(items) === false) return [];\r\n return (items || []).map((item) => ({\r\n value: item[dataKey],\r\n label: item[dataLabel],\r\n }));\r\n },\r\n [dataKey, dataLabel]\r\n );\r\n\r\n const loadPage = useCallback(async () => {\r\n if (source !== 'api') return;\r\n if (pageLoading) return;\r\n\r\n setPageLoading(true);\r\n\r\n try {\r\n const pageData = await fetchApiPage();\r\n const mapped = mapData(pageData);\r\n\r\n setOptions((prev) => [...prev, ...mapped]);\r\n\r\n if (pageData.length < pageSize) {\r\n setHasMore(false);\r\n }\r\n } finally {\r\n setPageLoading(false);\r\n }\r\n }, [source, pageLoading, fetchApiPage, mapData, pageSize]);\r\n\r\n useEffect(() => {\r\n if (source === 'api') {\r\n setOptions([]);\r\n setPage(1);\r\n setHasMore(true);\r\n } else {\r\n setOptions(mapData(data));\r\n setHasMore(false);\r\n }\r\n }, [source, JSON.stringify(data)]);\r\n\r\n useEffect(() => {\r\n if (source === 'api') loadPage();\r\n }, [page, source]);\r\n\r\n useEffect(() => {\r\n if (source !== 'api') return;\r\n if (!hasMore || pageLoading) return;\r\n\r\n const observer = new IntersectionObserver((entries) => {\r\n if (entries[0].isIntersecting) {\r\n setPage((prev) => prev + 1);\r\n }\r\n });\r\n\r\n if (loadMoreRef.current) observer.observe(loadMoreRef.current);\r\n return () => observer.disconnect();\r\n }, [source, hasMore, pageLoading]);\r\n\r\n const toggle = (val: string) => {\r\n if (props.isDisabled || props.isReadonly) return;\r\n\r\n const updated = selected.includes(val)\r\n ? selected.filter((v) => v !== val)\r\n : [...selected, val];\r\n\r\n onChange?.(convertOutput(updated), props.name || '');\r\n\r\n onUncheckItems?.(convertOutput(\r\n options.filter((opt) => !updated.includes(opt.value)).map((opt) => opt.value)\r\n ), props.name || '');\r\n };\r\n\r\n return (\r\n <div className={cn('flex flex-col gap-2 max-h-64 overflow-auto', className)} style={style}>\r\n {options.length === 0 && !pageLoading && !loading && (\r\n <div className=\"text-center py-2 text-gray-500 text-sm\">No options available.</div>\r\n )}\r\n {options.map((opt, index) => {\r\n const hasError = !!props.errorMessage;\r\n return (\r\n <div\r\n key={`${index}-${opt.value}`}\r\n className={cn(\r\n 'flex items-center space-x-2 p-1 rounded',\r\n hasError && 'bg-red-50'\r\n )}\r\n >\r\n <Checkbox\r\n id={props.name ? `${props.name}-${opt.value}` : opt.value}\r\n checked={selected.includes(opt.value)}\r\n onCheckedChange={() => toggle(opt.value)}\r\n disabled={props.isDisabled || props.isReadonly}\r\n className={cn(\r\n hasError && 'border-red-500 data-[state=checked]:bg-red-500'\r\n )}\r\n />\r\n <Label\r\n id={props.name ? `${props.name}-${opt.value}` : opt.value}\r\n className={cn(hasError && 'text-red-600')}\r\n htmlFor={props.name ? `${props.name}-${opt.value}` : opt.value}\r\n >{opt.label}</Label>\r\n </div>\r\n );\r\n })}\r\n\r\n {source === 'api' && hasMore && <div ref={loadMoreRef} className=\"h-4\" />}\r\n\r\n {(pageLoading || loading) && (\r\n <div className=\"text-center py-2 text-gray-500 text-sm\">Loading…</div>\r\n )}\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport TinyMceEditor from '@/components/Global/TinyMceEditor';\r\nimport { RichTextInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nexport default function RichText({ className, style, ...props }: RichTextInputProps) {\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (content: string) => {\r\n props.onChange?.(content, props?.name || '');\r\n }\r\n\r\n return (\r\n <div\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n >\r\n <TinyMceEditor onChange={handleChange} value={props.value || ''} isDefault={true} />\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { useMemo, useRef } from 'react';\r\n\r\nimport { Editor } from '@tinymce/tinymce-react';\r\n\r\nexport default function MyEditor({\r\n value,\r\n onChange,\r\n isDefault\r\n}: {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n isDefault?: boolean;\r\n}) {\r\n const editorRef = useRef<any>(null);\r\n\r\n function stripOuterP(html: string): string {\r\n const trimmedHtml = html.trim();\r\n if (!trimmedHtml) return '';\r\n const div = document.createElement('div');\r\n div.innerHTML = trimmedHtml;\r\n const firstChild = div.firstElementChild;\r\n if (div.childElementCount === 1 && firstChild?.tagName === 'P') {\r\n return firstChild.innerHTML;\r\n }\r\n return trimmedHtml;\r\n }\r\n\r\n const isDefaultToolbar = useMemo(() => {\r\n let toolbar = 'undo redo | formatselect | bold italic forecolor';\r\n if (isDefault) {\r\n toolbar = 'undo redo | blocks | ' +\r\n 'bold italic forecolor | alignleft aligncenter ' +\r\n 'alignright alignjustify | bullist numlist outdent indent | ' +\r\n 'removeformat | help';\r\n }\r\n return toolbar;\r\n }, [isDefault]);\r\n\r\n return (\r\n <Editor\r\n apiKey={process.env.NEXT_PUBLIC_TINYMCE_API_KEY}\r\n tinymceScriptSrc={process.env.NEXT_PUBLIC_TINYMCE_SCRIPT_SRC}\r\n onInit={(_evt, editor) => (editorRef.current = editor)}\r\n value={value}\r\n licenseKey='gpl'\r\n init={{\r\n height: 300,\r\n menubar: false,\r\n forced_root_block: false,\r\n plugins: [\r\n 'advlist',\r\n 'autolink',\r\n 'lists',\r\n 'link',\r\n 'image',\r\n 'charmap',\r\n 'preview',\r\n 'anchor',\r\n 'searchreplace',\r\n 'visualblocks',\r\n 'code',\r\n 'fullscreen',\r\n 'insertdatetime',\r\n 'media',\r\n 'table',\r\n 'help',\r\n 'wordcount',\r\n ],\r\n toolbar: isDefaultToolbar,\r\n content_style: `\r\n body {\r\n outline: none;\r\n }\r\n `,\r\n }}\r\n onEditorChange={(content) => onChange?.(stripOuterP(content))}\r\n />\r\n );\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/ui/select';\r\nimport { cn } from '@/lib/utils';\r\nimport { SelectDropdownInputProps } from '@/types/global';\r\nimport LazySelectDropdown from './LazyDropdown';\r\n\r\nconst Dropdown = ({ className, style, ...props }: SelectDropdownInputProps) => {\r\n const list = Array.isArray(props?.data) ? props.data : [];\r\n const placeholder = props.placeholder ? props.placeholder : 'Select an option';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: string) => {\r\n props.onChange?.(value, props?.name ?? '');\r\n };\r\n\r\n const dataKey = props.dataKey || 'value';\r\n const dataLabel = props.dataLabel || 'label';\r\n const options = list.map((item: any) => ({\r\n value: item[dataKey],\r\n label: item[dataLabel]\r\n }));\r\n\r\n if (props.lazyLoad) {\r\n return (\r\n <LazySelectDropdown\r\n {...props}\r\n dataKey={dataKey}\r\n dataLabel={dataLabel}\r\n id={props.name || 'lazy-select-field'}\r\n options={list}\r\n onChange={handleChange}\r\n placeholder={placeholder}\r\n className={className}\r\n style={style}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <Select name={props.name} value={props.value || ''} onValueChange={handleChange} disabled={isDisabled || !isEditable}>\r\n <SelectTrigger\r\n id={props.name || 'select-field'}\r\n className={cn(className, props.errorMessage ? 'border-red-500' : '')}\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n aria-readonly={isReadonly}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {\r\n props.dataLoading && (\r\n <SelectItem value=\"none\" disabled>Loading...</SelectItem>\r\n )\r\n }\r\n {\r\n !props.dataLoading && options.length === 0 && (\r\n <SelectItem value=\"none\" disabled>No options</SelectItem>\r\n )\r\n }\r\n {options.map((opt: { value: string; label: string }) => (\r\n <SelectItem key={opt.value} value={opt.value}>\r\n {opt.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Dropdown;","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","'use client';\r\n\r\nimport { useState, useRef, useEffect, useMemo } from 'react';\r\n\r\nimport { XSquareIcon } from 'lucide-react';\r\n\r\nimport Portal from \"@/components/Wrappers/Portal\";\r\nimport { useLazyDropdown } from '@/hooks/useLazyDropdown';\r\nimport { cn } from \"@/lib/utils\";\r\nimport { SelectDropdownInputProps } from '@/types/global';\r\n\r\ninterface Option {\r\n id: string;\r\n name: string;\r\n}\r\n\r\ninterface LazySelectDropdownProps extends Omit<SelectDropdownInputProps, 'lazyLoad'> {\r\n options: Option[];\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n source?: string;\r\n id?: string;\r\n enableAddNewOption?: boolean;\r\n enforceStrictQueryParams?: boolean;\r\n loading?: boolean;\r\n}\r\n\r\nfunction LazySelectDropdown({\r\n options = [],\r\n value,\r\n onChange,\r\n placeholder,\r\n className,\r\n id,\r\n disabled,\r\n readOnly,\r\n source,\r\n apiUrl,\r\n pageSize,\r\n dataKey = 'id',\r\n dataLabel = 'name',\r\n errorMessage,\r\n axiosInstance,\r\n enableAddNewOption = false,\r\n enforceStrictQueryParams = false,\r\n ...props\r\n}: LazySelectDropdownProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n const observerTarget = useRef<HTMLDivElement>(null);\r\n\r\n const {\r\n options: lazyOptions,\r\n loading,\r\n hasMore,\r\n loadMore,\r\n search,\r\n reset,\r\n loadPage,\r\n createNewOption,\r\n } = useLazyDropdown({\r\n enabled: true,\r\n dataSource: source || '',\r\n apiUrl: apiUrl,\r\n pageSize: pageSize || 10,\r\n dataKey,\r\n dataLabel,\r\n initialData: options || [],\r\n value,\r\n axiosInstance,\r\n enforceStrictQueryParams\r\n });\r\n\r\n const selectedOption = useMemo(() => lazyOptions.find(opt => opt.value === value), [lazyOptions, value]);\r\n\r\n // Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n }\r\n };\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => document.removeEventListener('mousedown', handleClickOutside);\r\n }, []);\r\n\r\n // Infinite scroll\r\n useEffect(() => {\r\n if (!isOpen || !hasMore || loading) return;\r\n\r\n const observer = new IntersectionObserver(\r\n entries => {\r\n if (entries[0].isIntersecting) loadMore();\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n if (observerTarget.current) observer.observe(observerTarget.current);\r\n\r\n return () => observer.disconnect();\r\n }, [isOpen, hasMore, loading, loadMore]);\r\n\r\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const term = e.target.value;\r\n setSearchTerm(term);\r\n search(term);\r\n };\r\n\r\n const handleSelect = (optValue: string) => {\r\n onChange?.(optValue, id || '');\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n reset();\r\n };\r\n\r\n const handleFocus = () => {\r\n if (!disabled) setIsOpen(true);\r\n if (lazyOptions.length === 0)\r\n loadPage(1, '');\r\n };\r\n\r\n const handleRemoveSelection = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onChange?.('', id || '');\r\n setSearchTerm('');\r\n reset();\r\n search('');\r\n };\r\n\r\n const handleAddNewOption = async (newOption: string) => {\r\n const option = await createNewOption(newOption);\r\n if (option) {\r\n onChange?.(option.value, id || '');\r\n setIsOpen(false);\r\n setSearchTerm('');\r\n reset();\r\n }\r\n };\r\n\r\n return (\r\n <div ref={dropdownRef} className=\"relative w-full\">\r\n {/* Trigger Input */}\r\n <input\r\n type=\"text\"\r\n id={id}\r\n name={id}\r\n className={cn(\r\n 'w-full px-3 py-2 border border-[#BDBDBD] rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500 pr-7',\r\n disabled ? 'bg-gray-100 cursor-not-allowed' : 'bg-white cursor-pointer',\r\n className,\r\n errorMessage ? 'border-red-500' : ''\r\n )}\r\n placeholder={selectedOption?.label || placeholder}\r\n value={isOpen ? searchTerm : selectedOption?.label || ''}\r\n onFocus={handleFocus}\r\n onChange={handleSearchChange}\r\n readOnly={!isOpen || readOnly}\r\n disabled={disabled}\r\n autoComplete='off'\r\n />\r\n {selectedOption && !disabled && !readOnly && (\r\n <button\r\n type=\"button\"\r\n aria-label=\"Clear selection\"\r\n onClick={handleRemoveSelection}\r\n className=\"absolute right-2 top-1/2 -translate-y-1/2 h-5 w-5 flex items-center justify-center rounded hover:bg-gray-200 text-gray-500 focus:outline-none\"\r\n >\r\n <XSquareIcon className=\"h-5 w-5 pointer-events-none\" />\r\n </button>\r\n )}\r\n {errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{errorMessage}</p>\r\n )}\r\n {/* Dropdown */}\r\n {isOpen && !disabled && (\r\n <Portal>\r\n <div\r\n onMouseDown={(e) => e.stopPropagation()}\r\n className=\"absolute z-[900] w-fit mt-1 bg-white border border-gray-300 rounded-lg shadow-lg max-h-60 overflow-y-auto\"\r\n style={{\r\n zIndex: 900,\r\n width: dropdownRef.current?.offsetWidth,\r\n top: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().bottom + window.scrollY : 0,\r\n left: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().left + window.scrollX : 0,\r\n }}\r\n >\r\n {\r\n props.loading && !loading ? (\r\n <div className=\"px-3 py-4 text-center text-gray-500 flex items-center justify-center gap-2 text-sm\">\r\n <div className=\"animate-spin w-4 h-4 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\r\n Loading...\r\n </div>\r\n ) : (\r\n <>\r\n {loading && lazyOptions.length === 0 ? (\r\n <div className=\"px-3 py-4 text-center text-gray-500 flex items-center justify-center gap-2 text-sm\">\r\n <div className=\"animate-spin w-4 h-4 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\r\n Loading...\r\n </div>\r\n ) : lazyOptions.length > 0 ? (\r\n <>\r\n {lazyOptions.map((option, index) => (\r\n <div\r\n key={`${option.value}-${index}`}\r\n onClick={() => {\r\n handleSelect(option.value);\r\n }}\r\n className={`px-3 py-2 hover:bg-blue-50 cursor-pointer text-sm ${option.value === value ? 'bg-blue-100' : ''}`}\r\n >\r\n {option.label}\r\n </div>\r\n ))}\r\n\r\n {hasMore && (\r\n <div\r\n ref={observerTarget}\r\n className=\"px-3 py-2 text-center text-gray-400 text-sm border-t\"\r\n >\r\n {loading ? (\r\n <div className=\"flex items-center justify-center gap-2 text-sm\">\r\n <div className=\"animate-spin w-3 h-3 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\r\n Loading more...\r\n </div>\r\n ) : (\r\n 'Scroll for more...'\r\n )}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <div className=\"px-3 py-4 text-sm text-center text-gray-500\">\r\n {searchTerm ? `No results for \"${searchTerm}\"` : 'No options available'}\r\n {\r\n enableAddNewOption && searchTerm && (\r\n <div\r\n onClick={() => {\r\n handleAddNewOption(searchTerm);\r\n }}\r\n className=\"mt-2 px-3 py-2 bg-green-50 hover:bg-green-100 cursor-pointer text-green-700 rounded text-sm\"\r\n >\r\n {`Add \"${searchTerm}\"`}\r\n </div>\r\n )\r\n }\r\n </div>\r\n )}\r\n </>\r\n )\r\n }\r\n </div>\r\n </Portal>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default LazySelectDropdown;","import { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\nimport axios from 'axios';\r\n\r\ninterface LazyDropdownConfig {\r\n enabled: boolean;\r\n dataSource: string;\r\n dataKey: string;\r\n dataLabel: string;\r\n initialData?: any[];\r\n apiUrl?: string; // API endpoint for lazy loading\r\n pageSize?: number; // Items per page\r\n value?: string | string[];\r\n axiosInstance?: typeof axios;\r\n isMultiSelect?: boolean;\r\n enforceStrictQueryParams?: boolean;\r\n fetchOnMount?: boolean;\r\n}\r\n\r\ninterface LazyDropdownOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface LazyDropdownResult {\r\n options: LazyDropdownOption[];\r\n loading: boolean;\r\n hasMore: boolean;\r\n loadMore: () => void;\r\n search: (term: string) => void;\r\n reset: () => void;\r\n loadPage: (pageNum: number, term: string) => void;\r\n createNewOption: (label: string) => Promise<LazyDropdownOption | null>;\r\n}\r\n\r\nexport function useLazyDropdown(config: LazyDropdownConfig): LazyDropdownResult {\r\n const [options, setOptions] = useState<LazyDropdownOption[]>([]);\r\n const [page, setPage] = useState(1);\r\n const [hasMore, setHasMore] = useState(true);\r\n const [loading, setLoading] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const debounceTimer = useRef<NodeJS.Timeout | null>(null);\r\n const allDataRef = useRef<any[]>([]);\r\n const configRef = useRef(config);\r\n\r\n const PAGE_SIZE = config.pageSize || 10;\r\n\r\n useEffect(() => {\r\n setOptions([]);\r\n setPage(1);\r\n setHasMore(true);\r\n }, [config.apiUrl])\r\n\r\n const uniqueOptions = (items: LazyDropdownOption[]) => {\r\n const seen = new Set();\r\n return items.filter((item) => {\r\n if (seen.has(item.value)) return false;\r\n seen.add(item.value);\r\n return true;\r\n });\r\n };\r\n\r\n // Update config ref\r\n useEffect(() => {\r\n configRef.current = config;\r\n }, [config]);\r\n\r\n function getValueByPath(obj: any, path: string) {\r\n if (!obj || !path) return undefined;\r\n const parts = path.split(/\\./); // split by . for nested paths\r\n return parts.reduce((acc, key) => acc?.[key], obj);\r\n }\r\n\r\n // Transform raw data into dropdown options\r\n const transformToOptions = useCallback((data: any[]): LazyDropdownOption[] => {\r\n if (!data || !Array.isArray(data)) return [];\r\n const cfg = configRef.current;\r\n \r\n return data.map(item => {\r\n const value = getValueByPath(item, cfg.dataKey) ?? item.id ?? '';\r\n let label: any = '';\r\n \r\n if (cfg.dataLabel) {\r\n label = getValueByPath(item, cfg.dataLabel) ?? item.name ?? item.label ?? item.first_name ?? '';\r\n }\r\n\r\n return {\r\n value: value,\r\n label: label\r\n };\r\n });\r\n }, []);\r\n\r\n function extractAndEnforceUrlParams(apiUrl: string, enforceStrict: boolean) {\r\n const urlObj = new URL(\r\n apiUrl,\r\n typeof window !== 'undefined' ? window.location.origin : 'http://localhost'\r\n );\r\n\r\n const cleaned: Record<string, any> = {};\r\n let hasEmpty = false;\r\n const baseUrl = urlObj.origin + urlObj.pathname;\r\n\r\n // Loop through params and override duplicates (keeps the last value)\r\n urlObj.searchParams.forEach((value, key) => {\r\n const isEmpty = value === '' || value === undefined || value === null;\r\n\r\n if (isEmpty) {\r\n hasEmpty = true;\r\n\r\n // strict mode → abort entirely\r\n if (enforceStrict) return;\r\n\r\n // non-strict → skip empty but continue\r\n return;\r\n }\r\n\r\n cleaned[key] = value; // last value wins (removes duplicates)\r\n });\r\n\r\n return {\r\n baseUrl,\r\n shouldAbort: enforceStrict && hasEmpty,\r\n params: cleaned,\r\n };\r\n }\r\n\r\n // Fetch data from API\r\n const fetchApiData = useCallback(async (pageNum: number, term: string) => {\r\n if (!configRef.current.apiUrl) return [];\r\n const limit = PAGE_SIZE;\r\n const params: any = { page: pageNum, limit };\r\n if (term) params[configRef.current.dataLabel ? `${configRef.current.dataLabel}[ilike]` : 'search[ilike]'] = term;\r\n\r\n const { baseUrl, shouldAbort, params: urlParams } = extractAndEnforceUrlParams(\r\n configRef.current.apiUrl,\r\n !!configRef.current.enforceStrictQueryParams\r\n );\r\n\r\n if (shouldAbort) {\r\n setLoading(false);\r\n return [];\r\n }\r\n\r\n const finalParams = { ...urlParams, ...params };\r\n\r\n const axiosClient = configRef.current.axiosInstance ?? axios;\r\n const res = await axiosClient.get(baseUrl, {\r\n params: finalParams,\r\n withCredentials: true\r\n });\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n const data = res.data.data;\r\n return transformToOptions(data);\r\n }\r\n return [];\r\n }, [PAGE_SIZE, transformToOptions]);\r\n\r\n // Load a page of data\r\n const loadPage = useCallback(async (pageNum: number, term: string) => {\r\n const cfg = configRef.current;\r\n if (!cfg.enabled) return;\r\n setLoading(true);\r\n\r\n try {\r\n let pageOptions: LazyDropdownOption[] = [];\r\n\r\n if (cfg.dataSource === 'api') {\r\n pageOptions = await fetchApiData(pageNum, term);\r\n // For API, we assume more data is available if we get full page\r\n setHasMore(pageOptions.length === PAGE_SIZE);\r\n } else {\r\n // Local data\r\n const allData = allDataRef.current || [];\r\n let filtered = allData;\r\n if (term) {\r\n const termLower = term.toLowerCase();\r\n filtered = allData.filter(item => {\r\n const label = String(item[cfg.dataLabel] ?? item.name ?? item.label ?? '').toLowerCase();\r\n const value = String(item[cfg.dataKey] ?? item.id ?? '').toLowerCase();\r\n return label.includes(termLower) || value.includes(termLower);\r\n });\r\n }\r\n const start = (pageNum - 1) * PAGE_SIZE;\r\n const end = start + PAGE_SIZE;\r\n pageOptions = transformToOptions(filtered.slice(start, end));\r\n setHasMore(end < filtered.length);\r\n }\r\n\r\n setOptions(prev => {\r\n const merged = pageNum === 1\r\n ? pageOptions\r\n : [...prev, ...pageOptions];\r\n\r\n return uniqueOptions(merged);\r\n });\r\n setPage(pageNum);\r\n } catch (err) {\r\n console.error('❌ useLazyDropdown loadPage error:', err);\r\n setHasMore(false);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [fetchApiData, transformToOptions]);\r\n\r\n const fetchValueItem = async () => {\r\n if (!configRef.current.apiUrl) return [];\r\n try {\r\n setLoading(true);\r\n const axiosClient = configRef.current.axiosInstance ?? axios;\r\n let params: any = {\r\n [configRef.current.dataKey]: configRef.current.value\r\n };\r\n if (Array.isArray(configRef.current.value)) {\r\n if (configRef.current.value.length === 0) {\r\n setLoading(false);\r\n return;\r\n }\r\n params = {\r\n [`${configRef.current.dataKey}[in]`]: configRef.current.value.join(',')\r\n };\r\n }\r\n const { baseUrl, shouldAbort, params: urlParams } = extractAndEnforceUrlParams(\r\n configRef.current.apiUrl,\r\n !!configRef.current.enforceStrictQueryParams\r\n );\r\n\r\n if (shouldAbort) {\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n const finalParams = { ...urlParams, ...params };\r\n const res = await axiosClient.get(baseUrl, {\r\n params: finalParams,\r\n withCredentials: true,\r\n });\r\n\r\n if (res.data?.success && Array.isArray(res.data.data) && res.data.data.length > 0) {\r\n const fetched = transformToOptions(res.data.data);\r\n setOptions(prev => uniqueOptions([...fetched, ...prev]));\r\n }\r\n } catch (err) {\r\n console.warn('⚠️ Failed to fetch default value for dropdown:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const cfg = configRef.current;\r\n if (!cfg.enabled || !cfg.value || cfg.dataSource !== 'api' || !cfg.apiUrl) return;\r\n\r\n if (cfg.isMultiSelect) {\r\n const values = Array.isArray(cfg.value) ? cfg.value.map((v: string) => v.trim()) : [];\r\n const valueExists = values.every(val => options.some(opt => opt.value === val));\r\n if (valueExists) return;\r\n } else {\r\n const valueExists = options.some(opt => opt.value === cfg.value);\r\n if (valueExists) return;\r\n }\r\n fetchValueItem();\r\n }, [JSON.stringify(config.value), config.dataKey, config.apiUrl, config.dataSource]);\r\n\r\n // Load more (next page)\r\n const loadMore = useCallback(() => {\r\n if (!loading && hasMore) {\r\n loadPage(page + 1, searchTerm);\r\n }\r\n }, [loading, hasMore, page, searchTerm]);\r\n\r\n // Search with debounce\r\n const search = useCallback((term: string) => {\r\n setSearchTerm(term);\r\n\r\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\r\n\r\n debounceTimer.current = setTimeout(() => {\r\n loadPage(1, term);\r\n }, 300);\r\n }, []);\r\n\r\n // Reset dropdown\r\n const reset = useCallback(() => {\r\n setSearchTerm('');\r\n setPage(1);\r\n }, []);\r\n\r\n // Initialize data\r\n useEffect(() => {\r\n if (config.initialData?.length) {\r\n allDataRef.current = config.initialData;\r\n }\r\n }, [config.initialData]);\r\n\r\n useEffect(() => {\r\n if (config.fetchOnMount) loadPage(1, '');\r\n\r\n return () => {\r\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\r\n };\r\n }, []);\r\n\r\n const createNewOption = async (label: string) => {\r\n if (!configRef.current.apiUrl) return null;\r\n\r\n const axiosClient = configRef.current.axiosInstance ?? axios;\r\n const apiUrl = configRef.current.apiUrl!;\r\n const urlObj = new URL(\r\n apiUrl,\r\n typeof window !== 'undefined' ? window.location.origin : 'http://localhost'\r\n );\r\n\r\n const queryParams: Record<string, string> = {};\r\n urlObj.searchParams.forEach((value, key) => {\r\n queryParams[key] = value;\r\n });\r\n\r\n const body = {\r\n ...queryParams,\r\n [configRef.current.dataLabel]: label\r\n };\r\n\r\n const res = await axiosClient.post(urlObj.origin + urlObj.pathname, body, {\r\n withCredentials: true,\r\n });\r\n\r\n if (res.data?.success && Array.isArray(res.data.data) && res.data.data.length > 0) {\r\n const fetched = transformToOptions(res.data.data);\r\n setOptions(prev => uniqueOptions([...fetched, ...prev]));\r\n return fetched[0];\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return {\r\n options,\r\n loading,\r\n hasMore,\r\n loadMore,\r\n search,\r\n reset,\r\n loadPage,\r\n createNewOption\r\n };\r\n}\r\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Label } from '@/components/ui/label';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport { SwitchToggleInputProps } from '@/types/global';\r\n\r\nconst SwitchToggle = ({ className, style, ...props }: SwitchToggleInputProps) => {\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: boolean) => {\r\n props.onChange?.(value, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <div className=\"flex items-center space-x-2 mb-2\">\r\n <Switch\r\n id={props.name || 'switch'}\r\n checked={!!props.value}\r\n onCheckedChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n />\r\n <Label htmlFor={props.name || 'switch'}>{props.text}</Label>\r\n </div>\r\n </div>\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default SwitchToggle;","import * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","'use client';\r\nimport { useEffect } from 'react';\r\nimport { PhoneInput as PhoneInputField } from 'react-international-phone';\r\n\r\nimport { PhoneInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nimport 'react-international-phone/style.css';\r\n\r\nconst ensureIndiaCode = (val: string) => {\r\n if (!val) return '';\r\n const trimmed = val.trim();\r\n if (trimmed.startsWith('+')) return trimmed;\r\n const local = trimmed.replace(/^0+/, '');\r\n return `+91${local}`;\r\n};\r\n\r\nconst PhoneInput = ({ className, style, ...props }: PhoneInputProps) => {\r\n const placeholder = props.placeholder ?? 'Enter phone number';\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n\r\n useEffect(() => {\r\n if (props.value !== undefined) {\r\n // Ensure +91 code when mounting\r\n const normalized = ensureIndiaCode(props.value);\r\n handleChange?.(normalized);\r\n }\r\n }, []);\r\n\r\n const handleChange = (val: string) => {\r\n const normalized = ensureIndiaCode(val);\r\n const event = {\r\n target: {\r\n name: props.name || '',\r\n value: normalized\r\n }\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n props.onChange?.(event, props.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <PhoneInputField\r\n defaultCountry=\"in\"\r\n name={props.name}\r\n value={props.value ? ensureIndiaCode(props.value) : ''}\r\n className={cn(\r\n 'rounded-md border-1',\r\n className,\r\n props.errorMessage ? 'border-red-500' : '')}\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n onChange={handleChange}\r\n inputProps={{\r\n id: 'phone-field',\r\n style: { width: '100%', border: 'none', outline: 'none' },\r\n }}\r\n placeholder={placeholder}\r\n disabled={isDisabled || !isEditable}\r\n />\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default PhoneInput;","'use client';\r\nimport { useEffect } from 'react'\r\nimport { Search } from 'lucide-react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { SearchInputProps } from '@/types/global';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst SearchInput = ({ className, style, ...props }: SearchInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"flex justify-start items-center relative\">\r\n <Input\r\n type={props.inputType || 'search'}\r\n id={props.name || 'text-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default SearchInput;","'use client';\r\nimport { useEffect } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { cn } from '@/lib/utils';\r\nimport { FileInputProps } from '@/types/global';\r\n\r\nconst FileInput = ({ className, style, ...props }: FileInputProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n const formatValue = (value: any) => {\r\n if (props.inputType === 'file') {\r\n return value instanceof File || value instanceof FileList ? value : null;\r\n }\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n };\r\n\r\n return (\r\n <div className=\"d-flex items-center relative align-middle\">\r\n <Input\r\n type={props.inputType || 'file'}\r\n id={props.name || 'file-field'}\r\n name={props.name}\r\n value={formatValue(props.value)}\r\n className={\r\n cn(className, props.errorMessage ? 'border-red-500' : '')\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete=\"off\"\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n />\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default FileInput;","'use client';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { format } from 'date-fns';\r\nimport { Calendar1Icon, XSquareIcon } from 'lucide-react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { Calendar } from '@/components/ui/calendar';\r\nimport { Input } from '@/components/ui/input';\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '@/components/ui/popover';\r\nimport { cn } from '@/lib/utils';\r\nimport { DatePickerInputProps } from '@/types/global';\r\n\r\nfunction resolveDate(option: any, customOption?: any): Date | undefined {\r\n if (!option) return undefined;\r\n\r\n switch (option) {\r\n case 'today':\r\n return new Date();\r\n case 'custom':\r\n return customOption ? new Date(customOption) : undefined;\r\n case 'none':\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default function DateTimePicker({\r\n className,\r\n style,\r\n mode = 'date',\r\n ...props\r\n}: DatePickerInputProps) {\r\n\r\n const placeholderMap = {\r\n date: 'Select date',\r\n datetime: 'Select date & time',\r\n time: 'Select time',\r\n };\r\n const placeholder = props.placeholder ?? placeholderMap[mode as keyof typeof placeholderMap];\r\n\r\n const minimumDate = props.minimumDate ?? 'none';\r\n const customMinimumDate = props.customMinimumDate ?? '';\r\n\r\n const maximumDate = props.maximumDate ?? 'none';\r\n const customMaximumDate = props.customMaximumDate ?? '';\r\n\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n const minDate = resolveDate(minimumDate, customMinimumDate);\r\n const maxDate = resolveDate(maximumDate, customMaximumDate);\r\n\r\n // Internal state: keep a Date, initialize from props.value (ISO/string)\r\n const [date, setDate] = React.useState<Date | undefined>(() => {\r\n if (!props.value) return undefined;\r\n const d = new Date(props.value as any);\r\n return isNaN(d.getTime()) ? undefined : d;\r\n });\r\n\r\n // Time pieces (24h)\r\n const initialHours = date ? date.getHours() : 0;\r\n const initialMinutes = date ? date.getMinutes() : 0;\r\n const [hours, setHours] = React.useState(initialHours);\r\n const [minutes, setMinutes] = React.useState(initialMinutes);\r\n\r\n const [amPm, setAmPm] = React.useState('AM');\r\n\r\n const displayHours = React.useMemo(() => {\r\n if (hours === 0) return 12;\r\n if (hours > 12) return hours - 12;\r\n return hours;\r\n }, [hours]);\r\n\r\n React.useEffect(() => {\r\n setAmPm(hours >= 12 ? 'PM' : 'AM');\r\n }, [hours]);\r\n\r\n React.useEffect(() => {\r\n if (!props.value) {\r\n setDate(undefined);\r\n return;\r\n }\r\n const d = new Date(props.value as any);\r\n if (!isNaN(d.getTime())) {\r\n setDate(d);\r\n setHours(d.getHours());\r\n setMinutes(d.getMinutes());\r\n }\r\n }, [props.value]);\r\n\r\n const [year, setYear] = React.useState(date ? date.getFullYear() : new Date().getFullYear());\r\n\r\n React.useEffect(() => {\r\n if (!date) return;\r\n const newDate = new Date(date);\r\n newDate.setFullYear(year);\r\n setDate(newDate);\r\n emitChange(newDate);\r\n }, [year]);\r\n\r\n const emitChange = (nextDate: Date | undefined) => {\r\n if (!props.onChange) return;\r\n\r\n let valueString = '';\r\n if (!nextDate) {\r\n valueString = '';\r\n } else if (mode === 'date') {\r\n valueString = format(nextDate, 'yyyy-MM-dd');\r\n } else if (mode === 'time') {\r\n valueString = format(nextDate, 'HH:mm:ss');\r\n } else {\r\n valueString = nextDate.toISOString();\r\n }\r\n\r\n const target = {\r\n name: props.name || '',\r\n value: valueString,\r\n } as HTMLInputElement;\r\n\r\n const event = {\r\n target,\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n\r\n props.onChange(event, props.name || '');\r\n };\r\n\r\n const updateDateTime = (nextBaseDate: Date | undefined, h = hours, m = minutes) => {\r\n if (!nextBaseDate) {\r\n setDate(undefined);\r\n emitChange(undefined);\r\n return;\r\n }\r\n\r\n const d = new Date(nextBaseDate);\r\n if (mode !== 'date') {\r\n d.setHours(h);\r\n d.setMinutes(m);\r\n d.setSeconds(0);\r\n d.setMilliseconds(0);\r\n } else {\r\n d.setHours(0, 0, 0, 0);\r\n }\r\n\r\n if (minDate && d < minDate) return;\r\n if (maxDate && d > maxDate) return;\r\n\r\n setDate(d);\r\n setYear(d.getFullYear());\r\n emitChange(d);\r\n };\r\n\r\n const handleDaySelect = (next: Date | undefined) => {\r\n if (!next) {\r\n setDate(undefined);\r\n emitChange(undefined);\r\n return;\r\n }\r\n\r\n const clickedDate = new Date(next);\r\n\r\n updateDateTime(clickedDate);\r\n };\r\n\r\n const updateTimeInDate = (h: number, m: number) => {\r\n if (!date) {\r\n // If no current date, use today or fallback date\r\n const fallbackDate = new Date();\r\n fallbackDate.setHours(h);\r\n fallbackDate.setMinutes(m);\r\n fallbackDate.setSeconds(0);\r\n fallbackDate.setMilliseconds(0);\r\n setDate(fallbackDate);\r\n emitChange(fallbackDate);\r\n } else {\r\n const newDate = new Date(date);\r\n newDate.setHours(h);\r\n newDate.setMinutes(m);\r\n newDate.setSeconds(0);\r\n newDate.setMilliseconds(0);\r\n setDate(newDate);\r\n emitChange(newDate);\r\n }\r\n };\r\n\r\n const handleHoursChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n let h = Number(e.target.value);\r\n if (amPm === 'PM' && h < 12) h += 12;\r\n if (amPm === 'AM' && h === 12) h = 0;\r\n setHours(h);\r\n updateTimeInDate(h, minutes);\r\n };\r\n\r\n const handleMinutesChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const m = Number(e.target.value);\r\n setMinutes(m);\r\n updateTimeInDate(hours, m);\r\n };\r\n\r\n const handleAmPmChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const val = e.target.value;\r\n setAmPm(val);\r\n let h = displayHours;\r\n if (val === 'PM' && h < 12) h += 12;\r\n if (val === 'AM' && h === 12) h = 0;\r\n setHours(h);\r\n updateTimeInDate(h, minutes);\r\n };\r\n\r\n const currentYear = new Date().getFullYear();\r\n const yearOptions = [];\r\n for (let y = currentYear - 50; y <= currentYear + 10; y++) {\r\n yearOptions.push(y);\r\n }\r\n\r\n const displayValue = React.useMemo(() => {\r\n if (!date) return '';\r\n try {\r\n if (mode === 'date') return format(date, 'dd-MM-yyyy');\r\n if (mode === 'time') return format(date, 'hh:mm aa');\r\n return format(date, 'dd-MM-yyyy hh:mm aa');\r\n } catch {\r\n return '';\r\n }\r\n }, [date, mode]);\r\n\r\n const isInputDisabled = isDisabled || !isEditable;\r\n\r\n const [calendarMonthState, setCalendarMonthState] = React.useState(() => {\r\n const currentMonth = new Date().getMonth();\r\n return date ? new Date(date.getFullYear(), date.getMonth()) : new Date(year, currentMonth);\r\n });\r\n\r\n React.useEffect(() => {\r\n setCalendarMonthState(new Date(year, calendarMonthState.getMonth()));\r\n }, [year]);\r\n\r\n const handleToday = () => {\r\n const today = new Date();\r\n const selectedYearDate = new Date(year, today.getMonth(), today.getDate());\r\n updateDateTime(selectedYearDate);\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col\">\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(\r\n 'w-full justify-start text-left font-normal',\r\n !date && 'text-muted-foreground',\r\n props.errorMessage && 'border-red-500',\r\n className\r\n )}\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor,\r\n }}\r\n disabled={isInputDisabled}\r\n >\r\n <Calendar1Icon className=\"absolute left-2 top-2\" />\r\n <span className=\"ml-5\">{displayValue || placeholder}</span>\r\n {displayValue && (\r\n <XSquareIcon\r\n className=\"absolute right-2 top-2 cursor-pointer\"\r\n role='presentation'\r\n style={{ pointerEvents: 'auto' }}\r\n onClick={e => {\r\n e.stopPropagation();\r\n setDate(undefined);\r\n emitChange(undefined);\r\n }}\r\n />\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n\r\n <PopoverContent className=\"w-auto text-sm p-2\" align=\"start\">\r\n <div className=\"flex flex-col gap-1\">\r\n {(mode === 'date' || mode === 'datetime') && (\r\n <>\r\n <div className=\"flex items-center justify-between gap-1\">\r\n <label\r\n className=\"text-xs text-blue-600 font-bold cursor-pointer\"\r\n role='presentation'\r\n onClick={handleToday}\r\n >\r\n Today\r\n </label>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={year}\r\n onChange={(e) => setYear(Number(e.target.value))}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n {yearOptions.map((y) => (\r\n <option key={y} value={y}>\r\n {y}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n <div className=\"calendar-container\">\r\n <Calendar\r\n mode=\"single\"\r\n selected={date}\r\n onSelect={handleDaySelect}\r\n month={calendarMonthState}\r\n onMonthChange={(newMonth) => setCalendarMonthState(newMonth)}\r\n disabled={(d) => {\r\n if (minDate && d < minDate) return true;\r\n if (maxDate && d > maxDate) return true;\r\n return false;\r\n }}\r\n className='p-[10px]'\r\n autoFocus\r\n />\r\n </div>\r\n </>\r\n )}\r\n\r\n {(mode === 'time' || mode === 'datetime') && (\r\n <div className=\"flex items-center gap-2 mt-0\">\r\n <label className=\"text-xs text-muted-foreground\">Time</label>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={displayHours}\r\n onChange={handleHoursChange}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n {Array.from({ length: 12 }, (_, i) => i + 1).map((hour) => (\r\n <option key={hour} value={hour}>\r\n {hour.toString().padStart(2, '0')}\r\n </option>\r\n ))}\r\n </select>\r\n <span className=\"text-sm\">:</span>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={minutes}\r\n onChange={handleMinutesChange}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n {Array.from({ length: 12 }).map((_, i) => {\r\n const val = i * 5;\r\n return (\r\n <option key={val} value={val}>\r\n {val.toString().padStart(2, '0')}\r\n </option>\r\n );\r\n })}\r\n </select>\r\n <select\r\n className=\"h-8 rounded border bg-background px-2 text-xs\"\r\n value={amPm}\r\n onChange={handleAmPmChange}\r\n disabled={isInputDisabled || isReadonly}\r\n >\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n )}\r\n </div>\r\n\r\n </PopoverContent>\r\n </Popover>\r\n\r\n <Input\r\n type=\"hidden\"\r\n id={props.name}\r\n name={props.name}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n readOnly={isReadonly}\r\n value={\r\n !date\r\n ? ''\r\n : mode === 'date'\r\n ? format(date, 'yyyy-MM-dd')\r\n : mode === 'time'\r\n ? format(date, 'HH:mm:ss')\r\n : date.toISOString()\r\n }\r\n onChange={() => { }}\r\n />\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/components/ui/button\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","'use client';\r\nimport React, { useEffect } from 'react';\r\n\r\nimport { addDays, format } from 'date-fns';\r\nimport { DateRange as DateRangeProps } from 'react-day-picker';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { Calendar } from '@/components/ui/calendar';\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '@/components/ui/popover';\r\nimport { cn } from '@/lib/utils';\r\nimport { DateRangeInputProps } from '@/types/global';\r\n\r\nconst DateRange = ({ className, style, ...props }: DateRangeInputProps) => {\r\n const isDateRange = (val: any): val is DateRangeProps => !!val && val.from instanceof Date;\r\n\r\n const [date, setDate] = React.useState<DateRangeProps | undefined>(\r\n isDateRange(props.value)\r\n ? props.value\r\n : {\r\n from: new Date(),\r\n to: addDays(new Date(), 7),\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value && isDateRange(props.value)) {\r\n handleChange?.(props.value);\r\n }\r\n }, []);\r\n\r\n const handleChange = (value: DateRangeProps | undefined) => {\r\n setDate(value);\r\n if (value) {\r\n props.onChange?.(value, props?.name || '');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <div className={className} style={style}>\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n id=\"date\"\r\n variant={'outline'}\r\n className={cn(\r\n 'w-full justify-start text-left font-normal text-[11px] border-[#BDBDBD]',\r\n !date && 'text-muted-foreground'\r\n )}\r\n >\r\n {date?.from ? (\r\n date.to ? (\r\n <>\r\n {format(date.from, 'LLL dd, y')} -{' '}\r\n {format(date.to, 'LLL dd, y')}\r\n </>\r\n ) : (\r\n format(date.from, 'LLL dd, y')\r\n )\r\n ) : (\r\n <span>Pick a date range</span>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <Calendar\r\n mode=\"range\"\r\n defaultMonth={date?.from}\r\n selected={date}\r\n onSelect={handleChange}\r\n numberOfMonths={2}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n {props.errorMessage && <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>}\r\n </>\r\n );\r\n}\r\n\r\nexport default DateRange;","'use client';\r\nimport { useEffect } from 'react';\r\nimport { Input } from '@/components/ui/input';\r\nimport { cn } from '@/lib/utils';\r\nimport { TextInputGroupProps } from '@/types/global';\r\n\r\nconst TextInputGroup = ({ className, style, prepend, append, ...props }: TextInputGroupProps) => {\r\n const placeholder = props.placeholder ?? 'Placeholder text';\r\n\r\n // Controls\r\n const isEditable = props.isEditable ?? true;\r\n const isDisabled = props.isDisabled ?? false;\r\n const isReadonly = props.isReadonly ?? false;\r\n const isAutocomplete = props.isAutocomplete ?? false;\r\n\r\n useEffect(() => {\r\n // Initialize onchange for default value\r\n if (props.value !== undefined) {\r\n const e = { target: { value: props.value }, type: 'change' } as React.ChangeEvent<HTMLInputElement>;\r\n handleChange?.(e);\r\n }\r\n }, []);\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n props.onChange?.(e, props?.name || '');\r\n };\r\n\r\n return (\r\n <>\r\n <div className={\r\n cn(\r\n 'flex justify-start items-center relative border border-input rounded-md bg-transparent focus-within:ring-2 focus-within:ring-ring focus-within:border-primary',\r\n className,\r\n 'p-0 m-0',\r\n props.errorMessage ? 'border-red-500' : ''\r\n )\r\n }\r\n >\r\n {prepend && (\r\n <div className=\"px-3 flex items-center bg-gray-500 text-white h-10 rounded-l-md\">\r\n {prepend}\r\n </div>\r\n )}\r\n <Input\r\n id={props.name || 'prepend-input'}\r\n type=\"url\"\r\n name={props.name}\r\n value={props.value || ''}\r\n className={\r\n cn(\r\n className,\r\n 'rounded-none flex-1 border-none focus:ring-0'\r\n )\r\n }\r\n style={{\r\n ...style,\r\n borderColor: props.errorMessage ? '#f87171' : style?.borderColor\r\n }}\r\n autoComplete={isAutocomplete ? 'on' : 'off'}\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n disabled={isDisabled || !isEditable}\r\n readOnly={isReadonly}\r\n />\r\n {append && (\r\n <div className=\"px-3 flex items-center bg-gray-500 text-white h-10 rounded-r-md\">\r\n {append}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {props.errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{props.errorMessage}</p>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default TextInputGroup;","'use client';\r\n\r\nimport { useState, useRef, useEffect, useMemo, useCallback } from 'react';\r\n\r\nimport { XIcon, XSquareIcon } from 'lucide-react';\r\n\r\nimport Portal from '@/components/Wrappers/Portal';\r\nimport { useLazyDropdown } from '@/hooks/useLazyDropdown';\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface Option {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface LazyMultiSelectDropdownProps extends Omit<any, 'lazyLoad'> {\r\n options?: Option[];\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n id?: string;\r\n source?: string;\r\n apiUrl?: string;\r\n pageSize?: number;\r\n dataKey?: string;\r\n dataLabel?: string;\r\n value?: string[] | string;\r\n onChange?: (val: string[] | string, id?: string) => void;\r\n errorMessage?: string;\r\n axiosInstance?: any;\r\n outputFormat?: 'array' | 'comma' | 'semicolon';\r\n}\r\n\r\nexport default function LazyMultiSelectDropdown({\r\n value = [],\r\n onChange,\r\n placeholder,\r\n className,\r\n id,\r\n disabled,\r\n readOnly,\r\n source,\r\n apiUrl,\r\n pageSize,\r\n dataKey = 'id',\r\n dataLabel = 'name',\r\n errorMessage,\r\n axiosInstance,\r\n outputFormat = 'array',\r\n ...props\r\n}: LazyMultiSelectDropdownProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n const observerTarget = useRef<HTMLDivElement>(null);\r\n\r\n const ensureUnique = (arr: string[]): string[] => {\r\n return Array.from(new Set(arr));\r\n };\r\n\r\n const normalizeInput = (value: any): string[] => {\r\n let arr: string[] = [];\r\n\r\n if (Array.isArray(value)) {\r\n arr = value;\r\n } else if (typeof value === 'string') {\r\n if (!value.trim()) return [];\r\n if (value.includes(';')) arr = value.split(';').map(v => v.trim());\r\n else if (value.includes(',')) arr = value.split(',').map(v => v.trim());\r\n else arr = [value.trim()];\r\n }\r\n\r\n return ensureUnique(arr);\r\n };\r\n\r\n const normalizedValue = normalizeInput(value);\r\n\r\n const list = Array.isArray(props?.data) ? props.data : [];\r\n const {\r\n options: lazyOptions,\r\n loading,\r\n hasMore,\r\n loadMore,\r\n search,\r\n loadPage,\r\n } = useLazyDropdown({\r\n enabled: true,\r\n dataSource: source || '',\r\n apiUrl: apiUrl,\r\n pageSize: pageSize ?? 10,\r\n dataKey,\r\n dataLabel,\r\n initialData: list || [],\r\n value: normalizedValue,\r\n axiosInstance,\r\n isMultiSelect: true,\r\n });\r\n\r\n const dataLoading = props.loading || loading;\r\n\r\n const convertOutput = (values: string[]): string[] | string => {\r\n const unique = ensureUnique(values);\r\n switch (outputFormat) {\r\n case 'comma':\r\n return unique.join(',');\r\n case 'semicolon':\r\n return unique.join(';');\r\n default:\r\n return unique;\r\n }\r\n };\r\n\r\n const selectedOptions = useMemo((): Option[] => {\r\n return normalizedValue.map(id => {\r\n const fromLazy = lazyOptions.find(opt => opt.value === id);\r\n if (fromLazy) return fromLazy;\r\n return { value: id, label: id };\r\n });\r\n }, [normalizedValue, lazyOptions]);\r\n\r\n useEffect(() => {\r\n const handleClick = (e: MouseEvent) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleClick);\r\n return () => document.removeEventListener('mousedown', handleClick);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isOpen || !hasMore || loading) return;\r\n\r\n const obs = new IntersectionObserver(\r\n entries => {\r\n if (entries[0].isIntersecting) loadMore();\r\n },\r\n { threshold: 0.1 }\r\n );\r\n\r\n if (observerTarget.current) obs.observe(observerTarget.current);\r\n return () => obs.disconnect();\r\n }, [isOpen, hasMore, loading, loadMore]);\r\n\r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const term = e.target.value;\r\n setSearchTerm(term);\r\n search(term);\r\n };\r\n\r\n const toggleSelect = (val: string) => {\r\n let updated: string[];\r\n\r\n if (normalizedValue.includes(val)) {\r\n updated = normalizedValue.filter(v => v !== val);\r\n } else {\r\n updated = ensureUnique([...normalizedValue, val]);\r\n }\r\n\r\n onChange?.(convertOutput(updated), id);\r\n };\r\n\r\n const removeTag = (val: string) => {\r\n const updated = normalizedValue.filter(v => v !== val);\r\n onChange?.(convertOutput(updated), id);\r\n };\r\n\r\n const handleFocus = () => {\r\n if (!disabled) {\r\n setIsOpen(true);\r\n if (lazyOptions.length === 0) {\r\n loadPage(1, '');\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div ref={dropdownRef} className=\"relative w-full\">\r\n <div\r\n onClick={handleFocus}\r\n className={cn(\r\n 'w-full flex items-center flex-wrap gap-1 border border-[#BDBDBD] rounded-md bg-white cursor-pointer',\r\n disabled && 'bg-gray-100 cursor-not-allowed',\r\n errorMessage && 'border-red-500',\r\n className,\r\n 'px-2 py-2 min-h-[35px]'\r\n )}\r\n >\r\n {selectedOptions.map(opt => (\r\n <span\r\n key={opt.value}\r\n className=\"bg-blue-100 text-blue-700 px-2 py-1 rounded-md text-xs flex items-center gap-1\"\r\n >\r\n {opt.label}\r\n {!disabled && !readOnly && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n removeTag(opt.value);\r\n }}\r\n className=\"hover:text-red-600\"\r\n >\r\n <XIcon size={12} />\r\n </button>\r\n )}\r\n </span>\r\n ))}\r\n\r\n <input\r\n type=\"text\"\r\n placeholder={selectedOptions.length ? '' : placeholder}\r\n className=\"flex-1 min-w-[60px] px-2 py-0 outline-none text-xs disabled:cursor-not-allowed\"\r\n value={isOpen ? searchTerm : ''}\r\n onChange={handleSearch}\r\n readOnly={readOnly}\r\n disabled={disabled}\r\n autoComplete='off'\r\n />\r\n </div>\r\n\r\n {errorMessage && (\r\n <p className=\"mt-1 text-xs text-red-500\">{errorMessage}</p>\r\n )}\r\n\r\n {isOpen && !disabled && (\r\n <Portal>\r\n <div\r\n onMouseDown={(e) => e.stopPropagation()}\r\n className=\"absolute z-[999] mt-1 bg-white border rounded-lg shadow-lg max-h-60 overflow-y-auto\"\r\n style={{\r\n zIndex: 900,\r\n width: dropdownRef.current?.offsetWidth,\r\n top: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().bottom + window.scrollY : 0,\r\n left: dropdownRef.current ? dropdownRef.current.getBoundingClientRect().left + window.scrollX : 0,\r\n }}\r\n >\r\n {dataLoading && lazyOptions.length === 0 ? (\r\n <div className=\"px-3 py-3 text-center text-gray-500\">\r\n Loading...\r\n </div>\r\n ) : lazyOptions.length > 0 ? (\r\n <>\r\n {lazyOptions.map((option) => {\r\n const isSelected = normalizedValue.includes(option.value);\r\n return (\r\n <div\r\n key={option.value}\r\n onClick={() => toggleSelect(option.value)}\r\n className={cn(\r\n 'px-3 py-2 text-sm cursor-pointer hover:bg-blue-50 flex justify-between',\r\n isSelected && 'bg-blue-100'\r\n )}\r\n >\r\n {option.label}\r\n {isSelected && <XSquareIcon size={16} />}\r\n </div>\r\n );\r\n })}\r\n\r\n {hasMore && (\r\n <div\r\n ref={observerTarget}\r\n className=\"px-3 py-3 text-center text-gray-400 text-sm\"\r\n >\r\n {loading ? 'Loading…' : 'Scroll for more…'}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <div className=\"px-3 py-3 text-center text-gray-500\">\r\n No results\r\n </div>\r\n )}\r\n </div>\r\n </Portal>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\nimport * as React from 'react';\r\n\r\nimport { faEllipsisH } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {\r\n ColumnDef,\r\n flexRender,\r\n getCoreRowModel,\r\n getPaginationRowModel,\r\n getFilteredRowModel,\r\n ColumnFiltersState,\r\n useReactTable,\r\n} from '@tanstack/react-table';\r\nimport { ArrowDown, ArrowUp, ArrowUpDown, Search } from 'lucide-react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '@/components/ui/popover';\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from '@/components/ui/table';\r\nimport { useDynamicColumns } from '@/lib/table/useDynamicColumns';\r\n\r\ninterface RowAction<TData> {\r\n id: string;\r\n header: string;\r\n onClick: (row: TData) => void;\r\n icon?: string;\r\n}\r\n\r\ninterface DataTableProps<TData, TValue> {\r\n columns: ColumnDef<TData, TValue>[];\r\n data: TData[];\r\n rowActions?: RowAction<TData>[];\r\n loading?: boolean;\r\n onCellClick?: (cellData: TData, columnId: string) => void;\r\n onDeleteRow?: (cellData: TData, columnId: string) => void;\r\n cellClickEnabled?: (cellData: TData, columnId: string) => boolean;\r\n pagination?: boolean;\r\n controlledPageIndex?: number;\r\n onPageChange?: (pageIndex: number, pageSize: number) => void;\r\n pageSize?: number;\r\n paginationMode?: 'client' | 'server';\r\n totalRecords?: number;\r\n onSortChange?: (columnKey: string, direction: 'asc' | 'desc') => void;\r\n onFilterChange?: (filters: Record<string, string>) => void;\r\n onGlobalSearch?: (term: string) => void;\r\n globalSearch?: boolean;\r\n enableDelete?: boolean;\r\n enableRowSelection?: boolean;\r\n getRowSelection?: (selectedRows: { rows: TData[] }) => void;\r\n}\r\n\r\nexport function DataTable<TData, TValue>({\r\n columns,\r\n data,\r\n loading,\r\n pagination = false,\r\n controlledPageIndex,\r\n onPageChange,\r\n pageSize = 10,\r\n paginationMode = 'client',\r\n totalRecords = 0,\r\n onSortChange,\r\n onFilterChange,\r\n onGlobalSearch,\r\n globalSearch,\r\n onCellClick,\r\n onDeleteRow,\r\n rowActions,\r\n enableRowSelection = false,\r\n getRowSelection,\r\n}: DataTableProps<TData, TValue>) {\r\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\r\n const [columnVisibility, setColumnVisibility] = React.useState<Record<string, boolean>>({});\r\n const [manualSort, setManualSort] = React.useState<{ key: string; dir: 'asc' | 'desc' } | null>(null);\r\n const [searchTerm, setSearchTerm] = React.useState('');\r\n const tableData = Array.isArray(data) ? data : [];\r\n\r\n const finalCols = [...columns];\r\n\r\n if (enableRowSelection) {\r\n finalCols.unshift({\r\n id: '__select__',\r\n renderer: 'checkbox',\r\n size: 40,\r\n header: ({ table }) => (\r\n <input\r\n type=\"checkbox\"\r\n checked={table.getIsAllRowsSelected()}\r\n onChange={table.getToggleAllRowsSelectedHandler()}\r\n />\r\n ),\r\n meta: {\r\n cellClass: '',\r\n cellStyle: {},\r\n headerLabel: 'Select',\r\n },\r\n enableSorting: false,\r\n enableColumnFilter: false,\r\n });\r\n }\r\n\r\n const dynamicCols = useDynamicColumns({ columns: finalCols, enableRowSelection });\r\n const [rowSelection, setRowSelection] = React.useState({});\r\n\r\n const [localPageSize, setLocalPageSize] = React.useState(pageSize);\r\n\r\n const table = useReactTable({\r\n data: tableData,\r\n columns: dynamicCols,\r\n state: {\r\n columnFilters,\r\n columnVisibility,\r\n rowSelection,\r\n ...(paginationMode === 'server' ? {\r\n pagination: {\r\n pageIndex: controlledPageIndex ?? 0,\r\n pageSize: localPageSize,\r\n },\r\n } : {}),\r\n },\r\n enableRowSelection: !!enableRowSelection,\r\n onRowSelectionChange: (updater) => {\r\n setRowSelection((old) => {\r\n const newState = typeof updater === 'function' ? updater(old) : updater;\r\n\r\n const selectedData = Object.keys(newState)\r\n .filter((key) => newState[key])\r\n .map((rowId) => tableData[Number(rowId)]);\r\n\r\n getRowSelection?.({ rows: selectedData });\r\n\r\n return newState;\r\n });\r\n },\r\n onColumnFiltersChange: setColumnFilters,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getPaginationRowModel: pagination && paginationMode === 'client' ? getPaginationRowModel() : undefined,\r\n manualPagination: paginationMode === 'server',\r\n pageCount: paginationMode === 'server' ? Math.ceil(totalRecords / localPageSize) : undefined,\r\n ...(paginationMode === 'server'\r\n ? {\r\n onPaginationChange: (updater) => {\r\n const prev = table.getState().pagination;\r\n const next = typeof updater === 'function' ? updater(prev) : updater;\r\n onPageChange?.(next.pageIndex, next.pageSize);\r\n },\r\n }\r\n : {}),\r\n });\r\n\r\n const getPageNumbers = (currentPage: number, totalPages: number, maxVisiblePages = 5) => {\r\n if (totalPages <= maxVisiblePages) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const leftSiblingIndex = Math.max(currentPage - 1, 1);\r\n const rightSiblingIndex = Math.min(currentPage + 1, totalPages);\r\n\r\n const shouldShowLeftDots = leftSiblingIndex > 2;\r\n const shouldShowRightDots = rightSiblingIndex < totalPages - 1;\r\n\r\n if (!shouldShowLeftDots && shouldShowRightDots) {\r\n return [1, 2, 3, '...'];\r\n }\r\n if (shouldShowLeftDots && !shouldShowRightDots) {\r\n return [1, '...', totalPages - 2, totalPages - 1, totalPages];\r\n }\r\n if (shouldShowLeftDots && shouldShowRightDots) {\r\n return [1, '...', currentPage - 1, currentPage, currentPage + 1, '...'];\r\n }\r\n return [];\r\n };\r\n\r\n const pageCount = table.getPageCount() === 0 ? 1 : table.getPageCount();\r\n\r\n const handlePageSizeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const newSize = Number(e.target.value);\r\n const currentPageIndex = table.getState().pagination.pageIndex; // get current page index\r\n onPageChange?.(currentPageIndex, newSize);\r\n setLocalPageSize(newSize);\r\n };\r\n\r\n const pageSizeOptions = React.useMemo(() => {\r\n const options = [5, 10, 20, 50, 100].filter(size => size < totalRecords);\r\n if (options.length === 0) {\r\n options.push(5);\r\n }\r\n return options;\r\n }, [totalRecords]);\r\n\r\n return (\r\n <div className=\"overflow-hidden rounded-md w-full\">\r\n\r\n {!loading && (\r\n <div className={'flex justify-between p-2 bg-gray-50'}>\r\n <div className='flex items-center gap-4 w-full'>\r\n {!!totalRecords && (<p className='text-sm font-medium'>Total Records : {totalRecords.toLocaleString('en-IN') || 0}</p>)}\r\n {globalSearch && (\r\n <div className=\"flex items-center gap-2 w-full max-w-sm\">\r\n <div className=\"relative w-full\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search...\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && onGlobalSearch) {\r\n onGlobalSearch(searchTerm.trim());\r\n }\r\n }}\r\n className=\"border border-gray-300 rounded-md text-sm px-3 py-2 pl-8 w-full focus:outline-none focus:ring-1 focus:ring-[#12715B]\"\r\n />\r\n <Search className=\"absolute left-2 top-2.5 text-gray-400\" size={16} />\r\n </div>\r\n <Button\r\n size=\"sm\"\r\n className=\"bg-[#12715B] text-white text-xs h-auto py-2 px-3\"\r\n onClick={() => onGlobalSearch?.(searchTerm.trim())}\r\n >\r\n Search\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Manage Columns Button */}\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"px-3 py-1 text-xs cursor-pointer border-gray-300\"\r\n >\r\n Manage Columns\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className=\"w-48 p-3 space-y-2\">\r\n <div className=\"text-sm font-medium mb-2\">Show / Hide Columns</div>\r\n\r\n <label className=\"flex items-center gap-2 text-sm font-semibold border-b pb-2 mb-2\">\r\n <input\r\n type=\"checkbox\"\r\n checked={table.getAllLeafColumns().every((col) => col.getIsVisible())}\r\n ref={(input) => {\r\n if (input) {\r\n input.indeterminate =\r\n table.getAllLeafColumns().some((col) => col.getIsVisible()) &&\r\n !table.getAllLeafColumns().every((col) => col.getIsVisible());\r\n }\r\n }}\r\n onChange={(e) => {\r\n table.getAllLeafColumns().forEach((col) =>\r\n col.toggleVisibility(e.target.checked)\r\n );\r\n }}\r\n />\r\n Toggle All\r\n </label>\r\n\r\n {table.getAllLeafColumns().map((column) => {\r\n const header = column.columnDef.header;\r\n return (\r\n <label key={column.id} className=\"flex items-center gap-2 text-sm\">\r\n <input\r\n type=\"checkbox\"\r\n checked={column.getIsVisible()}\r\n onChange={(e) => column.toggleVisibility(e.target.checked)}\r\n />\r\n {typeof header === 'function'\r\n ? header({ column, header: header as any, table })\r\n : typeof header === 'string'\r\n ? header\r\n : column.id\r\n }\r\n </label>\r\n );\r\n })}\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n )}\r\n\r\n {/* Table */}\r\n <Table className=\"table-fixed\">\r\n <TableHeader>\r\n {table.getHeaderGroups().map((hg) => (\r\n <TableRow key={`header-group-${hg.id}`}>\r\n {hg.headers.map((header, index) => {\r\n const canSort = header.column.getCanSort();\r\n const canFilter = header.column.getCanFilter();\r\n const sortDir = manualSort?.key === header.column.id ? manualSort.dir : null;\r\n\r\n return (\r\n <TableHead\r\n key={`header-${header.id}-${index}`}\r\n className=\"relative select-none\"\r\n style={{\r\n width: header.column.getSize(),\r\n minWidth: header.column.columnDef.minSize,\r\n maxWidth: header.column.columnDef.maxSize,\r\n }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <span\r\n className={`flex items-center gap-1 ${canSort ? 'cursor-pointer' : ''}`}\r\n onClick={() => {\r\n if (!canSort) return;\r\n const newDir =\r\n manualSort?.key === header.column.id && manualSort.dir === 'asc'\r\n ? 'desc'\r\n : 'asc';\r\n setManualSort({ key: header.column.id, dir: newDir });\r\n onSortChange?.(header.column.id, newDir);\r\n }}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {canSort && (\r\n <>\r\n {sortDir === 'asc' && <ArrowUp size={14} className=\"text-gray-500\" />}\r\n {sortDir === 'desc' && <ArrowDown size={14} className=\"text-gray-500\" />}\r\n {!sortDir && <ArrowUpDown size={14} className=\"text-gray-400\" />}\r\n </>\r\n )}\r\n </span>\r\n\r\n {canFilter && (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <span\r\n role=\"presentation\"\r\n className=\"pl-5 cursor-pointer\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <FontAwesomeIcon icon={faEllipsisH} className=\"w-5 h-5 text-gray-500\" />\r\n </span>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n align=\"center\"\r\n sideOffset={14}\r\n className=\"w-50 p-3 z-[200] border-gray-300\"\r\n avoidCollisions={true}\r\n >\r\n <form\r\n onSubmit={(e) => {\r\n e.preventDefault();\r\n const formData = new FormData(e.currentTarget);\r\n const value = (formData.get('filter') as string) || '';\r\n if (onFilterChange && value) {\r\n onFilterChange({ columnKey: header.column.id, columnTerm: value });\r\n }\r\n }}\r\n className=\"space-y-2\"\r\n >\r\n <label htmlFor=\"filter\" className=\"text-xs text-gray-500 font-normal\">\r\n Filter by value:\r\n </label>\r\n <input\r\n name=\"filter\"\r\n placeholder=\"Search\"\r\n defaultValue={(header.column.getFilterValue() ?? '') as string}\r\n className=\"border-gray-300 border-1 block p-3 rounded-md text-xs w-full h-9 focus:ring-0 focus:border-gray-300 focus-visible:ring-0 focus-visible:border-gray-300 focus-visible:outline-none mt-2 font-normal\"\r\n autoComplete=\"off\"\r\n />\r\n <div className=\"justify-end flex\">\r\n <Button\r\n type=\"submit\"\r\n className=\"py-2 px-3 bg-[#12715B] text-white text-xs h-auto cursor-pointer\"\r\n >\r\n Apply\r\n </Button>\r\n </div>\r\n </form>\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n </div>\r\n </TableHead>\r\n );\r\n })}\r\n </TableRow>\r\n ))}\r\n </TableHeader>\r\n\r\n <TableBody>\r\n {loading ? (\r\n <>\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <TableRow key={i}>\r\n {dynamicCols.map((_, j) => (\r\n <TableCell key={j} className=\"p-3\">\r\n <span className=\"h-4 bg-gray-200 rounded w-3/4 block animate-pulse\"></span>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </>\r\n ) : table.getRowModel().rows.length ? (\r\n table.getRowModel().rows.map((row) => (\r\n <TableRow key={row.id}>\r\n {row.getVisibleCells().map((cell, cellIndex, arr) => {\r\n const meta = cell.column.columnDef.meta as any || {};\r\n const isClickable = meta?.isClickable;\r\n const isLastCell = cellIndex === arr.length - 1;\r\n\r\n return (\r\n <TableCell\r\n key={`cell-${cell.id}-${cellIndex}`}\r\n className={`break-words whitespace-normal align-top ${meta?.cellClass ?? ''} ${isClickable ? 'cursor-pointer hover:bg-gray-100 underline text-blue-500' : ''} relative py-2`}\r\n style={{\r\n width: cell.column.getSize(),\r\n minWidth: cell.column.columnDef.minSize,\r\n maxWidth: cell.column.columnDef.maxSize,\r\n ...(meta?.cellStyle ?? {}),\r\n }}\r\n onClick={() => {\r\n if (isClickable && onCellClick) {\r\n onCellClick(cell.row.original, cell.column.id);\r\n }\r\n }}\r\n >\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n\r\n {isLastCell && rowActions && rowActions.length > 0 && (\r\n <div className=\"absolute bg-[#fff] p-1 px-4 inset-y-0 right-0 flex items-center opacity-0 group-hover:opacity-100 transition-opacity duration-200 shadow-lg rounded\">\r\n {rowActions.map((action) => {\r\n const isDelete = action.id === 'delete' || action.icon === 'delete';\r\n return (\r\n <button\r\n key={action.id}\r\n className={`ml-2 px-2 py-1 text-[12px] rounded cursor-pointer ${isDelete ? 'bg-red-800 text-white hover:bg-neutral-600' : 'bg-gray-300 hover:bg-gray-400'}`}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n if (isDelete) {\r\n onDeleteRow?.(cell.row.original, 'delete');\r\n } else {\r\n onCellClick?.(cell.row.original, cell.column.id);\r\n }\r\n }}\r\n title={action.header}\r\n >\r\n {action.header}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n\r\n </TableRow>\r\n ))\r\n ) : (\r\n <TableRow>\r\n <TableCell colSpan={dynamicCols.length} className=\"h-24 text-center\">\r\n <span className=\"flex items-center justify-center py-10 w-full min-w-full text-gray-600 bg-gray-100\">\r\n No results.\r\n </span>\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n\r\n {/* Pagination */}\r\n {pagination && (\r\n <div className=\"flex items-center justify-between py-3 text-sm w-full\">\r\n {!loading && (\r\n <div className='flex gap-2 items-center'>\r\n <select\r\n value={localPageSize}\r\n onChange={handlePageSizeChange}\r\n className=\"ml-2 border rounded py-1 text-sm cursor-pointer border-blue-600\"\r\n >\r\n {pageSizeOptions.map((size) => (\r\n <option key={size} value={size}>\r\n {size} / page\r\n </option>\r\n ))}\r\n </select>\r\n <div>\r\n Page {table.getState().pagination.pageIndex + 1} of {pageCount}\r\n </div>\r\n </div>\r\n )}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => table.previousPage()}\r\n disabled={!table.getCanPreviousPage?.()}\r\n className=\"px-2 py-1 border rounded disabled:opacity-50 cursor-pointer\"\r\n >\r\n Prev\r\n </button>\r\n {getPageNumbers(\r\n table.getState().pagination.pageIndex + 1,\r\n table.getPageCount(),\r\n 5\r\n ).map((pageNum, index) => (\r\n <button\r\n key={index}\r\n disabled={pageNum === '...'}\r\n onClick={() => typeof pageNum === 'number' && table.setPageIndex(pageNum - 1)}\r\n className={`px-2 py-1 border rounded ${table.getState().pagination.pageIndex + 1 === pageNum\r\n ? 'bg-[#12715B] text-white'\r\n : 'bg-white'} ${pageNum === '...' ? 'cursor-default' : 'cursor-pointer'}`}\r\n >\r\n {pageNum}\r\n </button>\r\n ))}\r\n <button\r\n onClick={() => table.nextPage()}\r\n disabled={!table.getCanNextPage?.()}\r\n className=\"px-2 py-1 border rounded disabled:opacity-50 cursor-pointer\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n","\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\r\n return (\r\n <div\r\n data-slot=\"table-container\"\r\n className=\"relative w-full overflow-x-auto rounded-md border border-gray-200 bg-white\"\r\n >\r\n <table\r\n data-slot=\"table\"\r\n className={cn('w-full text-sm', className)}\r\n {...props}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\r\n return (\r\n <thead\r\n data-slot=\"table-header\"\r\n className={cn(\r\n 'bg-gray-100 text-gray-700 [&>tr]:border-b [&>tr]:border-gray-200 [&>tr>th]:border-r [&>tr>th]:border-gray-200 [&>tr>th]:last:border-r-0',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\r\n return (\r\n <tbody\r\n data-slot=\"table-body\"\r\n className={cn(\r\n '[&>tr]:border-b [&>tr]:border-gray-200 [&>tr:last-child]:border-0 [&>tr>td]:border-r [&>tr>td]:border-gray-200 [&>tr>td]:last:border-r-0',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\r\n return (\r\n <tfoot\r\n data-slot=\"table-footer\"\r\n className={cn(\r\n 'bg-gray-50 border-t border-gray-200 font-medium [&>tr]:last:border-b-0',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\r\n return (\r\n <tr\r\n data-slot=\"table-row\"\r\n className={cn(\r\n 'border-b border-gray-200 hover:bg-gray-50 transition-colors',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\r\n return (\r\n <th\r\n data-slot=\"table-head\"\r\n className={cn(\r\n 'h-12 px-6 text-left align-middle font-semibold whitespace-nowrap',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\r\n return (\r\n <td\r\n data-slot=\"table-cell\"\r\n className={cn(\r\n 'px-6 py-4 align-middle text-gray-700',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<'caption'>) {\r\n return (\r\n <caption\r\n data-slot=\"table-caption\"\r\n className={cn('mt-4 text-sm text-gray-500', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Table,\r\n TableHeader,\r\n TableBody,\r\n TableFooter,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n TableCaption,\r\n};\r\n","import { createColumnHelper } from '@tanstack/react-table';\r\n\r\nimport { cellRendererFactory, sanitizeValue } from './cellRendererFactory';\r\n\r\nconst columnHelper = createColumnHelper<any>();\r\n\r\n// Utility: safely access nested properties\r\nfunction getValueByPath(obj: any, path: string) {\r\n return path.split('.').reduce((acc, key) => acc?.[key], obj);\r\n}\r\n\r\nexport const useDynamicColumns = (\r\n config: any,\r\n customRenderers = {},\r\n customFormatters = {}\r\n) => {\r\n return config.columns.map((col: any) => {\r\n const accessorKey = col.accessorKey ?? col.id;\r\n\r\n // Create accessorFn to handle both nested and literal-dot cases\r\n const accessorFn = (row: any) => {\r\n if (!row) return null;\r\n \r\n // Case 1: literal key exists directly\r\n if (Object.prototype.hasOwnProperty.call(row, accessorKey)) {\r\n return sanitizeValue(row[accessorKey]);\r\n }\r\n // Case 2: nested key using dot notation\r\n if (accessorKey.includes('.')) {\r\n const val = getValueByPath(row, accessorKey);\r\n return sanitizeValue(val);\r\n }\r\n // Case 3: fallback\r\n return sanitizeValue(row[accessorKey]);\r\n };\r\n\r\n // Preserve existing meta and merge with new properties\r\n const existingMeta = col.meta || {};\r\n\r\n const additional = {};\r\n if (col.size && col.size > 0) {\r\n Object.assign(additional, { size: col.size });\r\n } else {\r\n Object.assign(additional, { size: 180, minSize: 0, maxSize: Number.MAX_SAFE_INTEGER });\r\n Object.assign(existingMeta, { className: 'w-full' });\r\n }\r\n\r\n return columnHelper.accessor(accessorFn, {\r\n ...col,\r\n ...additional,\r\n // size: (col.size && col.size > 0) ? col.size : 180,\r\n id: col.id ?? accessorKey,\r\n header: col.header,\r\n cell: (info) => {\r\n const value = info.getValue();\r\n const row = info.row.original;\r\n return cellRendererFactory(\r\n col.renderer,\r\n col.rendererProps,\r\n value,\r\n row,\r\n customRenderers,\r\n col.format,\r\n customFormatters,\r\n info\r\n );\r\n },\r\n enableSorting: col.enableSorting,\r\n enableColumnFilter: col.enableColumnFilter,\r\n // Merge existing meta to preserve headerLabel and other properties\r\n meta: {\r\n ...existingMeta,\r\n // Preserve headerLabel if it exists\r\n ...(existingMeta.headerLabel ? { headerLabel: existingMeta.headerLabel } : {}),\r\n },\r\n });\r\n });\r\n};\r\n","'use client';\r\n\r\nimport React from 'react';\r\n\r\nimport * as LucideIcons from 'lucide-react';\r\nimport { Star, LucideIcon } from 'lucide-react';\r\nimport Image from 'next/image';\r\n\r\nimport { valueFormatter } from './valueFormatter';\r\nimport { Icon } from '@/components';\r\n\r\nconst getContrastColor = (bg: string) => {\r\n // Normalize hex\r\n let c = bg.trim().toUpperCase();\r\n if (/^#([a-fA-F0-9]{3})$/.test(c)) {\r\n c = '#' + c.slice(1).split('').map(x => x + x).join('');\r\n }\r\n // Basic named color map (extend as needed)\r\n const named: Record<string, string> = {\r\n white: '#FFFFFF',\r\n black: '#000000',\r\n red: '#FF0000',\r\n green: '#008000',\r\n blue: '#0000FF',\r\n gray: '#808080',\r\n grey: '#808080',\r\n orange: '#FFA500',\r\n yellow: '#FFFF00',\r\n purple: '#800080',\r\n pink: '#FFC0CB',\r\n teal: '#008080'\r\n };\r\n if (!c.startsWith('#')) {\r\n const lower = c.toLowerCase();\r\n if (named[lower]) c = named[lower];\r\n else return '#FFFFFF'; // fallback\r\n }\r\n if (!/^#([a-fA-F0-9]{6})$/.test(c)) return '#FFFFFF';\r\n const r = parseInt(c.slice(1, 3), 16);\r\n const g = parseInt(c.slice(3, 5), 16);\r\n const b = parseInt(c.slice(5, 7), 16);\r\n // Per ITU-R BT.601 luma approximation\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n return brightness > 160 ? '#000000' : '#FFFFFF';\r\n};\r\n\r\n// Recursively sanitize any content before rendering\r\nexport const sanitizeValue = (val: any): any => {\r\n if (val == null) return null;\r\n\r\n // ✅ React elements are fine\r\n if (React.isValidElement(val)) return val;\r\n\r\n // ✅ Strings and numbers are safe\r\n if (typeof val === 'string' || typeof val === 'number') return val;\r\n\r\n // ✅ Arrays → map and sanitize each item\r\n if (Array.isArray(val)) return val.map((v, i) => <React.Fragment key={i}>{sanitizeValue(v)}</React.Fragment>);\r\n\r\n // ✅ Plain objects → show name, label, or JSON\r\n if (typeof val === 'object') {\r\n if ('name' in val && typeof val.name === 'string') return val.name;\r\n if ('label' in val && typeof val.label === 'string') return val.label;\r\n try {\r\n return JSON.stringify(val);\r\n } catch {\r\n return '[object]';\r\n }\r\n }\r\n\r\n // Fallback for other types\r\n return String(val);\r\n};\r\n\r\nexport const cellRendererFactory = (\r\n renderer: string,\r\n rendererProps: any,\r\n value: any,\r\n row: any,\r\n customRenderers: Record<string, React.ComponentType<any>> = {},\r\n format?: string,\r\n customFormatters: Record<string, (val: any) => any> = {},\r\n info?: any\r\n) => {\r\n const formattedValue = valueFormatter(value, format, customFormatters);\r\n const rowValue = row?.[rendererProps?.rowField];\r\n\r\n switch (renderer) {\r\n /* -------------------- BASIC -------------------- */\r\n case 'text':\r\n return <span>{rowValue || formattedValue}</span>;\r\n\r\n case 'number':\r\n return (\r\n <span className=\"tabular-nums text-right\">\r\n {valueFormatter(rowValue || value, 'number:2')}\r\n </span>\r\n );\r\n\r\n case 'date':\r\n return <span>{valueFormatter(rowValue || value, format)}</span>;\r\n\r\n case 'link':\r\n return (\r\n <a\r\n href={`${rendererProps?.prefix || ''}${rowValue || formattedValue}`}\r\n target=\"_blank\"\r\n rel=\"noreferrer\"\r\n className={`text-blue-500 underline ${rendererProps?.className || ''}`}\r\n >\r\n {rendererProps?.label || formattedValue}\r\n </a>\r\n );\r\n\r\n /* -------------------- VISUAL -------------------- */\r\n case 'image':\r\n return (\r\n <div className=\"relative\">\r\n <Image\r\n src={\r\n rowValue ||\r\n formattedValue ||\r\n rendererProps?.fallback ||\r\n '/placeholder.png'\r\n }\r\n alt={rendererProps?.alt || ''}\r\n width={rendererProps?.width || 40}\r\n height={rendererProps?.height || 40}\r\n className={`object-cover ${rendererProps?.rounded ? 'rounded-full' : ''} ${rendererProps?.className || ''}`}\r\n style={{\r\n borderRadius: rendererProps?.rounded ? '50%' : 0,\r\n objectFit: 'cover'\r\n }}\r\n />\r\n </div>\r\n );\r\n\r\n case 'icon':\r\n if (!formattedValue) return null;\r\n\r\n return (\r\n <Icon\r\n iconSet={rendererProps?.iconSet}\r\n icon={rendererProps?.icon}\r\n prefix={rendererProps?.iconSetPrefix}\r\n iconSize={rendererProps?.size}\r\n className={rendererProps?.className}\r\n style={{\r\n ...(rendererProps?.color ? { color: rendererProps?.color } : {})\r\n }}\r\n />\r\n );\r\n\r\n case 'badge': {\r\n const color =\r\n rendererProps?.colorMap?.[formattedValue] ||\r\n rendererProps?.color ||\r\n 'gray';\r\n\r\n if (!formattedValue) return null;\r\n\r\n const textColor = getContrastColor(color);\r\n return (\r\n <span\r\n className={`inline-block px-2 py-1 text-xs rounded-full bg-${color}-100 text-${textColor}-700 ${rendererProps?.className || ''}`}\r\n style={{ backgroundColor: color, color: textColor }}\r\n >\r\n {formattedValue}\r\n </span>\r\n );\r\n }\r\n\r\n case 'chip': {\r\n const color = rendererProps?.color || 'gray';\r\n const maybeIcon = LucideIcons[rendererProps?.icon as keyof typeof LucideIcons];\r\n\r\n const IconComponent: LucideIcon =\r\n typeof maybeIcon === 'function' ? (maybeIcon as LucideIcon) : LucideIcons.Star;\r\n if (!formattedValue) return null;\r\n\r\n const textColor = getContrastColor(color);\r\n\r\n return (\r\n <span\r\n className={`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full bg-[${color}]-100 text-[${textColor}]-700`}\r\n style={{ backgroundColor: color, color: textColor }}\r\n >\r\n {rendererProps?.icon && (\r\n <>\r\n {IconComponent ? <IconComponent className=\"h-4 w-4\" /> : <LucideIcons.Box className=\"h-4 w-4\" />}\r\n </>\r\n )}\r\n {formattedValue}\r\n </span>\r\n );\r\n }\r\n\r\n /* -------------------- INTERACTIVE -------------------- */\r\n case 'button':\r\n return (\r\n <button\r\n onClick={() => rendererProps?.onClick?.(row, formattedValue)}\r\n className={`px-2 py-1 rounded text-white bg-blue-600 hover:bg-blue-700 ${rendererProps?.className || ''}`}\r\n >\r\n {rowValue || rendererProps.value || formattedValue}\r\n </button>\r\n );\r\n\r\n case 'switch':\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n checked={!!value}\r\n onChange={(e) =>\r\n rendererProps?.onChange?.(row, e.target.checked)\r\n }\r\n className=\"sr-only peer\"\r\n />\r\n <div className=\"relative w-9 h-5 bg-gray-300 peer-checked:bg-blue-600 rounded-full transition-all\">\r\n <div className=\"absolute top-[2px] left-[2px] w-4 h-4 bg-white rounded-full peer-checked:translate-x-4 transition-all\" />\r\n </div>\r\n </label>\r\n );\r\n\r\n case 'progress':\r\n return (\r\n <div className=\"w-full bg-gray-100 rounded-full h-2\">\r\n <div\r\n className=\"bg-blue-600 h-2 rounded-full transition-all\"\r\n style={{ width: `${rowValue || formattedValue || 0}%` }}\r\n />\r\n </div>\r\n );\r\n\r\n case 'rating': {\r\n const stars = Math.round(Number(rowValue || formattedValue) || 0);\r\n return (\r\n <div className=\"flex items-center\">\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <Star\r\n key={i}\r\n size={16}\r\n className={i < stars ? 'text-yellow-400' : 'text-gray-300'}\r\n fill={i < stars ? '#facc15' : 'none'}\r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n case 'checkbox':\r\n return (\r\n <input\r\n type=\"checkbox\"\r\n checked={info.row.getIsSelected()}\r\n disabled={!info.row.getCanSelect()}\r\n onChange={info.row.getToggleSelectedHandler()}\r\n />\r\n );\r\n\r\n case 'html':\r\n return (\r\n <span\r\n dangerouslySetInnerHTML={{ __html: String(rowValue || formattedValue) }}\r\n />\r\n );\r\n\r\n /* -------------------- ADVANCED -------------------- */\r\n case 'custom': {\r\n const CustomRenderer =\r\n customRenderers[rendererProps?.customRendererId] ||\r\n customRenderers[rendererProps?.rendererId];\r\n if (CustomRenderer)\r\n return (\r\n <CustomRenderer\r\n value={formattedValue}\r\n row={row}\r\n {...rendererProps}\r\n />\r\n );\r\n return <span>Missing custom renderer</span>;\r\n }\r\n\r\n /* -------------------- DEFAULT -------------------- */\r\n default:\r\n return <span>{formattedValue || '-'}</span>;\r\n }\r\n};\r\n","import dayjs from 'dayjs';\r\nimport utc from 'dayjs/plugin/utc';\r\n\r\ndayjs.extend(utc);\r\n\r\nexport default dayjs;\r\n","import dayjs from '../dayjs-setup';\r\n\r\nexport const valueFormatter = (\r\n value: any,\r\n format?: string,\r\n customFormatters: Record<string, (val: any) => any> = {}\r\n) => {\r\n if (!format) return value;\r\n if (value == null || value === '' || value === undefined) return '-';\r\n\r\n // Custom user-defined formatter\r\n if (format.startsWith('custom:')) {\r\n const key = format.replace('custom:', '');\r\n return customFormatters[key] ? customFormatters[key](value) : value;\r\n }\r\n\r\n // Handle built-in formatters\r\n const [type, arg] = format.split(':');\r\n\r\n switch (type) {\r\n case 'date':\r\n return dayjs(value).format(arg || 'YYYY-MM-DD');\r\n case 'datetimenumber':\r\n const parsed = dayjs(value).isValid() ? dayjs(value).utc() : dayjs(value);\r\n return parsed.format('YYYY-MM-DD hh:mm');\r\n case 'datetime':\r\n const formated = dayjs(value).isValid() ? dayjs(value).utc() : dayjs(value);\r\n return formated.format('DD MMM YYYY hh:mm A');\r\n case 'days':\r\n return `${dayjs().diff(dayjs(value), 'day')} days`;\r\n case 'months':\r\n return `${dayjs().diff(dayjs(value), 'month')} months`;\r\n case 'years':\r\n return `${dayjs().diff(dayjs(value), 'year')} years`;\r\n case 'time':\r\n return dayjs(value).format('HH:mm');\r\n case 'number':\r\n return Number(value).toFixed(parseInt(arg || '2'));\r\n case 'currency':\r\n return new Intl.NumberFormat('en-IN', {\r\n style: 'currency',\r\n currency: arg || 'INR'\r\n }).format(Number(value));\r\n case 'uppercase':\r\n return String(value).toUpperCase();\r\n case 'lowercase':\r\n return String(value).toLowerCase();\r\n default:\r\n return value;\r\n }\r\n};","'use client';\r\nimport { DataTable } from '@/components/ui/data-table';\r\nimport { ExtendedTableProps } from '@/types/table';\r\n\r\nconst Table = ({\r\n columns,\r\n data,\r\n rowActions,\r\n className,\r\n style,\r\n pagination = false,\r\n paginationMode = 'client',\r\n itemsPerPage = 10,\r\n onPageChange,\r\n onSortChange,\r\n onFilterChange,\r\n onGlobalSearch,\r\n page,\r\n loading = false,\r\n totalRecords = 0,\r\n globalSearch = false,\r\n onCellClick,\r\n onDeleteRow,\r\n ...props\r\n}: ExtendedTableProps) => {\r\n const rawColumns = Array.isArray(columns) ? columns : [];\r\n const rawData = Array.isArray(data) ? data : [];\r\n\r\n const isControlled = typeof page === 'number';\r\n\r\n return (\r\n <div className={`${className || ''} space-y-3`} style={style}>\r\n <DataTable\r\n {...props}\r\n columns={rawColumns}\r\n data={rawData}\r\n rowActions={rowActions}\r\n loading={loading}\r\n pagination={pagination}\r\n pageSize={itemsPerPage}\r\n controlledPageIndex={isControlled ? page! - 1 : undefined}\r\n onPageChange={(pageIndex, pageSize) => {\r\n onPageChange?.({ page: pageIndex + 1, itemsPerPage: pageSize });\r\n }}\r\n paginationMode={paginationMode}\r\n totalRecords={totalRecords}\r\n onSortChange={(col, dir) => onSortChange?.({ sort_by: col, sort_order: dir })}\r\n onFilterChange={(filters) => onFilterChange?.({ columnKey: filters.columnKey, columnTerm: filters.columnTerm })}\r\n onGlobalSearch={(term) => onGlobalSearch?.({ searchTerm: term })}\r\n globalSearch={globalSearch}\r\n onCellClick={(cell, columnId) => {\r\n onCellClick?.({ id: cell.id, column: cell, columnId });\r\n }}\r\n onDeleteRow={(cell) => {\r\n onDeleteRow?.(cell.id);\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/components/ui/button\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeftIcon />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","import {\r\n Pagination,\r\n PaginationContent,\r\n PaginationEllipsis,\r\n PaginationItem,\r\n PaginationLink,\r\n PaginationNext,\r\n PaginationPrevious,\r\n} from \"@/components/ui/pagination\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from \"@/components/ui/select\";\r\nimport { CustomPaginationProps } from \"@/types/table\";\r\n\r\nconst CustomPagination = ({\r\n totalPages,\r\n currentPage,\r\n onPageChange,\r\n maxVisiblePages = 5,\r\n perPage,\r\n}: CustomPaginationProps) => {\r\n\r\n const getPageNumbers = () => {\r\n const pages: (number | string)[] = [];\r\n\r\n if (totalPages <= maxVisiblePages) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const leftSiblingIndex = Math.max(currentPage - 1, 1);\r\n const rightSiblingIndex = Math.min(currentPage + 1, totalPages);\r\n\r\n const shouldShowLeftDots = leftSiblingIndex > 2;\r\n const shouldShowRightDots = rightSiblingIndex < totalPages - 1;\r\n\r\n if (!shouldShowLeftDots && shouldShowRightDots) {\r\n const leftRange = Array.from({ length: 3 }, (_, i) => i + 1);\r\n return [...leftRange, \"...\", totalPages];\r\n }\r\n\r\n if (shouldShowLeftDots && !shouldShowRightDots) {\r\n const rightRange = Array.from(\r\n { length: 3 },\r\n (_, i) => totalPages - 2 + i\r\n );\r\n return [1, \"...\", ...rightRange];\r\n }\r\n\r\n if (shouldShowLeftDots && shouldShowRightDots) {\r\n const middleRange = Array.from(\r\n { length: 3 },\r\n (_, i) => leftSiblingIndex + i\r\n );\r\n return [1, \"...\", ...middleRange, \"...\", totalPages];\r\n }\r\n\r\n return pages;\r\n };\r\n\r\n const handlePageChange = (page: number) => {\r\n if (page >= 1 && page <= totalPages && page !== currentPage) {\r\n onPageChange({\r\n page,\r\n itemsPerPage: perPage\r\n });\r\n }\r\n };\r\n\r\n const pageNumbers = getPageNumbers();\r\n\r\n return (\r\n <div className=\"flex flex-row gap-1 w-full items-center justify-between\">\r\n {/* Items per page dropdown */}\r\n <div className=\"flex items-center gap-2\">\r\n <p className=\"text-sm text-muted-foreground whitespace-nowrap\">Items per page:</p>\r\n <Select\r\n defaultValue={String(perPage)}\r\n onValueChange={(value) => {\r\n onPageChange({ page: 1, itemsPerPage: Number(value) });\r\n }}\r\n >\r\n <SelectTrigger className=\"w-[100px]\">\r\n <SelectValue placeholder=\"Select\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <SelectItem value=\"5\">5</SelectItem>\r\n <SelectItem value=\"10\">10</SelectItem>\r\n <SelectItem value=\"20\">20</SelectItem>\r\n <SelectItem value=\"50\">50</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n <Pagination className=\"justify-end\">\r\n <PaginationContent>\r\n <PaginationItem>\r\n <PaginationPrevious\r\n onClick={() => handlePageChange(currentPage - 1)}\r\n className={currentPage === 1 ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"}\r\n />\r\n </PaginationItem>\r\n\r\n {pageNumbers.map((pageNumber, index) => (\r\n <PaginationItem key={index}>\r\n {pageNumber === \"...\" ? (\r\n <PaginationEllipsis />\r\n ) : (\r\n <PaginationLink\r\n onClick={() => handlePageChange(pageNumber as number)}\r\n isActive={currentPage === pageNumber}\r\n className=\"cursor-pointer\"\r\n >\r\n {pageNumber}\r\n </PaginationLink>\r\n )}\r\n </PaginationItem>\r\n ))}\r\n\r\n <PaginationItem>\r\n <PaginationNext\r\n onClick={() => handlePageChange(currentPage + 1)}\r\n className={currentPage === totalPages ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"}\r\n />\r\n </PaginationItem>\r\n </PaginationContent>\r\n </Pagination>\r\n </div>\r\n );\r\n};\r\n\r\nexport default CustomPagination;","'use client';\r\n\r\nimport { useMemo } from 'react';\r\n\r\nimport { LoaderCircle, Info } from 'lucide-react';\r\n\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionTrigger,\r\n AccordionContent,\r\n} from '@/components/ui/accordion';\r\nimport {\r\n Card,\r\n CardHeader,\r\n CardTitle,\r\n CardContent,\r\n} from '@/components/ui/card';\r\nimport { cn } from '@/lib/utils';\r\nimport { HistoryTimelineProps } from '@/types/global';\r\n\r\ntype AnyRecord = Record<string, any>;\r\n\r\nfunction getValue<T extends AnyRecord, K extends keyof T>(\r\n item: T,\r\n key?: K,\r\n): T[K] | undefined {\r\n if (!key) return undefined;\r\n return item[key];\r\n}\r\n\r\nconst HistoryTimeline = ({\r\n title = 'Timeline',\r\n className,\r\n loading = false,\r\n titleKey,\r\n descriptionKey,\r\n createdAtKey,\r\n ...props\r\n}: HistoryTimelineProps) => {\r\n\r\n const data: AnyRecord[] = useMemo(() => {\r\n if (Array.isArray(props.data)) {\r\n return props.data as AnyRecord[];\r\n }\r\n return [];\r\n }, [props.data]);\r\n\r\n if (loading) {\r\n return (\r\n <Card className={cn('w-full', className)}>\r\n <CardContent className=\"flex items-center justify-center px-4 py-8\">\r\n <LoaderCircle className=\"h-5 w-5 animate-spin text-muted-foreground\" />\r\n <span className=\"ml-2 text-sm text-muted-foreground\">\r\n Loading history…\r\n </span>\r\n </CardContent>\r\n </Card>\r\n );\r\n }\r\n\r\n if (data.length === 0) {\r\n return (\r\n <Card className={cn('w-full', className)}>\r\n <CardContent className=\"px-4 py-8 text-center text-muted-foreground\">\r\n No history available.\r\n </CardContent>\r\n </Card>\r\n );\r\n }\r\n\r\n return (\r\n <Card className={cn('w-full', className)}>\r\n <Accordion type=\"single\" collapsible defaultValue=\"history\">\r\n <AccordionItem value=\"history\" className=\"border-0\">\r\n <CardHeader className=\"flex flex-row items-center justify-between gap-2 border-b px-4 py-3\">\r\n <AccordionTrigger\r\n className={cn(\r\n 'flex flex-1 items-center justify-between gap-2 p-0 text-left',\r\n 'hover:no-underline'\r\n )}\r\n >\r\n <CardTitle className=\"text-base font-semibold\">\r\n {title}\r\n </CardTitle>\r\n </AccordionTrigger>\r\n </CardHeader>\r\n\r\n <AccordionContent asChild>\r\n <CardContent className=\"px-4 py-3\">\r\n <ol className=\"relative ml-4 border-l-2 border-[#939393] space-y-4\">\r\n {data.map((item, index) => {\r\n\r\n const id = (item as any).id ?? index;\r\n const rawTitle = getValue(item, titleKey);\r\n const rawDescription = getValue(item, descriptionKey);\r\n const rawCreatedAt = getValue(item, createdAtKey);\r\n\r\n const titleText = String(rawTitle ?? '');\r\n const descriptionText =\r\n rawDescription != null ? String(rawDescription) : '';\r\n const createdAtDate =\r\n rawCreatedAt != null ? new Date(rawCreatedAt as any) : null;\r\n\r\n return (\r\n <li key={id} className=\"relative pl-4\">\r\n <span className=\"absolute left-[-9px] top-2 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-primary-foreground\">\r\n <div className='bg-[#06A59A] text-white rounded-md p-[5px]'>\r\n <Info\r\n className={cn(\r\n 'h-5 w-5 text-white',\r\n )}\r\n />\r\n </div>\r\n </span>\r\n\r\n <Accordion\r\n type=\"single\"\r\n collapsible\r\n className=\"w-full\"\r\n >\r\n <AccordionItem value={`item-${item.id}`} className=\"border-0\">\r\n <AccordionTrigger\r\n className={cn(\r\n 'flex items-center justify-between gap-2 rounded-md px-2 py-1 text-left',\r\n 'hover:bg-muted/60 hover:no-underline'\r\n )}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <span className=\"text-sm font-medium leading-none\">\r\n {titleText}\r\n </span>\r\n <span className=\"text-[11px] text-muted-foreground\">\r\n {new Intl.DateTimeFormat('default', {\r\n dateStyle: 'medium',\r\n timeStyle: 'short',\r\n }).format(createdAtDate ?? new Date())}\r\n </span>\r\n </div>\r\n </AccordionTrigger>\r\n\r\n <AccordionContent className=\"pt-1\">\r\n {descriptionText && (\r\n <p className=\"rounded-md bg-muted px-2 py-2 text-xs text-muted-foreground\">\r\n {descriptionText}\r\n </p>\r\n )}\r\n </AccordionContent>\r\n </AccordionItem>\r\n </Accordion>\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n </CardContent>\r\n </AccordionContent>\r\n </AccordionItem>\r\n </Accordion>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default HistoryTimeline;\r\n","'use client';\r\n\r\nimport * as React from 'react';\r\n\r\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\r\nimport { ChevronDownIcon } from 'lucide-react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Accordion({\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\r\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\r\n}\r\n\r\nfunction AccordionItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\r\n return (\r\n <AccordionPrimitive.Item\r\n data-slot=\"accordion-item\"\r\n className={cn('border-b last:border-b-0', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AccordionTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\r\n return (\r\n <AccordionPrimitive.Header className=\"flex\">\r\n <AccordionPrimitive.Trigger\r\n data-slot=\"accordion-trigger\"\r\n className={cn(\r\n 'focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\r\n </AccordionPrimitive.Trigger>\r\n </AccordionPrimitive.Header>\r\n );\r\n}\r\n\r\nfunction AccordionContent({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\r\n return (\r\n <AccordionPrimitive.Content\r\n data-slot=\"accordion-content\"\r\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\r\n {...props}\r\n >\r\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\r\n </AccordionPrimitive.Content>\r\n );\r\n}\r\n\r\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\r\n","import * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Card({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card\"\r\n className={cn(\r\n 'bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-header\"\r\n className={cn(\r\n '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-title\"\r\n className={cn('leading-none font-semibold', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-description\"\r\n className={cn('text-muted-foreground text-sm', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-action\"\r\n className={cn(\r\n 'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-content\"\r\n className={cn('px-6', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"card-footer\"\r\n className={cn('flex items-center px-6 [.border-t]:pt-6', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Card,\r\n CardHeader,\r\n CardFooter,\r\n CardTitle,\r\n CardAction,\r\n CardDescription,\r\n CardContent,\r\n};\r\n","import { useCallback, useMemo, useState } from 'react';\r\n\r\nimport { ChevronDown, Menu } from 'lucide-react';\r\nimport Link from 'next/link';\r\nimport { usePathname, useRouter } from 'next/navigation';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from '@/components/ui/dialog';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n DropdownMenuSub,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuSubContent,\r\n} from '@/components/ui/dropdown-menu';\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { cn } from '@/lib/utils';\r\nimport { TabsProps } from '@/types/global';\r\n\r\nconst Tabs = ({ className, style, tabs, verticalMenu, pathname, canvasMode, isBuilder = false, source, parentKey, menuNameKey, menuUrlKey, loading, bgActiveColor, textActiveColor }: TabsProps) => {\r\n const [openIndex, setOpenIndex] = useState<number | null>(null);\r\n const currentPathname = usePathname();\r\n\r\n function groupMenus(menus: any[] = []): any[] {\r\n const menuMap = new Map<string, any>();\r\n\r\n // Create a map for all menus\r\n menus.forEach(menu => {\r\n menuMap.set(menu.menu_id, {\r\n ...menu,\r\n url: menu[menuUrlKey || 'url'],\r\n header: menu[menuNameKey || 'name'],\r\n isDropDown: false,\r\n children: []\r\n });\r\n });\r\n\r\n const rootMenus: any[] = [];\r\n\r\n // Link children to parents\r\n menus.forEach(menu => {\r\n if (menu[parentKey || 'parentId']) {\r\n const parent = menuMap.get(menu[parentKey || 'parentId']);\r\n if (parent) {\r\n parent.children!.push(menuMap.get(menu.menu_id)!);\r\n }\r\n } else {\r\n rootMenus.push(menuMap.get(menu.menu_id)!);\r\n }\r\n });\r\n\r\n // Recursive sort\r\n const sortMenus = (list: any[]): any[] =>\r\n list\r\n .sort((a, b) => (a.sort_order || 0) - (b.sort_order || 0))\r\n .map(menu => {\r\n const sortedChildren = sortMenus(menu.children || []);\r\n return {\r\n ...menu,\r\n children: sortedChildren,\r\n isDropDown: sortedChildren.length > 0,\r\n };\r\n });\r\n\r\n return sortMenus(rootMenus);\r\n }\r\n\r\n const rawTabs = useMemo(() => {\r\n if (!Array.isArray(tabs)) return [];\r\n if (source === 'manual') return Array.isArray(tabs) ? tabs : [];\r\n return groupMenus(tabs);\r\n }, [tabs, source, parentKey, menuNameKey, menuUrlKey]);\r\n\r\n const baseClasses =\r\n 'text-foreground p-2 text-center rounded-md transition-colors';\r\n const bgActiveColorFinal = bgActiveColor ? `bg-[${bgActiveColor}]` : 'bg-white/10';\r\n const textActiveColorFinal = textActiveColor ? `text-[${textActiveColor}]` : 'text-white';\r\n const activeClasses = `${bgActiveColorFinal} ${textActiveColorFinal}`;\r\n const hoverClasses = `${bgActiveColorFinal ? bgActiveColorFinal.replace('bg-', 'hover:bg-') : 'hover:bg-white/5'} ${textActiveColorFinal ? textActiveColorFinal.replace('text-', 'hover:text-') : 'hover:text-white'}`;\r\n\r\n const isActive = (path?: string) => {\r\n if (!path) return false;\r\n\r\n // const clean = (p: string) => p.replace(/\\/+$/, '');\r\n const clean = (p: string) => {\r\n while (p.endsWith('/')) p = p.slice(0, -1);\r\n return p;\r\n };\r\n const current = clean(pathname ?? currentPathname ?? '');\r\n const target = clean(path);\r\n\r\n if (!current || !target) return false;\r\n\r\n // Case 1: Exact match\r\n if (current === target) return true;\r\n\r\n // Case 2: Normal startsWith\r\n if (current.startsWith(target) || target.startsWith(current)) return true;\r\n\r\n // Case 3: Last segment match\r\n const currentLast = current.split('/').pop();\r\n const targetLast = target.split('/').pop();\r\n\r\n return !!currentLast && !!targetLast && currentLast === targetLast;\r\n };\r\n\r\n const isParentActive = (tab: any) => {\r\n if (!Array.isArray(tab.children)) return false;\r\n return tab.children.some((child: any) => isActive(child.url));\r\n };\r\n\r\n const router = useRouter();\r\n\r\n const [showExitDialog, setShowExitDialog] = useState(false);\r\n const [pendingUrl, setPendingUrl] = useState<string | null>(null);\r\n\r\n const handleBuilderExit = useCallback(\r\n (e: React.MouseEvent<HTMLAnchorElement>, url: string) => {\r\n if (isBuilder) {\r\n e.preventDefault();\r\n setPendingUrl(url);\r\n // setShowExitDialog(true);\r\n showSonnerToast({\r\n variant: 'success',\r\n title: 'Navigation Alert',\r\n description: `You will be redirected to ${url} in the built application.`,\r\n });\r\n }\r\n },\r\n [isBuilder]\r\n );\r\n\r\n const confirmExit = () => {\r\n if (pendingUrl) {\r\n setShowExitDialog(false);\r\n router.push(pendingUrl);\r\n }\r\n };\r\n\r\n let timeout: NodeJS.Timeout;\r\n\r\n const renderDesktopTab = (tab: any, index: number) => {\r\n const active = isActive(tab.url) || isParentActive(tab);\r\n const finalClasses = [baseClasses, active ? activeClasses : hoverClasses, tab.className || ''].join(' ');\r\n const finalStyle = {\r\n ...tab.style,\r\n backgroundColor: active && bgActiveColor ? bgActiveColor : undefined,\r\n color: active && textActiveColor ? textActiveColor : undefined,\r\n border: active && textActiveColor ? `1px solid ${textActiveColor}` : undefined,\r\n };\r\n\r\n if (Array.isArray(tab.children) && tab.children.length > 0 && tab.isDropDown) {\r\n return (\r\n <DropdownMenu\r\n key={index}\r\n open={openIndex === index}\r\n onOpenChange={(open) => setOpenIndex(open ? index : null)}\r\n >\r\n <DropdownMenuTrigger\r\n className={`${finalClasses} inline-flex items-center gap-1`}\r\n onMouseEnter={() => {\r\n clearTimeout(timeout);\r\n setOpenIndex(index);\r\n }}\r\n onMouseLeave={() => {\r\n timeout = setTimeout(() => setOpenIndex(null), 150);\r\n }}\r\n style={finalStyle}\r\n >\r\n {tab.header}\r\n <ChevronDown className=\"h-4 w-4 opacity-80\" />\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n align=\"start\"\r\n sideOffset={6}\r\n className=\"z-50 min-w-[200px] max-h-80 rounded-md border border-gray-200 bg-white p-1 shadow-lg\"\r\n onMouseEnter={() => {\r\n clearTimeout(timeout);\r\n setOpenIndex(index);\r\n }}\r\n onMouseLeave={() => {\r\n timeout = setTimeout(() => setOpenIndex(null), 150);\r\n }}\r\n >\r\n {tab.children.map((item: any, index: number) => (\r\n <DropdownMenuItem\r\n key={item.id || index}\r\n asChild\r\n className=\"cursor-pointer rounded-sm px-3 py-2 text-gray-800 hover:bg-gray-100 focus:bg-gray-100\"\r\n >\r\n <Link\r\n href={item.url || '#'}\r\n target={item.opens_in_new_tab ? '_blank' : '_self'}\r\n onClick={(e) => handleBuilderExit(e, item.url || '#')}\r\n >{item.header}</Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n }\r\n\r\n return tab.url ? (\r\n <Link\r\n key={index}\r\n href={tab.url}\r\n target={tab.opens_in_new_tab ? '_blank' : '_self'}\r\n className={finalClasses} style={finalStyle}\r\n onClick={(e) => handleBuilderExit(e, tab.url || '#')}\r\n >\r\n {tab.header}\r\n </Link>\r\n ) : (\r\n <div key={index} className={finalClasses} style={finalStyle} role=\"button\" tabIndex={0}>\r\n {tab.header}\r\n </div>\r\n );\r\n };\r\n\r\n const renderMobileMenu = () => (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger className=\"flex items-center gap-2 px-3 py-2 rounded-md bg-white/10 text-white text-sm\">\r\n <Menu className=\"h-4 w-4\" />\r\n Menu\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent\r\n align=\"start\"\r\n sideOffset={6}\r\n className=\"z-50 w-56 rounded-md border border-gray-200 bg-white p-1 shadow-lg\"\r\n >\r\n {rawTabs.map((tab: any, i: number) => {\r\n const hasChildren =\r\n Array.isArray(tab.children) && tab.children.length > 0 && tab.isDropDown;\r\n\r\n if (hasChildren) {\r\n return (\r\n <DropdownMenuSub key={i}>\r\n <DropdownMenuSubTrigger className=\"flex items-center justify-between cursor-pointer rounded-sm px-3 py-2 text-[13px] text-foreground hover:text-foreground\">\r\n {tab.header}\r\n </DropdownMenuSubTrigger>\r\n <DropdownMenuSubContent className=\"bg-white border shadow-lg rounded-md p-1\">\r\n {tab.children.map((item: any, index: number) => (\r\n <DropdownMenuItem\r\n key={item.id || index}\r\n asChild\r\n className=\"cursor-pointer rounded-sm px-3 py-2 text-gray-800 hover:bg-gray-100\"\r\n >\r\n <Link href={item.url || '#'} onClick={(e) => handleBuilderExit(e, item.url || '#')}>{item.header}</Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuSubContent>\r\n </DropdownMenuSub>\r\n );\r\n }\r\n\r\n return (\r\n <DropdownMenuItem\r\n key={i}\r\n asChild\r\n className=\"cursor-pointer rounded-sm px-3 py-2 text-[13px] text-gray-800 hover:bg-gray-100\"\r\n >\r\n <Link href={tab.url || '#'} onClick={(e) => handleBuilderExit(e, tab.url || '#')}>{tab.header}</Link>\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n\r\n const forceMobile = canvasMode ? canvasMode === 'mobile' || canvasMode === 'tablet' : undefined;\r\n const forceDesktop = canvasMode ? canvasMode === 'desktop' : undefined;\r\n\r\n return (\r\n <>\r\n <div className={cn('min-h-10', className)} style={style}>\r\n {forceDesktop !== undefined ? (\r\n forceDesktop && (\r\n <div className=\"hidden md:flex\">\r\n <div className={`flex gap-2 ${verticalMenu ? 'flex-col items-start' : 'flex-row'}`}>\r\n {rawTabs.map(renderDesktopTab)}\r\n </div>\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"hidden md:flex\">\r\n <div className={`flex gap-2 ${verticalMenu ? 'flex-col items-start' : 'flex-row'}`}>\r\n {rawTabs.map(renderDesktopTab)}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {forceMobile !== undefined ? (\r\n forceMobile && <div>{renderMobileMenu()}</div>\r\n ) : (\r\n <div className=\"flex md:hidden\">{renderMobileMenu()}</div>\r\n )}\r\n </div>\r\n {/* Exit Confirmation Dialog */}\r\n <Dialog open={showExitDialog} onOpenChange={setShowExitDialog}>\r\n <DialogContent className=\"bg-[#fff]\">\r\n <DialogHeader>\r\n <DialogTitle>Exit Builder?</DialogTitle>\r\n <DialogDescription>\r\n You are about to leave the builder. Any unsaved changes may be lost.\r\n </DialogDescription>\r\n </DialogHeader>\r\n <DialogFooter>\r\n <Button className='cursor-pointer bg-[#12715b] text-[#fff]' variant=\"outline\" onClick={() => setShowExitDialog(false)}>\r\n Cancel\r\n </Button>\r\n <Button className='cursor-pointer border-[#12715b] border' onClick={confirmExit}>Yes, Exit</Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n </>\r\n );\r\n};\r\n\r\nexport default Tabs;\r\n","'use client';\r\n\r\nimport * as React from 'react';\r\n\r\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\r\nimport { XIcon } from 'lucide-react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction Dialog({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\r\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\r\n}\r\n\r\nfunction DialogTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\r\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\r\n}\r\n\r\nfunction DialogPortal({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\r\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\r\n}\r\n\r\nfunction DialogClose({\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\r\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\r\n}\r\n\r\nfunction DialogOverlay({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\r\n return (\r\n <DialogPrimitive.Overlay\r\n data-slot=\"dialog-overlay\"\r\n className={cn(\r\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-[60] bg-black/50',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogContent({\r\n className,\r\n children,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <DialogPortal data-slot=\"dialog-portal\">\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n data-slot=\"dialog-content\"\r\n className={cn(\r\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-[70] grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogPrimitive.Close\r\n data-slot=\"dialog-close\"\r\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\r\n >\r\n <XIcon />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n )}\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n );\r\n}\r\n\r\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"dialog-header\"\r\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\r\n return (\r\n <div\r\n data-slot=\"dialog-footer\"\r\n className={cn(\r\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogTitle({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\r\n return (\r\n <DialogPrimitive.Title\r\n data-slot=\"dialog-title\"\r\n className={cn('text-lg leading-none font-semibold', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction DialogDescription({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\r\n return (\r\n <DialogPrimitive.Description\r\n data-slot=\"dialog-description\"\r\n className={cn('text-muted-foreground text-sm', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Dialog,\r\n DialogClose,\r\n DialogContent,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogOverlay,\r\n DialogPortal,\r\n DialogTitle,\r\n DialogTrigger,\r\n};\r\n","import { toast } from 'sonner';\r\n\r\ntype ToastVariant = 'default' | 'success' | 'error' | 'info' | 'warning';\r\n\r\ntype SonnerToastProps = {\r\n title: string;\r\n description?: string;\r\n variant?: ToastVariant;\r\n duration?: number;\r\n actionLabel?: string;\r\n onAction?: () => void;\r\n};\r\n\r\nexport function showSonnerToast({\r\n title,\r\n description,\r\n variant = 'default',\r\n duration = 3000,\r\n actionLabel,\r\n onAction,\r\n}: SonnerToastProps) {\r\n const options = {\r\n closeButton: true,\r\n description,\r\n duration,\r\n action: actionLabel\r\n ? {\r\n label: actionLabel,\r\n onClick: onAction || (() => { }),\r\n }\r\n : undefined,\r\n };\r\n\r\n switch (variant) {\r\n case 'success':\r\n toast.success(title, options);\r\n break;\r\n case 'error':\r\n toast.error(title, options);\r\n break;\r\n case 'info':\r\n toast.info(title, options);\r\n break;\r\n case 'warning':\r\n toast.warning(title, options);\r\n break;\r\n default:\r\n toast(title, options);\r\n }\r\n}\r\n\r\ntype ConfirmToastOptions = {\r\n title: string;\r\n description?: string;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n};\r\n\r\nexport function showConfirmToast({\r\n title,\r\n description,\r\n confirmLabel = 'Confirm',\r\n cancelLabel = 'Cancel',\r\n}: ConfirmToastOptions): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n const id = toast(title, {\r\n description,\r\n duration: Infinity,\r\n closeButton: false,\r\n action: {\r\n label: confirmLabel,\r\n onClick: () => {\r\n resolve(true);\r\n toast.dismiss(id);\r\n },\r\n },\r\n cancel: {\r\n label: cancelLabel,\r\n onClick: () => {\r\n resolve(false);\r\n toast.dismiss(id);\r\n },\r\n },\r\n });\r\n });\r\n}","import React, { useEffect, useState } from 'react';\r\n\r\nimport { Tooltip, TooltipTrigger, TooltipContent } from '@/components/ui/tooltip';\r\n\r\nimport { StagesProps } from '@/types/global';\r\n\r\nconst StagesComponent = ({\r\n stages,\r\n isShowBtn,\r\n buttonText,\r\n className,\r\n style,\r\n onStageChange,\r\n currentStage,\r\n dataKey = 'key',\r\n dataLabel = 'header',\r\n loading,\r\n saving,\r\n triggerOnClick = false,\r\n canvasMode = 'desktop'\r\n}: StagesProps) => {\r\n const [activeStage, setActiveStage] = useState('');\r\n const [isCompleted, setIsCompleted] = useState(false);\r\n const [activeChildStage, setActiveChildStage] = useState<any>(null);\r\n const [activeRootStage, setActiveRootStage] = useState<any>(null);\r\n\r\n useEffect(() => {\r\n if (currentStage) {\r\n setActiveStage(currentStage);\r\n } else {\r\n setActiveStage(stages && stages.length > 0 ? stages[0][dataKey] : null);\r\n }\r\n }, [currentStage]);\r\n\r\n const updateStage = (stageKey: string) => {\r\n setActiveStage(stageKey);\r\n onStageChange?.(stageKey);\r\n const { activeRoot, activeChild } = findStageContext(stages, stageKey);\r\n\r\n setActiveRootStage(activeRoot);\r\n setActiveChildStage(activeChild);\r\n };\r\n\r\n const nextStage = () => {\r\n if (!stages || stages.length === 0) return;\r\n const currentIndex = stages.findIndex((stage: any) => stage[dataKey] === activeStage);\r\n\r\n if (currentIndex + 1 === stages.length) {\r\n const currentStageObj = stages[currentIndex];\r\n updateStage(currentStageObj[dataKey]);\r\n setIsCompleted(true);\r\n return;\r\n }\r\n\r\n if (currentIndex < stages.length - 1) {\r\n const nextStageObj = stages[currentIndex];\r\n updateStage(nextStageObj[dataKey]);\r\n return;\r\n }\r\n };\r\n\r\n const lastStage = stages && stages.length > 0 ? stages[stages.length - 1][dataKey] : null;\r\n const isMobile = canvasMode === 'mobile';\r\n\r\n const onStageClick = (stageKey: any) => {\r\n if (!stageKey || stageKey === activeStage || activeStage === lastStage) return;\r\n setActiveStage(stageKey);\r\n if (triggerOnClick) {\r\n onStageChange?.(stageKey);\r\n }\r\n };\r\n\r\n const findStageContext = (\r\n nodes?: any[],\r\n curr?: string,\r\n root: any = null\r\n ): { activeRoot: any | null; activeChild: any | null } => {\r\n if (!nodes || nodes.length === 0) {\r\n return { activeRoot: null, activeChild: null };\r\n }\r\n if (!Array.isArray(nodes)) {\r\n return { activeRoot: null, activeChild: null };\r\n }\r\n\r\n for (const node of nodes) {\r\n const currentRoot = root ?? node;\r\n\r\n if (node?.[dataKey] === curr) {\r\n return {\r\n activeRoot: root ?? node,\r\n activeChild: node\r\n };\r\n }\r\n\r\n const result = findStageContext(node?.children, curr, currentRoot);\r\n if (result.activeChild) {\r\n return result;\r\n }\r\n }\r\n\r\n return { activeRoot: null, activeChild: null };\r\n };\r\n\r\n useEffect(() => {\r\n if (!currentStage || !Array.isArray(stages)) {\r\n setActiveRootStage(null);\r\n setActiveChildStage(null);\r\n return;\r\n }\r\n\r\n const { activeRoot, activeChild } = findStageContext(stages, currentStage);\r\n\r\n setActiveRootStage(activeRoot);\r\n setActiveChildStage(activeChild);\r\n }, [currentStage, stages]);\r\n\r\n const isAllStagesCompleted = isCompleted || (activeRootStage?.[dataKey] === lastStage);\r\n const disabled = isAllStagesCompleted || loading || saving;\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className={`\r\n flex flex-col lg:flex-row items-start lg:items-center \r\n justify-between bg-red p-2 rounded-lg border border-gray-200 w-full\r\n gap-3 lg:gap-0\r\n ${isMobile ? 'p-3 sm:p-4' : 'p-2'}\r\n `}\r\n >\r\n {/* Back Button - Always top left */}\r\n <div className=\"flex items-center flex-shrink-0 order-1 lg:order-1\">\r\n <button className=\"p-2 hover:bg-gray-100 rounded flex-shrink-0\">\r\n <svg className=\"w-4 h-4 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Stages Container - Middle on mobile, center on desktop */}\r\n <div className={`\r\n flex flex-col sm:flex-row items-center flex-1 px-1 sm:px-2 \r\n flex-wrap gap-2 sm:gap-2 lg:gap-3 w-full lg:w-auto\r\n ${isMobile ? 'order-2 mt-2 lg:mt-0' : 'order-2'}\r\n `}\r\n >\r\n {loading ? (\r\n Array(6).fill(null).map((_, index) => (\r\n <button\r\n key={index}\r\n className={`\r\n min-w-[70px] sm:min-w-[80px] w-full sm:w-auto\r\n min-h-[32px] sm:min-h-[35px] px-3 sm:px-4 py-2 rounded-full \r\n text-xs sm:text-sm font-medium transition-colors duration-200 \r\n whitespace-nowrap text-gray-700 hover:bg-gray-100 border \r\n border-gray-200 bg-gray-100 animate-pulse flex-shrink-0\r\n ${isMobile ? 'flex-1' : ''}\r\n `}\r\n disabled\r\n />\r\n ))\r\n ) : (stages || [])?.length > 0 && stages?.map((stage: { id: string;[dataLabel]: string;[dataKey]: string; isSuccess: boolean }, index: number) => {\r\n const currentIndex = stages.findIndex((s: any) => s[dataKey] === activeStage);\r\n const isCompletedStage = isAllStagesCompleted || index <= currentIndex;\r\n const isActive = !isAllStagesCompleted && index === currentIndex;\r\n let stageColor = 'bg-green-50 text-green-700 border-2 border-green-700';\r\n\r\n if (stage.hasOwnProperty('isSuccess') && stage.isSuccess === false) {\r\n stageColor = 'bg-red-50 text-red-700 border-2 border-red-700';\r\n }\r\n\r\n let stageLabel = stage[dataLabel];\r\n if (stage[dataKey] !== activeChildStage?.[dataKey] && activeRootStage?.[dataKey] === stage[dataKey]) {\r\n stageLabel = activeChildStage?.[dataLabel] || stageLabel;\r\n stageColor = 'bg-green-50 text-green-700 border-2 border-green-700';\r\n\r\n if (activeChildStage.hasOwnProperty('isSuccess') && activeChildStage.isSuccess === false) {\r\n stageColor = 'bg-red-50 text-red-700 border-2 border-red-700';\r\n }\r\n }\r\n const stageKey = typeof stage[dataKey] === 'string' ? stage[dataKey] : JSON.stringify(stage[dataKey]);\r\n return (\r\n <React.Fragment key={stageKey}>\r\n <Tooltip delayDuration={500} disableHoverableContent key={stageKey}>\r\n <TooltipTrigger asChild>\r\n <button\r\n className={`\r\n min-w-[70px] sm:min-w-[80px] w-full sm:w-auto px-3 sm:px-4 py-1.5 sm:py-2 \r\n rounded-full text-xs sm:text-sm font-medium transition-colors duration-200 \r\n whitespace-normal sm:whitespace-nowrap flex-shrink-0 max-w-[150px] text-ellipsis overflow-hidden\r\n ${isActive ? 'bg-green-700 text-white shadow-md'\r\n : isCompletedStage ? stageColor\r\n : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-200'}\r\n ${isMobile ? 'flex-1 text-center py-2.5' : ''}\r\n `}\r\n onClick={() => {\r\n if (isAllStagesCompleted) return;\r\n onStageClick(stage[dataKey]);\r\n }}\r\n >\r\n {stageLabel}\r\n </button>\r\n </TooltipTrigger>\r\n\r\n <TooltipContent className=\"max-w-[400px] p-3 text-xs text-muted-foreground space-y-2\">\r\n <span><b>{stageLabel}</b></span>\r\n </TooltipContent>\r\n\r\n {/* Connector line - Hide on mobile */}\r\n {!isMobile && index < stages.length - 1 && (\r\n <div className=\"hidden sm:flex sm:flex-shrink-0 w-3 h-px bg-gray-300 sm:w-4\" />\r\n )}\r\n </Tooltip>\r\n </React.Fragment>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Next Button - Bottom on mobile, right on desktop */}\r\n {isShowBtn && (\r\n <div className={`\r\n flex items-center flex-shrink-0 w-full lg:w-auto\r\n ${isMobile ? 'order-3 mt-3 lg:mt-0' : 'order-3'}\r\n `}\r\n >\r\n <button\r\n className={`\r\n w-full lg:w-auto bg-green-700 text-white px-4 lg:px-6 py-2.5 \r\n rounded-lg text-sm font-medium transition-colors duration-200 \r\n shadow-sm ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:shadow-md'}\r\n `}\r\n onClick={nextStage}\r\n disabled={disabled}\r\n >\r\n {saving ? 'Updating...' : buttonText}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StagesComponent;\r\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { ElementProps } from \"@/types/global\";\r\n\r\nconst Spacer = ({ className, style }: ElementProps) => {\r\n return (\r\n <div className={`${className}`} style={style} />\r\n );\r\n};\r\n\r\nexport default Spacer;\r\n","import { ProfileProps } from \"@/types/global\";\r\n\r\nconst Profile = ({ profileType, showName, userName, className, style }: ProfileProps) => {\r\n return (\r\n <div className={className} style={style}>\r\n <div className='flex gap-2 items-center justify-between w-30 cursor-pointer'>\r\n {showName && (\r\n <h4 className='text-[#000000] dark:text-[#fff] text-[13px] font-[500] mb-0'>{userName}</h4>\r\n )}\r\n {profileType === 'avatar' ? (\r\n <img\r\n src='https://builder.development.algorithmshift.ai/images/toolset/profile.svg' alt=\"auto\" width={24} height={24}\r\n />\r\n ) : (\r\n <div className='w-6 h-6 bg-[#12715b] rounded-full text-[#fff] text-center text-[11px] flex items-center justify-center'>A</div>\r\n )}\r\n\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Profile;\r\n","import { NotificationProps } from \"@/types/global\";\r\n\r\nconst Notification = ({ className, style, badgeType, badgeCount = 0, hideBadgeWhenZero }: NotificationProps) => {\r\n return (\r\n <div className={className} style={style}>\r\n <div className='w-[34px] h-[34px] bg-[#E9E9E9] rounded-md text-center flex items-center justify-center relative'>\r\n <img\r\n src='https://builder.development.algorithmshift.ai/images/toolset/notification.svg' alt=\"auto\" width={18} height={18}\r\n />\r\n {badgeType === 'number' && !(hideBadgeWhenZero && badgeCount === 0) && badgeCount > 0 ? (\r\n <span className='text-[10px] text-[#fff] bg-[#FF4A4A] w-[20px] h-[20px] rounded-full absolute top-0 right-0 transform translate-x-1/2 -translate-y-1/2 leading-[20px]'>{badgeCount}</span>\r\n ) : <span className='bg-[#FF4A4A] w-[10px] h-[10px] rounded-full absolute top-0 right-0 transform translate-x-1/2 -translate-y-1/2 leading-[20px]'></span>}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Notification;\r\n","import { cn } from '@/lib/utils';\r\nimport { LogoProps } from '@/types/global';\r\nimport placeholder from \"../../../assets/logo_placeholder.png\";\r\n\r\nconst Logo = ({\r\n className,\r\n style,\r\n imageUrl,\r\n altText = 'Preview',\r\n}: LogoProps) => {\r\n\r\n if (!imageUrl) {\r\n return (\r\n <div\r\n className={cn(\r\n className, 'p-0'\r\n )} style={style}\r\n >\r\n <img src={placeholder} alt={altText} className=\"opacity-50\" width={150} height={80} />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <img src={imageUrl} alt={altText} className={className} style={style} />\r\n );\r\n};\r\n\r\nexport default Logo;\r\n","'use client';\r\n\r\nimport { useCallback, useMemo, useState, useEffect } from 'react';\r\n\r\nimport { Bell, Search, Menu } from 'lucide-react';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { useRouter } from 'next/navigation';\r\n\r\nimport { Avatar, AvatarImage } from '@/components/ui/avatar';\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n DropdownMenuSeparator,\r\n} from '@/components/ui/dropdown-menu';\r\nimport { Input } from '@/components/ui/input';\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { getInitials } from '@/lib/utils';\r\nimport { NavbarProps } from '@/types/global';\r\n\r\nexport default function Navbar({\r\n style,\r\n badgeType,\r\n badgeCount = 0,\r\n hideBadgeWhenZero,\r\n profileType,\r\n showName,\r\n imageUrl,\r\n altText = 'Logo',\r\n canvasMode = 'desktop', // desktop | mobile | tablet\r\n list = [],\r\n profileMenu = [],\r\n userName = 'Guest User',\r\n isBuilder = false,\r\n source,\r\n navList,\r\n onSearch\r\n}: NavbarProps) {\r\n const router = useRouter();\r\n\r\n // Auto responsive\r\n const [screenMode, setScreenMode] = useState<'desktop' | 'tablet' | 'mobile' | string>(\r\n canvasMode\r\n );\r\n\r\n useEffect(() => {\r\n const detectMode = () => {\r\n if (window.innerWidth < 640) setScreenMode('mobile');\r\n else if (window.innerWidth < 1024) setScreenMode('tablet');\r\n else setScreenMode('desktop');\r\n };\r\n\r\n detectMode();\r\n window.addEventListener('resize', detectMode);\r\n return () => window.removeEventListener('resize', detectMode);\r\n }, []);\r\n\r\n const mode = canvasMode || screenMode;\r\n\r\n const isMobile = mode === 'mobile';\r\n const isTablet = mode === 'tablet';\r\n const isDesktop = mode === 'desktop';\r\n\r\n const handleBuilderExit = useCallback(\r\n (e: any, url: string) => {\r\n if (isBuilder) {\r\n e.preventDefault();\r\n showSonnerToast({ variant: 'info', title: `You will be redirected to ${url} in the real app.`, duration: 3000 });\r\n } else {\r\n router.push(url);\r\n }\r\n },\r\n [isBuilder]\r\n );\r\n\r\n const formattedMenu = useMemo(() => {\r\n if (source === 'state' && navList?.length) {\r\n return navList.map((i: any) => ({\r\n ...i,\r\n header: i.name || 'Menu',\r\n }));\r\n }\r\n return list;\r\n }, [source, navList, list]);\r\n\r\n const RenderSearchInput = () => (\r\n <div className=\"flex-1 px-2\">\r\n <div className=\"relative w-full max-w-md border border-gray-300 rounded-md\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 dark:text-white text-gray-400\" />\r\n <Input\r\n placeholder=\"Search\"\r\n className=\"pl-9 text-gray-500\"\r\n onKeyDown={(event) => {\r\n if (event.key === 'Enter') {\r\n const query = (event.target as HTMLInputElement).value;\r\n onSearch?.({\r\n searchTerm: query\r\n });\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n {/* NAV */}\r\n <nav\r\n className=\"w-full min-h-[75px] border-b border-gray-200 dark:border-gray-800 dark:bg-gray-800 bg-white shadow-sm\"\r\n style={style}\r\n >\r\n <div className=\"mx-auto flex max-w-[90%] items-center justify-between px-4 py-4\">\r\n\r\n {/* Logo */}\r\n <Link\r\n href=\"/\"\r\n onClick={(e) => handleBuilderExit(e, '/')}\r\n className=\"flex items-center space-x-2\"\r\n >\r\n {imageUrl ? (\r\n <Image src={imageUrl} alt={altText} width={180} height={40} />\r\n ) : (\r\n <span className=\"font-semibold text-blue-700\">Logo</span>\r\n )}\r\n </Link>\r\n\r\n {/* Desktop Menu */}\r\n {isDesktop && (\r\n <div className=\"hidden md:flex items-center space-x-6\">\r\n {formattedMenu.map((item: any) => (\r\n <Link\r\n key={item.id}\r\n href={item.url}\r\n onClick={(e) => handleBuilderExit(e, item.url)}\r\n className=\"text-sm font-medium text-gray-600 dark:text-white hover:text-gray-900\"\r\n >\r\n {item.header}\r\n </Link>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Right Side */}\r\n <div className=\"flex items-center space-x-3\">\r\n\r\n {/* Desktop Search */}\r\n {(isDesktop || isTablet) && <RenderSearchInput />}\r\n\r\n {/* Notifications */}\r\n <div className=\"relative bg-gray-200 dark:bg-gray-700 rounded-md\">\r\n <Button variant=\"ghost\" size=\"icon\">\r\n <Bell className=\"h-5 w-5 text-gray-700 dark:text-gray-300\" />\r\n </Button>\r\n\r\n {badgeType === 'number' && !(hideBadgeWhenZero && badgeCount === 0) && Number(badgeCount) > 0 ? (\r\n <span className=\"absolute -top-1 -right-1 h-4 w-4 flex items-center justify-center bg-red-500 rounded-full text-white text-[10px]\">\r\n {badgeCount}\r\n </span>\r\n ) : (\r\n !hideBadgeWhenZero && (\r\n <span className=\"absolute -top-1 -right-1 h-2 w-2 bg-red-500 rounded-full\"></span>\r\n )\r\n )}\r\n </div>\r\n\r\n {/* Profile */}\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <div className=\"flex items-center space-x-2 cursor-pointer\">\r\n {!isMobile && showName && (\r\n <h4 className=\"text-gray-900 dark:text-gray-300 text-sm\">\r\n {userName}\r\n </h4>\r\n )}\r\n <Avatar className=\"h-8 w-8\">\r\n {profileType === 'avatar' ? (\r\n <AvatarImage src=\"/images/appbuilder/toolset/profile.svg\" alt=\"profile\" />\r\n ) : (\r\n <div className=\"bg-green-700 text-white h-full w-full rounded-full flex items-center justify-center text-xs\">\r\n {getInitials(userName)}\r\n </div>\r\n )}\r\n </Avatar>\r\n\r\n {(isMobile || isTablet) && (\r\n <Button variant=\"ghost\" size=\"icon\">\r\n <Menu className=\"h-6 w-6\" />\r\n </Button>\r\n )}\r\n </div>\r\n </DropdownMenuTrigger>\r\n\r\n <DropdownMenuContent align=\"end\" className=\"bg-white dark:bg-gray-800\">\r\n {profileMenu.map((item: any) => (\r\n <DropdownMenuItem key={item.id}>\r\n <Link href={item.url} onClick={(e) => handleBuilderExit(e, item.url)}>\r\n {item.header}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n\r\n {/* Mobile/Tablet Menu */}\r\n {(isMobile || isTablet) && (\r\n <>\r\n <DropdownMenuSeparator />\r\n {formattedMenu.map((item: any) => (\r\n <DropdownMenuItem key={item.id}>\r\n <Link href={item.url} onClick={(e) => handleBuilderExit(e, item.url)}>\r\n {item.header}\r\n </Link>\r\n </DropdownMenuItem>\r\n ))}\r\n </>\r\n )}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n </div>\r\n </nav>\r\n\r\n {/* Mobile Search */}\r\n {isMobile && (\r\n <div className=\"p-3\">\r\n <RenderSearchInput />\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Avatar = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Root\r\n ref={ref}\r\n className={cn(\r\n 'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAvatar.displayName = AvatarPrimitive.Root.displayName;\r\n\r\nconst AvatarImage = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Image>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Image\r\n ref={ref}\r\n className={cn('aspect-square h-full w-full', className)}\r\n {...props}\r\n />\r\n));\r\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\r\n\r\nconst AvatarFallback = React.forwardRef<\r\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\r\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\r\n>(({ className, ...props }, ref) => (\r\n <AvatarPrimitive.Fallback\r\n ref={ref}\r\n className={cn(\r\n 'flex h-full w-full items-center justify-center rounded-full bg-muted',\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\r\n\r\nexport { Avatar, AvatarImage, AvatarFallback };\r\n","'use client';\r\n\r\nimport React, { useEffect, useMemo, useState, useCallback } from 'react';\r\n\r\nimport axios from 'axios';\r\nimport {\r\n BarChart,\r\n Bar,\r\n Area,\r\n AreaChart,\r\n XAxis,\r\n YAxis,\r\n CartesianGrid,\r\n Tooltip,\r\n ResponsiveContainer,\r\n Legend,\r\n} from 'recharts';\r\n\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { BarChartProps } from '@/types/global';\r\n\r\nconst getRandomColor = () => {\r\n const palette = [\r\n '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a', '#1e293b',\r\n '#10b981', '#059669', '#047857', '#065f46', '#022c22',\r\n '#f59e0b', '#d97706', '#b45309', '#92400e', '#422006',\r\n '#ef4444', '#dc2626', '#b91c1c', '#991b1b', '#7f1d1d',\r\n '#8b5cf6', '#7c3aed', '#6d28d9', '#5b21b6', '#4c1d95',\r\n '#14b8a6', '#0d9488', '#0f766e', '#115e59', '#134e4a',\r\n '#ec4899', '#db2777', '#be185d', '#9d174d', '#831843',\r\n '#22c55e', '#16a34a', '#15803d', '#166534', '#14532d',\r\n ];\r\n return palette[Math.floor(Math.random() * palette.length)];\r\n};\r\n\r\nconst ChartComponent = ({\r\n className,\r\n style,\r\n loading: externalLoading,\r\n dataKey,\r\n dataLabel,\r\n apiUrl,\r\n isPaginationEnabled,\r\n limit = 10,\r\n canvasMode,\r\n ...props\r\n}: BarChartProps) => {\r\n const [rawData, setRawData] = useState<any[]>([]);\r\n const [rawMeta, setRawMeta] = useState<any>(null);\r\n const [localLoading, setLocalLoading] = useState(false);\r\n const [currentPage, setCurrentPage] = useState(1);\r\n\r\n const effectiveData = apiUrl ? rawData : (props.data as any[] | undefined) || [];\r\n const effectiveLoading = apiUrl ? localLoading : externalLoading;\r\n\r\n useEffect(() => {\r\n if (apiUrl) {\r\n setCurrentPage(1);\r\n }\r\n }, [apiUrl]);\r\n\r\n const fetchData = useCallback(async (page: number) => {\r\n if (!apiUrl) return;\r\n\r\n const cancelled = false;\r\n\r\n try {\r\n setLocalLoading(true);\r\n\r\n const params = new URLSearchParams({\r\n page: page.toString(),\r\n limit: limit.toString(),\r\n });\r\n\r\n const axiosClient = props.axiosInstance ?? axios;\r\n\r\n const res = await axiosClient.get(`${apiUrl}?${params.toString()}`, {\r\n withCredentials: true,\r\n });\r\n\r\n if (!cancelled) {\r\n let data = [];\r\n let meta = null;\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n data = res.data.data;\r\n meta = res.data.meta || null;\r\n } else if (Array.isArray(res.data)) {\r\n data = res.data;\r\n }\r\n setRawData(data);\r\n setRawMeta(meta);\r\n }\r\n } catch (err: any) {\r\n if (!cancelled) {\r\n showSonnerToast({\r\n title: err?.response?.data?.message || err?.message || 'Failed to load chart data',\r\n variant: 'error',\r\n });\r\n setRawData([]);\r\n }\r\n } finally {\r\n if (!cancelled) setLocalLoading(false);\r\n }\r\n }, [apiUrl, limit]);\r\n\r\n useEffect(() => {\r\n if (!apiUrl) return;\r\n\r\n fetchData(currentPage);\r\n }, [apiUrl, currentPage, fetchData]);\r\n\r\n const handlePageChange = (newPage: number) => {\r\n if (rawMeta && (newPage < 1 || newPage > rawMeta.pages)) return;\r\n setCurrentPage(newPage);\r\n };\r\n\r\n const data = useMemo(() => {\r\n if (!Array.isArray(effectiveData) || effectiveData.length === 0 || !dataKey || !dataLabel) {\r\n return [];\r\n }\r\n\r\n return effectiveData.map((item: any) => ({\r\n ...item,\r\n [dataKey]: Number(item[dataKey] || 0),\r\n fill: getRandomColor(),\r\n }));\r\n }, [effectiveData, dataKey, dataLabel]);\r\n\r\n const chartType = props.chartType || 'bar';\r\n const legendsPosition = ['middle', 'bottom'].includes(props.legendsPosition as string)\r\n ? props.legendsPosition\r\n : 'top';\r\n\r\n if (effectiveLoading || data.length === 0) {\r\n return (\r\n <div\r\n className={`relative flex flex-col w-full h-[300px] md:h-[400px] bg-gradient-to-br from-gray-50 to-gray-100 rounded-xl p-6 ${className}`}\r\n style={style}\r\n >\r\n <div className=\"mb-6 flex justify-center\">\r\n <div className=\"inline-flex items-center space-x-2 bg-white/90 px-6 py-2.5 rounded-xl backdrop-blur-sm border border-gray-200 shadow-lg\">\r\n <div className=\"w-5 h-5 border-2 border-gray-400 border-t-blue-500 rounded-full animate-spin\" />\r\n <span className=\"text-sm font-medium text-gray-700 bg-gradient-to-r from-gray-300 bg-clip-text animate-pulse\">\r\n Loading chart data...\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/60 to-transparent animate-shimmer rounded-xl\" />\r\n <div className=\"flex-1 relative w-full h-full min-h-[240px] md:min-h-[320px] bg-white/80 rounded-lg border border-gray-200/50 shadow-sm\">\r\n <div className=\"absolute bottom-0 left-4 right-4 flex gap-2 h-[200px] md:h-[280px] justify-center items-end\">\r\n {[...Array(20)].map((_, idx) => {\r\n const randomHeight = `${Math.floor(Math.random() * 76) + 20}%`;\r\n return (\r\n <div\r\n key={`bar-${idx}`}\r\n className={`relative w-10 md:w-12 flex-1 max-w-[48px] rounded-t-lg bg-gradient-to-t from-gray-100 via-gray-200 to-transparent shadow-lg border border-gray-200/50 animate-slide-up stagger-${idx} overflow-hidden`}\r\n style={{ height: randomHeight, animationDelay: `${idx * 0.08}s` }}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-white/40 via-transparent to-white/40 animate-shimmer-bar\" />\r\n <div className=\"absolute bottom-1 left-1/2 w-4 h-1 rounded-full transform -translate-x-1/2 blur-sm\" />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`${className} h-[450px]`} style={style}>\r\n {isPaginationEnabled && rawMeta && (\r\n <div className=\"flex items-center justify-between mb-4 px-2\">\r\n <div className=\"text-sm text-gray-600 hidden sm:block\">\r\n Page {rawMeta.page} of {rawMeta.pages} ({rawMeta.total.toLocaleString()} total records)\r\n </div>\r\n <div className=\"flex items-center space-x-2 sm:hidden w-full justify-center\">\r\n <button\r\n onClick={() => handlePageChange(currentPage - 1)}\r\n disabled={currentPage === 1 || localLoading}\r\n className=\"flex-1 px-3 py-2 text-xs font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center justify-center space-x-1 min-w-0\"\r\n >\r\n <span>← Prev</span>\r\n </button>\r\n <span className=\"px-2 py-2 text-xs font-semibold text-gray-700 min-w-[36px] text-center flex-shrink-0\">\r\n {currentPage}\r\n </span>\r\n <button\r\n onClick={() => handlePageChange(currentPage + 1)}\r\n disabled={currentPage >= rawMeta.pages || localLoading}\r\n className=\"flex-1 px-3 py-2 text-xs font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center justify-center space-x-1 min-w-0\"\r\n >\r\n <span>Next →</span>\r\n </button>\r\n </div>\r\n\r\n <div className=\"flex items-center space-x-2 hidden sm:flex\">\r\n <button\r\n onClick={() => handlePageChange(currentPage - 1)}\r\n disabled={currentPage === 1 || localLoading}\r\n className=\"px-3 py-1.5 text-sm font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center space-x-1\"\r\n >\r\n <span>← Prev</span>\r\n </button>\r\n <span className=\"px-3 py-1 text-sm font-medium text-gray-700\">\r\n {currentPage}\r\n </span>\r\n <button\r\n onClick={() => handlePageChange(currentPage + 1)}\r\n disabled={currentPage >= rawMeta.pages || localLoading}\r\n className=\"px-3 py-1.5 text-sm font-medium rounded-lg border bg-white shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 flex items-center space-x-1\"\r\n >\r\n <span>Next →</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n )}\r\n\r\n {/* Chart */}\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n {chartType === 'bar' ? (\r\n <BarChart data={data}>\r\n <CartesianGrid strokeDasharray=\"3 3\" />\r\n <XAxis\r\n dataKey={dataLabel as string}\r\n angle={-45}\r\n textAnchor=\"end\"\r\n interval={0}\r\n tickFormatter={(value: string) =>\r\n value?.toString().length > 10 ? `${value.toString().substring(0, 10)}...` : value\r\n }\r\n tick={{\r\n fontSize: 13,\r\n fontWeight: 500,\r\n fill: '#666',\r\n fontFamily: 'inherit',\r\n }}\r\n height={80}\r\n className={'hidden sm:block'}\r\n />\r\n <YAxis\r\n tickFormatter={(value: number) => `${(value / 1000).toFixed(0)}k`}\r\n tick={{\r\n fontSize: 12,\r\n fill: '#94a3b8',\r\n fontWeight: 500,\r\n }}\r\n domain={['dataMin', 'dataMax']}\r\n width={60}\r\n />\r\n <Tooltip formatter={(value: number) => [`${value}`, 'Count']} />\r\n <Legend verticalAlign={legendsPosition as any} align=\"center\" />\r\n <Bar\r\n dataKey={dataKey as string}\r\n radius={[6, 6, 0, 0]}\r\n isAnimationActive={false}\r\n />\r\n </BarChart>\r\n ) : (\r\n <AreaChart data={data}>\r\n <defs>\r\n <linearGradient id=\"colorCount\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\r\n <stop offset=\"5%\" stopColor=\"#00695C\" stopOpacity={0.8} />\r\n <stop offset=\"95%\" stopColor=\"#00695C\" stopOpacity={0} />\r\n </linearGradient>\r\n </defs>\r\n <CartesianGrid strokeDasharray=\"3 3\" />\r\n <XAxis\r\n dataKey={dataLabel as string}\r\n angle={0}\r\n interval={0}\r\n tick={{\r\n fontSize: 13,\r\n fontWeight: 500,\r\n fill: '#666',\r\n fontFamily: 'inherit',\r\n }}\r\n />\r\n <YAxis\r\n tickFormatter={(value: number) => `${(value / 1000).toFixed(0)}k`}\r\n tick={{\r\n fontSize: 12,\r\n fill: '#94a3b8',\r\n fontWeight: 500,\r\n }}\r\n domain={['dataMin', 'dataMax']}\r\n width={60}\r\n />\r\n <Tooltip formatter={(value: number) => `${value}k`} />\r\n <Area\r\n type=\"monotone\"\r\n dataKey={dataKey as string}\r\n stroke=\"#00695C\"\r\n fillOpacity={1}\r\n fill=\"url(#colorCount)\"\r\n isAnimationActive={false}\r\n />\r\n </AreaChart>\r\n )}\r\n </ResponsiveContainer>\r\n </div>\r\n );\r\n};\r\n\r\nexport default React.memo(ChartComponent);\r\n","'use client';\r\n\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\n\r\nimport axios from 'axios';\r\nimport {\r\n PieChart,\r\n Pie,\r\n Cell,\r\n ResponsiveContainer,\r\n Tooltip,\r\n} from 'recharts';\r\n\r\nimport { showSonnerToast } from '@/components/ui/sonner-toast';\r\nimport { PieChartProps } from '@/types/global';\r\n\r\nconst getRandomColor = () => {\r\n const palette = [\r\n '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a', '#1e293b',\r\n '#10b981', '#059669', '#047857', '#065f46', '#022c22',\r\n '#f59e0b', '#d97706', '#b45309', '#92400e', '#422006',\r\n '#ef4444', '#dc2626', '#b91c1c', '#991b1b', '#7f1d1d',\r\n '#8b5cf6', '#7c3aed', '#6d28d9', '#5b21b6', '#4c1d95',\r\n '#14b8a6', '#0d9488', '#0f766e', '#115e59', '#134e4a',\r\n '#ec4899', '#db2777', '#be185d', '#9d174d', '#831843',\r\n '#22c55e', '#16a34a', '#15803d', '#166534', '#14532d',\r\n '#3b82f6', '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a',\r\n '#f97316', '#ea580c', '#c2410c', '#9a3412', '#7c2d12',\r\n '#a855f7', '#9333ea', '#7e22ce', '#6b21a8', '#581c87',\r\n '#06b6d4', '#0891b2', '#0e7490', '#155e75', '#164e63'\r\n ];\r\n return palette[Math.floor(Math.random() * palette.length)];\r\n};\r\n\r\nconst DonutChart = ({\r\n className,\r\n style,\r\n loading: externalLoading,\r\n dataKey = 'value',\r\n dataLabel = 'name',\r\n apiUrl,\r\n ...props\r\n}: PieChartProps) => {\r\n const showLegends = props.showLegends ?? true;\r\n const canvasMode = props.canvasMode;\r\n\r\n const [rawData, setRawData] = useState<any[]>([]);\r\n const [localLoading, setLocalLoading] = useState(false);\r\n\r\n const effectiveData = apiUrl ? rawData : (props.data as any[] | undefined) || [];\r\n const effectiveLoading = apiUrl ? localLoading : externalLoading;\r\n\r\n useEffect(() => {\r\n if (!apiUrl) return;\r\n\r\n let cancelled = false;\r\n\r\n const fetchData = async () => {\r\n try {\r\n setLocalLoading(true);\r\n\r\n const axiosClient = props.axiosInstance ?? axios;\r\n const res = await axiosClient.get(apiUrl, {\r\n withCredentials: true\r\n });\r\n\r\n if (!cancelled) {\r\n let data = [];\r\n if (res.data?.success && Array.isArray(res.data.data)) {\r\n data = res.data.data;\r\n } else if (Array.isArray(res.data)) {\r\n data = res.data;\r\n }\r\n setRawData(data);\r\n }\r\n } catch (err: any) {\r\n if (!cancelled) {\r\n showSonnerToast({\r\n title: err?.response?.data?.message || err?.message || 'Failed to load chart data',\r\n variant: 'error'\r\n });\r\n setRawData([]);\r\n }\r\n } finally {\r\n if (!cancelled) setLocalLoading(false);\r\n }\r\n };\r\n\r\n fetchData();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [apiUrl]);\r\n\r\n const data = useMemo(() => {\r\n if (!Array.isArray(effectiveData) || effectiveData.length === 0) return [];\r\n return effectiveData.map((item: any) => ({\r\n ...item,\r\n color: item.color || getRandomColor(),\r\n [dataKey]: Number(item[dataKey] ?? 0),\r\n [dataLabel]: item[dataLabel] ?? 'Unknown'\r\n }));\r\n }, [effectiveData, dataKey, dataLabel]);\r\n\r\n const total = useMemo(() =>\r\n data.reduce((sum: number, d: any) => sum + (d[dataKey] ?? 0), 0), [data, dataKey]\r\n );\r\n\r\n const formattedTotal = useMemo(() => {\r\n if (total >= 1000000) {\r\n return `${(total / 1000000).toFixed(1)}M`;\r\n }\r\n if (total >= 1000) {\r\n return `${(total / 1000).toFixed(0)}k`;\r\n }\r\n return total.toString();\r\n }, [total]);\r\n\r\n const chartData = useMemo(() => {\r\n if (total === 0) return data;\r\n\r\n const sortedData = [...data].sort((a, b) => (b[dataKey] ?? 0) - (a[dataKey] ?? 0));\r\n const minAngle = 360 / Math.max(12, sortedData.length);\r\n const minValue = (total * minAngle) / 360;\r\n\r\n return sortedData.map((item, index) => {\r\n const value = item[dataKey] ?? 0;\r\n if (value < minValue && index < 12) {\r\n return {\r\n ...item,\r\n [dataKey]: minValue * 1.2,\r\n isBoosted: true,\r\n };\r\n }\r\n return item;\r\n });\r\n }, [data, total, dataKey]);\r\n\r\n const forceMobile = canvasMode === 'mobile' || canvasMode === 'tablet';\r\n\r\n const getDynamicRadius = () => {\r\n if (forceMobile) return { inner: 60, outer: 100 };\r\n if (chartData.length <= 6) return { inner: 85, outer: 150 };\r\n return { inner: 70, outer: 130 };\r\n };\r\n\r\n const [mounted, setMounted] = useState(false);\r\n useEffect(() => {\r\n const timeout = setTimeout(() => setMounted(true), 100);\r\n return () => clearTimeout(timeout);\r\n }, []);\r\n\r\n const renderLegends = useMemo(() => {\r\n if (!showLegends) return null;\r\n return (\r\n <div className=\"flex flex-wrap justify-center gap-2 mt-4 w-full max-w-4xl\">\r\n {chartData.map((d: any, index: number) => {\r\n const actualValue = data.find((item: any) =>\r\n item[dataLabel] === d[dataLabel]\r\n )?.[dataKey] ?? d[dataKey];\r\n\r\n const displayValue = actualValue >= 1000\r\n ? `${(actualValue / 1000).toFixed(0)}k`\r\n : actualValue.toLocaleString();\r\n\r\n return (\r\n <div\r\n key={`legend-${index}`}\r\n className=\"flex items-center space-x-2 rounded-lg border border-gray-200/50 px-3 py-1.5 w-[48%] sm:w-[32%] md:w-auto bg-white/80 backdrop-blur-sm shadow-sm hover:shadow-md transition-all\"\r\n >\r\n <span\r\n className=\"inline-block w-[12px] h-[12px] rounded-full shrink-0 border-2 border-white/50\"\r\n style={{ backgroundColor: d.color }}\r\n />\r\n <div className=\"min-w-0 flex-1\">\r\n <span className=\"text-gray-900 text-[11px] md:text-[13px] font-semibold block truncate leading-tight\">\r\n {d[dataLabel]}\r\n </span>\r\n <div className=\"flex items-center gap-1 text-xs text-gray-600 font-medium\">\r\n <span>{displayValue}</span>\r\n <span>{((actualValue / total) * 100).toFixed(1)}%</span>\r\n {d.isBoosted && (\r\n <span className=\"text-[9px] px-1 py-0.5 bg-blue-100 text-blue-700 rounded-full\">\r\n min\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }, [chartData, data, dataLabel, dataKey, total, showLegends]);\r\n\r\n if (!mounted) return null;\r\n\r\n if (effectiveLoading || data.length === 0) {\r\n return (\r\n <div\r\n className={`relative flex flex-col items-center w-full h-[300px] md:h-[400px] bg-gradient-to-br from-gray-50 to-gray-100 rounded-xl p-6 ${className}`}\r\n style={style}\r\n >\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/60 to-transparent animate-shimmer rounded-xl\" />\r\n\r\n <div className=\"mt-6 text-center\">\r\n <div className=\"inline-flex items-center space-x-2 bg-white/80 px-6 py-2 rounded-full backdrop-blur-sm border border-gray-200 shadow-lg\">\r\n <div className=\"w-5 h-5 border-2 border-gray-300 border-t-blue-400 rounded-full animate-spin\" />\r\n <span className=\"text-sm font-medium text-gray-600 bg-gradient-to-r from-gray-300 bg-clip-text animate-pulse\">\r\n Loading chart data...\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex flex-wrap justify-center gap-3 mt-8 w-full max-w-4xl\">\r\n {[...Array(18)].map((_, idx) => (\r\n <div\r\n key={idx}\r\n className={`h-10 w-[48%] sm:w-[32%] md:w-32 rounded-xl bg-gradient-to-r from-gray-200 via-gray-300/50 to-gray-200 p-3 flex items-center space-x-3 animate-slide-up stagger-${idx} shadow-sm border border-gray-200/50`}\r\n >\r\n <div className=\"w-4 h-4 rounded-full bg-gradient-to-r from-blue-300 to-purple-300 animate-pulse\" />\r\n <div className=\"flex-1 space-y-1\">\r\n <div className=\"h-3 w-20 bg-gray-300 rounded animate-pulse\" />\r\n <div className=\"h-2.5 w-16 bg-gray-200/60 rounded animate-pulse-delayed\" />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const { inner, outer } = getDynamicRadius();\r\n const innerRadius = inner;\r\n const outerRadius = outer;\r\n\r\n return (\r\n <div className={`relative flex flex-col items-center ${className}`} style={style}>\r\n <div className=\"relative w-full md:w-[75%] h-[280px] md:h-[380px] flex items-center justify-center mb-2\">\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <PieChart>\r\n <Pie\r\n data={chartData}\r\n cx=\"50%\"\r\n cy=\"50%\"\r\n innerRadius={innerRadius}\r\n outerRadius={outerRadius}\r\n dataKey={dataKey as string}\r\n labelLine={false}\r\n isAnimationActive={true}\r\n animationDuration={800}\r\n minAngle={3}\r\n >\r\n {chartData.map((entry: any, index: number) => (\r\n <Cell\r\n key={`cell-${index}`}\r\n fill={entry.color}\r\n stroke={entry.isBoosted ? '#fff' : 'transparent'}\r\n strokeWidth={entry.isBoosted ? 1.5 : 0}\r\n />\r\n ))}\r\n </Pie>\r\n <Tooltip\r\n formatter={(value: number, name: string, payload) => {\r\n const label = payload && payload.payload ? payload.payload[dataLabel] : name;\r\n const actualItem = data.find((item: any) => item[dataLabel] === label);\r\n const actualValue = actualItem ? actualItem[dataKey] : value;\r\n\r\n const valueFormatted = actualValue >= 1000\r\n ? `${(actualValue / 1000).toFixed(0)}k`\r\n : actualValue.toLocaleString();\r\n const percentage = ((actualValue / total) * 100).toFixed(1);\r\n\r\n return [\r\n `${label}: ${valueFormatted} (${percentage}%)`,\r\n ];\r\n }}\r\n contentStyle={{\r\n backgroundColor: 'white',\r\n border: '1px solid #e5e7eb',\r\n borderRadius: '8px',\r\n fontSize: '13px',\r\n padding: '8px 12px'\r\n }}\r\n />\r\n </PieChart>\r\n </ResponsiveContainer>\r\n\r\n {total > 0 && (\r\n <div className={`absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-center pointer-events-none ${forceMobile ? 'text-xl px-2' : 'text-3xl px-4'} font-bold bg-white/90 backdrop-blur-sm rounded-full py-1 shadow-lg`}>\r\n <div className=\"text-[#1f2937] leading-tight\">\r\n {formattedTotal}\r\n <span className=\"text-sm md:text-base font-normal text-gray-600 block md:inline-block md:ml-1\">\r\n total\r\n </span>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {renderLegends}\r\n </div>\r\n );\r\n};\r\n\r\nexport default React.memo(DonutChart);\r\n","import { EmailComposerProps } from '@/types/global';\r\nimport TinyMceEditor from '../Global/TinyMceEditor';\r\n\r\nexport default function EmailComposer({ className, style, to, setTo, showCc, setShowCc, showBcc, setShowBcc, cc, setCc, bcc, setBcc, subject, setSubject, body, setBody }: EmailComposerProps) {\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className=\"border rounded-md shadow bg-[#fff] p-4 mx-auto z-[50] relative\">\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"email\"\r\n placeholder=\"From\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n required\r\n />\r\n </div>\r\n <div className=\"mb-3\">\r\n <div className=\"flex items-center gap-2\">\r\n <input\r\n type=\"email\"\r\n value={to}\r\n onChange={(e) => setTo?.(e.target.value)}\r\n placeholder=\"To\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n required\r\n />\r\n {!showCc && (\r\n <button\r\n onClick={() => setShowCc?.(true)}\r\n className=\"px-3 py-1 border rounded-md text-sm hover:bg-gray-100 bg-[#E9E9E9] text-[#383838]\"\r\n >\r\n Cc\r\n </button>\r\n )}\r\n {!showBcc && (\r\n <button\r\n onClick={() => setShowBcc?.(true)}\r\n className=\"px-3 py-1 border rounded-md text-sm hover:bg-gray-100 bg-[#E9E9E9] text-[#383838]\"\r\n >\r\n Bcc\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n {showCc && (\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"text\"\r\n value={cc}\r\n onChange={(e) => setCc?.(e.target.value)}\r\n placeholder=\"Cc\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n />\r\n </div>\r\n )}\r\n {showBcc && (\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"text\"\r\n value={bcc}\r\n onChange={(e) => setBcc?.(e.target.value)}\r\n placeholder=\"Bcc\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Subject */}\r\n <div className=\"mb-3\">\r\n <input\r\n type=\"text\"\r\n value={subject}\r\n onChange={(e) => setSubject?.(e.target.value)}\r\n placeholder=\"Subject\"\r\n className=\"w-full flex-1 border-2 rounded-md h-[40px] px-3 focus:outline-none border-[#E9E9E9] text-[#383838]\"\r\n />\r\n </div>\r\n <div className=\"mb-4\">\r\n <TinyMceEditor value={body} onChange={setBody} />\r\n </div>\r\n <div className=\"flex justify-end gap-2\">\r\n <button className=\"px-4 py-2 rounded-md text-gray-600 hover:bg-gray-100\">\r\n Discard\r\n </button>\r\n <button className=\"px-4 py-2 rounded-md border text-[#12715B] border-[#12715B]\">\r\n Reset\r\n </button>\r\n <button className=\"px-4 py-2 rounded-md bg-[#12715B] text-white\">\r\n Send\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}","import { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAiC;AAEjC,kCAAwB;AACxB,+BAAgC;;;ACHhC,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;AAEO,SAAS,YAAY,MAAc;AACxC,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,EAAE,OAAO,CAAC;AAAA,EAC1B;AACA,SAAO,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,EAAE,OAAO,CAAC;AAC/C;;;ACdA,uBAAqB;AAOrB,IAAM,SAAgC,CAAC,EAAE,UAAU,UAAU,MAAM;AAEjE,QAAM,SAAS,aAAa,SAAS;AAErC,SAAO,iBAAAA,QAAS,aAAa,UAAU,MAAM;AAC/C;AAEA,IAAO,iBAAQ;;;AF8DD;AA1DC,SAAR,MAAuB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,QAAQ,CAAC;AACX,GAAe;AACb,8BAAU,MAAM;AACd,QAAI,UAAU,aAAa;AACzB,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,8BAAU,MAAM;AACd,UAAM,eAAe,CAAC,MAAqB;AACzC,UAAI,EAAE,QAAQ,UAAU;AACtB,uBAAe;AAAA,MACjB;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,eAAS,iBAAiB,WAAW,YAAY;AACjD,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,YAAY;AACpD,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE,4CAAC,kBACC,sDAAC,SAAI,WAAU,mEACb,sDAAC,SAAI,WAAU,oEACb;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,GAAG,YAAY,IAAI,CAAC;AAAA,MACtB;AAAA,MACA;AAAA,MAGE;AAAA,kBAAS,oBACT,6CAAC,SAAI,WAAU,4FACZ;AAAA,mBACC,4CAAC,QAAG,WAAU,uDACX,iBACH;AAAA,UAED,mBACC;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,WAAU;AAAA,cACV,cAAW;AAAA,cAEX,sDAAC,4CAAgB,MAAM,qCAAS,WAAU,WAAU;AAAA;AAAA,UACtD;AAAA,WAEJ;AAAA,QAEF,4CAAC,SAAI,WAAU,kEACZ,UACH;AAAA;AAAA;AAAA,EACF,GACF,GACF,GACF;AAEJ;;;AGjGI,IAAAC,sBAAA;AAJJ,IAAM,OAAO,CAAC;AAAA,EACZ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAO,GAAG;AACjC,MAAoB;AAClB,SACE,6CAAC,SAAK,GAAG,OAAO,WAAsB,OACnC,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACNX,IAAAC,sBAAA;AAJJ,IAAM,OAAO,CAAC;AAAA,EACZ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAO,GAAG;AACjC,MAAoB;AAClB,SACE,6CAAC,SAAK,GAAG,OAAO,WAAsB,OACnC,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACNX,IAAAC,sBAAA;AAJJ,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EAAU;AAAA,EAAW;AAAA,EAAO,GAAG;AACjC,MAAoB;AAClB,SACE,6CAAC,SAAK,GAAG,OAAO,WAAsB,OACnC,UACH;AAEJ;AAEA,IAAO,oBAAQ;;;ACZf,IAAAC,gBAAgC;AAgB1B,IAAAC,sBAAA;AAZN,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EAAU,OAAO;AAAA,EAAa;AAAA,EAAO;AACvC,MAAsB;AAEpB,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAE1C,QAAM,mBAAmB,MAAM;AAC7B,cAAU,UAAQ,CAAC,IAAI;AAAA,EACzB;AAEA,SACE,8CAAC,SAAI,WAAW,2CAA2C,SAAS,eAAe,OAAO,EAAE,iBAAiB,OAAO,gBAAgB,GAClI;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,MAAK;AAAA,QAEL;AAAA,uDAAC,UAAK,WAAU,2BAA2B,gBAAK;AAAA,UAChD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,OAAO,OAAO,MAAM;AAAA,cAE5B,mBAAS,WAAM;AAAA;AAAA,UAClB;AAAA;AAAA;AAAA,IACF;AAAA,IACA,6CAAC,SAAI,WAAW,kDAAkD,SAAS,iBAAiB,6BAA6B,IACtH,UACH;AAAA,KACF;AAEJ;AAEA,IAAO,oBAAQ;;;AC9BX,IAAAC,sBAAA;AAJJ,IAAM,OAAO,CAAC;AAAA,EACZ;AACF,MAAoB;AAClB,SACE,6EACG,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACRX,IAAAC,sBAAA;AAFJ,IAAM,iBAAiB,CAAC,EAAE,UAAU,OAAO,UAAU,MAAoB;AACvE,SACE,6CAAC,SAAI,WAAsB,OACxB,UACH;AAEJ;AAEA,IAAO,yBAAQ;;;ACDX,IAAAC,sBAAA;AALW,SAAR,QAAyB;AAAA,EAC9B;AAAA,EAAU;AAAA,EAAO;AAAA,EAAW;AAAA,EAAW;AACzC,GAAiB;AAEf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,YAAY,SAAS,IAAI,cAAc,QAAQ,YAAY,QAAQ;AAAA,MAC9E;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACdA,IAAAC,gBAA6C;AAwBzC,IAAAC,sBAAA;AAtBW,SAAR,kBAAmC;AAAA,EACxC;AAAA,EAAU;AAAA,EAAO;AAAA,EAAW;AAAA,EAAM;AAAA,EAAW;AAC/C,GAAkB;AAChB,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,+BAAU,MAAM;AAEd,QAAI,QAAQ,KAAK,SAAS,KAAK,CAAC,aAAa,eAAe,CAAC,SAAS;AACpE,kBAAY,KAAK,CAAC,GAAG,KAAK;AAC1B,iBAAW,IAAI;AAAA,IACjB;AAAA,EAEF,GAAG,CAAC,MAAM,WAAW,aAAa,OAAO,CAAC;AAE1C,QAAM,mBAAe;AAAA,IACnB,MAAM,MAAM,QAAQ,IAAI,IACpB,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,eAAe,MAAM,EAAE,eAAe,EAAE,IACpE,CAAC;AAAA,IACL,CAAC,IAAI;AAAA,EACP;AAEA,SACE,8CAAC,SAAI,WAAsB,OACzB;AAAA,iDAAC,SAAI,WAAU,uCACZ,uBAAa,IAAI,CAAC,QACjB;AAAA,MAAC;AAAA;AAAA,QAEC,WAAS,IAAI;AAAA,QACb,WAAW,6EAA6E,cAAc,IAAI,QACtG,4BACA,cAAc;AAAA,QAClB,SAAS,MAAM,eAAe,YAAY,IAAI,KAAK;AAAA,QAElD,cAAI,QAAQ;AAAA;AAAA,MAPR,IAAI;AAAA,IAQX,CACD,GACH;AAAA,IACC;AAAA,KACH;AAEJ;;;AC5CA,IAAAC,gBAAkB;AA8BZ,IAAAC,uBAAA;AAjBN,SAAS,SAAY;AAAA,EACnB,OAAO,CAAC;AAAA,EACR;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAChB,GAAqB;AACnB,QAAM,OAAO,cAAAC,QAAM;AAAA,IACjB,MAAO,OAAO,UAAU,WAAW,KAAK,MAAM,GAAG,KAAK,IAAI;AAAA,IAC1D,CAAC,MAAM,KAAK;AAAA,EACd;AAEA,MAAI,SAAS;AACX,WACE,8CAAC,SAAI,WAAuB,uBAAY;AAAA,EAE5C;AAEA,MAAI,CAAC,KAAK,QAAQ;AAChB,WAAO,gBAAgB,+EAAG,yBAAc,IACtC,8CAAC,SAAI,WAAsB,kCAAoB;AAAA,EAEnD;AAEA,QAAM,UAAU,KAAK,IAAI,CAAC,MAAM,MAC9B,8CAAC,cAAAA,QAAM,UAAN,EAAwB,iBAAO,MAAM,GAAG,IAAI,KAAxB,CAA0B,CAChD;AAED,SAAO,UACL,+EAAG,kBAAQ,OAAO,GAAE,IAEpB,8CAAC,SAAI,WAAuB,mBAAQ;AAExC;AAEA,IAAO,mBAAQ,cAAAA,QAAM,KAAK,QAAQ;;;AClDlC,wBAAqB;AACrB,sCAAuC;AAgDnC,IAAAC,uBAAA;AA5CJ,IAAM,qBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OACE;AAAA,QACF,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,OAAO;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAGK;AACH,QAAM,OAAO,UAAU,yBAAO;AAE9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,MACzD,GAAG;AAAA;AAAA,EACN;AAEJ;;;AC3CI,IAAAC,uBAAA;AAVJ,IAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,GAAG;AACL,MAAmB;AAEjB,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,UAAU,MAAM,YAAY;AAAA,MAE3B,oBAAU,cAAc;AAAA;AAAA,EAC3B;AAEJ;AAEA,IAAO,iBAAQ;;;ACvBf,IAAAC,gBAAiC;AAEjC,wBAA0B;;;ACH1B,mBAAkB;AAClB,IAAAC,gBAAyB;AAkBlB,SAAS,eAAe,SAAmD;AAEhF,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAc,IAAI;AAC5C,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAc,IAAI;AAG1C,QAAM,aAAa,OAAO,MAAY,SAA8B,CAAC,MAAM;AACzE,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AACF,YAAM,WAAW,IAAI,SAAS;AAC9B,eAAS,OAAO,QAAQ,IAAI;AAC5B,aAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,iBAAS,OAAO,KAAK,KAAe;AAAA,MACtC,CAAC;AAED,YAAM,cAAc,QAAQ,iBAAiB,aAAAC;AAC7C,YAAM,SAAS,QAAQ,UAAU;AAEjC,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,MAAM,IAAI,UAAU;AAAA,QAC3D,iBAAiB;AAAA,MACnB,CAAC;AAED,cAAQ,MAAM;AACd,UAAI,OAAO,WAAW,KAAK;AACzB,iBAAS,YAAY,OAAO,IAAI;AAAA,MAClC,OAAO;AACL,cAAM,MAAM,IAAI,MAAM,4BAA4B,OAAO,MAAM,EAAE;AACjE,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IAET,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,eAAS,UAAU,GAAG;AACtB,YAAM;AAAA,IACR,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,eAAe,OAAO,QAAgB,KAAa,cAAuB;AAC9E,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AAEF,YAAM,cAAc,QAAQ,iBAAiB,aAAAA;AAC7C,YAAM,SAAS;AAEf,YAAM,SAAS,MAAM,YAAY,IAAI,GAAG,MAAM,WAAW,mBAAmB,MAAM,CAAC,QAAQ,mBAAmB,GAAG,CAAC,GAAG,YAAY,cAAc,SAAS,KAAK,EAAE,IAAI;AAAA,QACjK,iBAAiB;AAAA,MACnB,CAAC;AAED,cAAQ,MAAM;AACd,UAAI,OAAO,WAAW,KAAK;AACzB,iBAAS,YAAY,OAAO,IAAI;AAAA,MAClC,OAAO;AACL,cAAM,MAAM,IAAI,MAAM,4BAA4B,OAAO,MAAM,EAAE;AACjE,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,eAAS,UAAU,GAAG;AACtB,YAAM;AAAA,IACR,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,YAAY,OAAO,QAAgB,QAAgB;AACvD,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AACF,YAAM,cAAc,QAAQ,iBAAiB,aAAAA;AAC7C,YAAM,SAAS;AAEf,YAAM,SAAS,MAAM,YAAY,IAAI,GAAG,MAAM,WAAW,mBAAmB,MAAM,CAAC,QAAQ,mBAAmB,GAAG,CAAC,IAAI;AAAA,QACpH,iBAAiB;AAAA,MACnB,CAAC;AAED,cAAQ,MAAM;AACd,UAAI,OAAO,WAAW,KAAK;AACzB,iBAAS,YAAY,OAAO,IAAI;AAAA,MAClC,OAAO;AACL,cAAM,MAAM,IAAI,MAAM,4BAA4B,OAAO,MAAM,EAAE;AACjE,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,eAAS,UAAU,GAAG;AACtB,YAAM;AAAA,IACR,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADpEQ,IAAAC,uBAAA;AAnDR,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAkB;AAEhB,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AAEA,QAAM,cAAc;AACpB,QAAM,MAAM,YAAY;AACxB,QAAM,eAAW,sBAAgC,IAAI;AACrD,QAAM,aAAS,6BAAU;AACzB,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAE1C,QAAM,eAAe,MAAM;AACzB,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,QAAM,EAAE,WAAW,IAAI,eAAe;AAAA,IACpC,eAAe,MAAM;AAAA,IACrB;AAAA,IACA,WAAW,OAAO,WAAW;AAC3B,UAAI,CAAC,QAAQ,MAAM,OAAO,CAAC,MAAM,WAAW;AAC1C,kBAAU,KAAK;AACf;AAAA,MACF;AACA,YAAM,YAAY,EAAE,KAAK,OAAO,KAAK,OAAO,IAAI,UAAU,OAAO,KAAK,gBAAgB,GAAG,CAAC;AAC1F,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF,CAAC;AAED,QAAM,eAAe,OACnB,MACG;AACH,UAAM,OAAO,EAAE,OAAO,QAAQ,CAAC;AAC/B,QAAI,CAAC,KAAM;AACX,cAAU,IAAI;AACd,eAAW,MAAM;AAAA,MACf,KAAK,KAAK;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ;AACV,WACE,8CAAC,SAAI,WAAU,oCACb,wDAAC,SAAI,WAAU,kFAAiF,GAClG;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,MAAM,eAAe,eAAe;AAAA,MAC7C,MAAK;AAAA,MACL,WAAW,MAAM,eAAe,mBAAmB;AAAA,MAEnD;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YAAK,KAAK;AAAA,YAAS,WAAW;AAAA,YAAiB;AAAA;AAAA,QACtD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,MAAK;AAAA,YACL,QAAO;AAAA,YACP,WAAU;AAAA,YACV,UAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gBAAQ;;;AE5EX,IAAAC,uBAAA;AAPJ,IAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAoB;AAElB,SACE,8CAAC,SAAI,WAAsB,OACxB,UACH;AAEJ;AAEA,IAAO,gBAAQ;;;ACff,IAAAC,gBAAkB;AAKlB,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AACrB,QAAM,MAAM,WAAW;AAEvB,SAAO,cAAAC,QAAM;AAAA,IACX;AAAA,IACA;AAAA,MACE;AAAA,MACA,WAAW,GAAG,WAAW,qBAAqB;AAAA,MAC9C;AAAA,IACF;AAAA,IACA;AAAA,MACE,cAAAA,QAAM,cAAc,QAAQ;AAAA,QAC1B,KAAK;AAAA,QACL,WAAW;AAAA,QACX,yBAAyB,EAAE,QAAQ,eAAe,KAAK;AAAA,MACzD,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAO,qBAAQ;;;AC9Bf,0BAA6B;AAE7B,kBAAiB;AAaP,IAAAC,uBAAA;AAXV,IAAM,aAAa,CAAC,EAAE,OAAO,CAAC,GAAG,WAAW,MAAM,MAAuB;AACvE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,WAAW,GAAG,mDAAmD,SAAS;AAAA,MAC1E;AAAA,MAEC,eAAK,IAAI,CAAC,MAAmD,UAAkB;AAC9E,cAAM,SAAS,UAAU,KAAK,SAAS;AAEvC,eACE,+CAAC,SAAkB,WAAU,qBAC1B;AAAA,eAAK,OAAO,CAAC,SACZ;AAAA,YAAC,YAAAC;AAAA,YAAA;AAAA,cACC,MAAM,KAAK;AAAA,cACX,WAAU;AAAA,cAET,eAAK;AAAA;AAAA,UACR,IAEA,8CAAC,UAAK,WAAU,+BAA+B,eAAK,QAAO;AAAA,UAG5D,CAAC,UACA,8CAAC,oCAAa,WAAU,sCAAqC;AAAA,aAbvD,KAAK,EAef;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,qBAAQ;;;ACtCf,IAAAC,uBAA4B;AAC5B,IAAAC,eAAiB;;;ACCjB,4BAAuC;AACvC,IAAAC,uBAAwD;AAO/C,IAAAC,uBAAA;AAHT,SAAS,aAAa;AAAA,EACpB,GAAG;AACL,GAA4D;AAC1D,SAAO,8CAAuB,4BAAtB,EAA2B,aAAU,iBAAiB,GAAG,OAAO;AAC1E;AAUA,SAAS,oBAAoB;AAAA,EAC3B,GAAG;AACL,GAA+D;AAC7D,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACT,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA,aAAa;AAAA,EACb,GAAG;AACL,GAA+D;AAC7D,SACE,8CAAuB,8BAAtB,EACC;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ;AAUA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAGG;AACD,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAmFA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,GAAiE;AAC/D,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6BAA6B,SAAS;AAAA,MACnD,GAAG;AAAA;AAAA,EACN;AAEJ;AAkBA,SAAS,gBAAgB;AAAA,EACvB,GAAG;AACL,GAA2D;AACzD,SAAO,8CAAuB,2BAAtB,EAA0B,aAAU,qBAAqB,GAAG,OAAO;AAC7E;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAC,yCAAiB,WAAU,kBAAiB;AAAA;AAAA;AAAA,EAC/C;AAEJ;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AD3NM,IAAAC,uBAAA;AANS,SAAR,YAA6B,EAAE,OAAO,aAAa,WAAW,OAAO,CAAC,GAAG,kBAAkB,QAAQ,GAAqB;AAC7H,QAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC3C,QAAM,UAAU,OAAO,mBAAmB;AAE1C,SACE,+CAAC,SAAI,WAAW,uGAAuG,OAAO,EAAE,iBAAiB,QAAQ,GACvJ;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,0DAA0D,aAAa,EAAE;AAAA,QACpF,OAAO,EAAE,iBAAiB,QAAQ;AAAA,QAClC,SAAS,CAAC,MAAM,UAAU,CAAC;AAAA,QAE1B,yBAAe;AAAA;AAAA,IAClB;AAAA,IACA,+CAAC,gBACC;AAAA,oDAAC,uBAAoB,SAAO,MAC1B;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,cAAW;AAAA,UACX,OAAO,EAAE,iBAAiB,QAAQ;AAAA,UAElC,wDAAC,oCAAY,WAAU,WAAU;AAAA;AAAA,MACnC,GACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,WAAU;AAAA,UAET,eAAK,IAAI,CAAC,SACT;AAAA,YAAC;AAAA;AAAA,cACe,WAAU;AAAA,cAAa,UAAU,MAAM,mBAAmB;AAAA,gBACtE;AAAA,cACF,CAAC;AAAA,cAED,wDAAC,aAAAC,SAAA,EAAK,MAAM,KAAK,OAAO,KAAM,eAAK,QAAO;AAAA;AAAA,YAJrC,KAAK;AAAA,UAKZ,CACD;AAAA;AAAA,MACH;AAAA,OACF;AAAA,KACF;AAEJ;;;AEpDA,IAAAC,gBAA+D;AAG/D,iBAA4B;AAC5B,mBAA8B;AAC9B,iBAA4B;AAE5B,IAAAC,4BAAgC;AAChC,kBAA6B;AAoFvB,IAAAC,uBAAA;AA/CS,SAAR,KAAsB,OAAkB;AAC7C,QAAM;AAAA,IACJ,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAc,QAAQ,IAAI;AAEhE,iBAAe,WAAW,UAAkBC,SAAgB;AAE1D,UAAM,SAA8B;AAAA,MAClC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAEA,UAAM,cAAc,OAAOA,OAAM,KAAK;AACtC,WAAO,YAAY,QAAQ,KAAK;AAAA,EAClC;AAEA,+BAAU,MAAM;AACd,QAAI,QAAS,YAAY,iBAAkB,QAAQ;AACjD,iBAAW,MAAM,MAAM,EAAE,KAAK,CAAC,QAAQ,eAAe,GAAG,CAAC;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,SAAS,MAAM,MAAM,CAAC;AAG1B,MAAI,YAAY,UAAU;AACxB,UAAM,OAAQ,YAAoB,IAAI;AACtC,QAAI,CAAC,MAAM;AACT,cAAQ,KAAK,0BAA0B,IAAI,EAAE;AAC7C,aAAO;AAAA,IACT;AAEA,UAAM,cACJ,OAAO,aAAa,WAAW,WAAW,SAAS,UAAoB,EAAE,KAAK;AAEhF,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,WAAW;AAAA,UACT;AAAA,UACA,MAAM,UAAU,mBAAmB;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAa,QAAQ,SAAY;AAAA,QACjC,SAAS,MAAM,MAAM,UAAU;AAAA,QAC9B,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAGA,MAAI,YAAY,eAAe;AAC7B,QAAI,CAAC,YAAa,QAAO;AACzB,UAAM,YAAY,EAAE,GAAG,MAAM;AAC7B,WAAO,UAAU;AACjB,WAAO,UAAU;AACjB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,MAAM,OAAO,aAAa,WAAW,WAAW;AAAA,QAChD;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,UACT;AAAA,UACA,MAAM,UAAU,mBAAmB;AAAA,QACrC;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,GAAG;AAAA,QACL;AAAA,QACA,SAAS,MAAM,MAAM,UAAU;AAAA;AAAA,IACjC;AAAA,EAEJ;AAGA,MAAI,YAAY,QAAQ,YAAY,UAAU;AAC5C,UAAM,YACJ,OAAO,aAAa,WAAW,EAAE,UAAU,SAAS,IAAI,CAAC;AAE3D,UAAM,MAAM;AAAA,MACV,GAAG,MAAM,OAAO,IAAI;AAAA,MACpB,OAAO,YAAY;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,aAAa,UAAU;AAAA,MACvB;AAAA,IACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO,EAAE,GAAG,WAAW,GAAG,MAAM;AAAA,QAChC;AAAA,QACA,eAAa,QAAQ,SAAY;AAAA,QACjC,SAAS,MAAM,MAAM,UAAU;AAAA,QAC9B,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,UAAQ,KAAK,qBAAqB,OAAO;AACzC,SAAO;AACT;;;ACjKA,IAAAC,gBAA0B;;;ACKtB,IAAAC,uBAAA;AAFJ,SAAS,MAAM,EAAE,WAAW,MAAM,GAAG,MAAM,GAAkC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ADmBI,IAAAC,uBAAA;AA/BJ,IAAM,YAAY,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAsB;AAEpE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,+BAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,MAAM,MAAM;AAAA,QACZ,IAAI,MAAM,QAAQ;AAAA,QAClB,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,oBAAQ;;;AE9Df,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA/BJ,IAAM,cAAc,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAwB;AAExE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,MAAM,QAAQ,EAAE;AAAA,EACtC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,sBAAQ;;;AClEf,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA9BJ,IAAM,aAAa,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAuB;AACtE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,MAAM,MAAM;AAAA,QACZ,IAAI,MAAM,QAAQ;AAAA,QAClB,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,qBAAQ;;;AClEf,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA/BJ,IAAM,gBAAgB,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA0B;AAE5E,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,wBAAQ;;;AClEf,IAAAC,iBAA0B;;;ACKtB,IAAAC,uBAAA;AAFJ,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAqC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ADcI,IAAAC,uBAAA;AAtBJ,IAAMC,YAAW,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAqB;AAClE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA8C;AAClE,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,SACE,gFACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,QACJ,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM,SAAS;AAAA,QACtB,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQA;;;AEtDf,IAAAC,iBAA0B;AAmCtB,IAAAC,uBAAA;AA9BJ,IAAM,WAAW,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAqB;AAClE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,mDAAC,SAAI,WAAU,4CACb;AAAA,oDAAC,SAAI,WAAU,uJAAsJ,sBAErK;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,MAAM,MAAM,aAAa;AAAA,UACzB,MAAM,MAAM;AAAA,UACZ,OAAO,YAAY,MAAM,KAAK;AAAA,UAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,UAE1D,OAAO;AAAA,YACL,GAAG;AAAA,YACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,UACvD;AAAA,UACA,cAAc,iBAAiB,OAAO;AAAA,UACtC;AAAA,UACA,UAAU;AAAA,UACV,UAAU,cAAc,CAAC;AAAA,UACzB,UAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQ;;;ACnEf,IAAAC,iBAA0B;;;ACA1B,wBAAmC;AACnC,IAAAC,uBAA0B;AAqBlB,IAAAC,uBAAA;AAjBR,SAAS,SAAS;AAAA,EAChB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE;AAAA,IAAmB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAmB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,wDAAC,kCAAU,WAAU,YAAW;AAAA;AAAA,MAClC;AAAA;AAAA,EACF;AAEJ;;;AC1BA,qBAAgC;AAS5B,IAAAC,uBAAA;AALJ,SAASC,OAAM;AAAA,EACb;AAAA,EACA,GAAG;AACL,GAAqD;AACnD,SACE;AAAA,IAAgB;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AFeI,IAAAC,uBAAA;AA5BJ,IAAM,gBAAgB,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA0B;AAC5E,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,QAAM,OAAO,MAAM,OAAO,MAAM,OAAO;AAEvC,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,OAAO,UAAU,WAAW;AAC9B,aAAO;AAAA,IACT;AACA,QAAI,UAAU,UAAU,UAAU,KAAK;AACrC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,gCAAU,MAAM;AAEd,QAAI,MAAM,OAAO;AACf,mBAAa,YAAY,MAAM,KAAK,CAAC;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAmB;AACvC,UAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EAC3C;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB,yDAAC,SAAI,WAAU,+BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,SAAS,YAAY,MAAM,KAAK;AAAA,UAChC,iBAAiB;AAAA,UACjB,UAAU,CAAC,cAAc;AAAA;AAAA,MAC3B;AAAA,MACA,8CAACC,QAAA,EAAM,SAAS,MAAM,QAAQ,YAAa,gBAAK;AAAA,OAClD,GACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQ;;;AGpDf,IAAAC,iBAA0B;;;ACA1B,0BAAqC;AACrC,IAAAC,uBAA2B;AASvB,IAAAC,uBAAA;AALJ,SAASC,YAAW;AAAA,EAClB;AAAA,EACA,GAAG;AACL,GAA0D;AACxD,SACE;AAAA,IAAqB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,cAAc,SAAS;AAAA,MACpC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,GAAG;AACL,GAA0D;AACxD,SACE;AAAA,IAAqB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAqB;AAAA,QAApB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,wDAAC,mCAAW,WAAU,mFAAkF;AAAA;AAAA,MAC1G;AAAA;AAAA,EACF;AAEJ;;;ADEI,IAAAC,uBAAA;AA/BJ,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO,CAAC;AAAA,EACR;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AACrB,QAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC3C,QAAM,WAAqB,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAe;AAAA,IACzD,OAAO,KAAK,WAAW,OAAO;AAAA,IAC9B,OAAO,KAAK,aAAa,OAAO;AAAA,EAClC,EAAE;AAEF,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAkB;AACtC,eAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EACrC;AAGA,QAAM,wBAAwB,OAAO,iBAAiB,WAAW,eAAe,WAAc,QAAQ,CAAC,GAAG;AAE1G,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,cAAc;AAAA,QACd,eAAe;AAAA,QAGb;AAAA,kBAAQ,WAAW,KACjB,8CAAC,SAAI,WAAU,yBAAwB,kCAAoB;AAAA,UAG9D,QAAQ,IAAI,CAAC,SACZ,+CAAC,SAAI,WAAU,+BACb;AAAA,0DAAC,kBAAe,OAAO,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,IAAI;AAAA,YAC9D,8CAACC,QAAA,EAAM,SAAS,SAAS,KAAK,KAAK,IAAK,eAAK,OAAM;AAAA,eAFH,KAAK,KAGvD,CACD;AAAA;AAAA;AAAA,IACH,GACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,qBAAQ;;;AElEf,IAAAC,iBAAyD;AAmJjD,IAAAC,uBAAA;AA1IO,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA;AAAA,EACA,OAAO,CAAC;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4B;AAC1B,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAmB,CAAC,CAAC;AACnD,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,IAAI;AAC3C,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AAEpD,QAAM,kBAAc,uBAAuB,IAAI;AAE/C,QAAM,iBAAiB,CAAC,QAAuB;AAC7C,QAAI,CAAC,IAAK,QAAO,CAAC;AAClB,QAAI,MAAM,QAAQ,GAAG,EAAG,QAAO;AAC/B,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,IAAI,SAAS,GAAG,EAAG,QAAO,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAChE,UAAI,IAAI,SAAS,GAAG,EAAG,QAAO,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAChE,aAAO,CAAC,IAAI,KAAK,CAAC;AAAA,IACpB;AACA,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAW,eAAe,KAAK;AAErC,QAAM,gBAAgB,CAAC,QAAkB;AACvC,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO,IAAI,KAAK,GAAG;AAAA,MACrB,KAAK;AACH,eAAO,IAAI,KAAK,GAAG;AAAA,MACrB;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,mBAAe,4BAAY,YAAY;AAC3C,QAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,UAAM,SAAS,kBAAkB,MAAM,OAAO,OAAO,GAAG;AACxD,UAAM,MAAM,MAAM,OAAO,IAAI,QAAQ;AAAA,MACnC,QAAQ,EAAE,MAAM,OAAO,SAAS;AAAA,MAChC,iBAAiB;AAAA,IACnB,CAAC;AACD,QAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,aAAO,IAAI,KAAK;AAAA,IAClB;AACA,WAAO,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC;AAAA,EAC/C,GAAG,CAAC,QAAQ,eAAe,MAAM,QAAQ,CAAC;AAE1C,QAAM,cAAU;AAAA,IACd,CAAC,UAAiB;AAChB,UAAI,MAAM,QAAQ,KAAK,MAAM,MAAO,QAAO,CAAC;AAC5C,cAAQ,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,QAClC,OAAO,KAAK,OAAO;AAAA,QACnB,OAAO,KAAK,SAAS;AAAA,MACvB,EAAE;AAAA,IACJ;AAAA,IACA,CAAC,SAAS,SAAS;AAAA,EACrB;AAEA,QAAM,eAAW,4BAAY,YAAY;AACvC,QAAI,WAAW,MAAO;AACtB,QAAI,YAAa;AAEjB,mBAAe,IAAI;AAEnB,QAAI;AACF,YAAM,WAAW,MAAM,aAAa;AACpC,YAAM,SAAS,QAAQ,QAAQ;AAE/B,iBAAW,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC,UAAI,SAAS,SAAS,UAAU;AAC9B,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF,UAAE;AACA,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,QAAQ,aAAa,cAAc,SAAS,QAAQ,CAAC;AAEzD,gCAAU,MAAM;AACd,QAAI,WAAW,OAAO;AACpB,iBAAW,CAAC,CAAC;AACb,cAAQ,CAAC;AACT,iBAAW,IAAI;AAAA,IACjB,OAAO;AACL,iBAAW,QAAQ,IAAI,CAAC;AACxB,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC;AAEjC,gCAAU,MAAM;AACd,QAAI,WAAW,MAAO,UAAS;AAAA,EACjC,GAAG,CAAC,MAAM,MAAM,CAAC;AAEjB,gCAAU,MAAM;AACd,QAAI,WAAW,MAAO;AACtB,QAAI,CAAC,WAAW,YAAa;AAE7B,UAAM,WAAW,IAAI,qBAAqB,CAAC,YAAY;AACrD,UAAI,QAAQ,CAAC,EAAE,gBAAgB;AAC7B,gBAAQ,CAAC,SAAS,OAAO,CAAC;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,QAAI,YAAY,QAAS,UAAS,QAAQ,YAAY,OAAO;AAC7D,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,QAAQ,SAAS,WAAW,CAAC;AAEjC,QAAM,SAAS,CAAC,QAAgB;AAC9B,QAAI,MAAM,cAAc,MAAM,WAAY;AAE1C,UAAM,UAAU,SAAS,SAAS,GAAG,IACjC,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,IAChC,CAAC,GAAG,UAAU,GAAG;AAErB,eAAW,cAAc,OAAO,GAAG,MAAM,QAAQ,EAAE;AAEnD,qBAAiB;AAAA,MACf,QAAQ,OAAO,CAAC,QAAQ,CAAC,QAAQ,SAAS,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;AAAA,IAC9E,GAAG,MAAM,QAAQ,EAAE;AAAA,EACrB;AAEA,SACE,+CAAC,SAAI,WAAW,GAAG,8CAA8C,SAAS,GAAG,OAC1E;AAAA,YAAQ,WAAW,KAAK,CAAC,eAAe,CAAC,WACxC,8CAAC,SAAI,WAAU,0CAAyC,mCAAqB;AAAA,IAE9E,QAAQ,IAAI,CAAC,KAAK,UAAU;AAC3B,YAAM,WAAW,CAAC,CAAC,MAAM;AACzB,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAW;AAAA,YACT;AAAA,YACA,YAAY;AAAA,UACd;AAAA,UAEA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;AAAA,gBACpD,SAAS,SAAS,SAAS,IAAI,KAAK;AAAA,gBACpC,iBAAiB,MAAM,OAAO,IAAI,KAAK;AAAA,gBACvC,UAAU,MAAM,cAAc,MAAM;AAAA,gBACpC,WAAW;AAAA,kBACT,YAAY;AAAA,gBACd;AAAA;AAAA,YACF;AAAA,YACA;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,IAAI,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;AAAA,gBACpD,WAAW,GAAG,YAAY,cAAc;AAAA,gBACxC,SAAS,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;AAAA,gBACzD,cAAI;AAAA;AAAA,YAAM;AAAA;AAAA;AAAA,QAnBP,GAAG,KAAK,IAAI,IAAI,KAAK;AAAA,MAoB5B;AAAA,IAEJ,CAAC;AAAA,IAEA,WAAW,SAAS,WAAW,8CAAC,SAAI,KAAK,aAAa,WAAU,OAAM;AAAA,KAErE,eAAe,YACf,8CAAC,SAAI,WAAU,0CAAyC,2BAAQ;AAAA,IAGjE,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;;;AC7LA,IAAAC,iBAA0B;;;ACC1B,IAAAC,iBAAgC;AAEhC,2BAAuB;AAqCnB,IAAAC,uBAAA;AAnCW,SAAR,SAA0B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,gBAAY,uBAAY,IAAI;AAElC,WAAS,YAAY,MAAsB;AACzC,UAAM,cAAc,KAAK,KAAK;AAC9B,QAAI,CAAC,YAAa,QAAO;AACzB,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,YAAY;AAChB,UAAM,aAAa,IAAI;AACvB,QAAI,IAAI,sBAAsB,KAAK,YAAY,YAAY,KAAK;AAC9D,aAAO,WAAW;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,uBAAmB,wBAAQ,MAAM;AACrC,QAAI,UAAU;AACd,QAAI,WAAW;AACb,gBAAU;AAAA,IAIZ;AACA,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,CAAC;AAEd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ,QAAQ,IAAI;AAAA,MACpB,kBAAkB,QAAQ,IAAI;AAAA,MAC9B,QAAQ,CAAC,MAAM,WAAY,UAAU,UAAU;AAAA,MAC/C;AAAA,MACA,YAAW;AAAA,MACX,MAAM;AAAA,QACJ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,mBAAmB;AAAA,QACnB,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAKjB;AAAA,MACA,gBAAgB,CAAC,YAAY,WAAW,YAAY,OAAO,CAAC;AAAA;AAAA,EAC9D;AAEJ;;;AD7DI,IAAAC,uBAAA;AAbW,SAAR,SAA0B,EAAE,WAAW,OAAO,GAAG,MAAM,GAAuB;AACnF,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,YAAoB;AACxC,UAAM,WAAW,SAAS,OAAO,QAAQ,EAAE;AAAA,EAC7C;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,MAE1D,OAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,MACvD;AAAA,MAEA;AAAA,sDAAC,YAAc,UAAU,cAAc,OAAO,MAAM,SAAS,IAAI,WAAW,MAAM;AAAA,QACjF,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA;AAAA;AAAA,EAEjE;AAEJ;;;AEjCA,IAAAC,iBAA0B;;;ACA1B,sBAAiC;AACjC,IAAAC,uBAA0D;AAOjD,IAAAC,uBAAA;AAHT,SAAS,OAAO;AAAA,EACd,GAAG;AACL,GAAsD;AACpD,SAAO,8CAAiB,sBAAhB,EAAqB,aAAU,UAAU,GAAG,OAAO;AAC7D;AAQA,SAAS,YAAY;AAAA,EACnB,GAAG;AACL,GAAuD;AACrD,SAAO,8CAAiB,uBAAhB,EAAsB,aAAU,gBAAgB,GAAG,OAAO;AACpE;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAEG;AACD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAiB,sBAAhB,EAAqB,SAAO,MAC3B,wDAAC,wCAAgB,WAAU,qBAAoB,GACjD;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,GAAG;AACL,GAAyD;AACvD,SACE,8CAAiB,wBAAhB,EACC;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,aAAa,YACX;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,sDAAC,wBAAqB;AAAA,QACtB;AAAA,UAAiB;AAAA,UAAhB;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,aAAa,YACX;AAAA,YACJ;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA,8CAAC,0BAAuB;AAAA;AAAA;AAAA,EAC1B,GACF;AAEJ;AAeA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsD;AACpD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,sDAAC,UAAK,WAAU,8DACd,wDAAiB,+BAAhB,EACC,wDAAC,kCAAU,WAAU,UAAS,GAChC,GACF;AAAA,QACA,8CAAiB,0BAAhB,EAA0B,UAAS;AAAA;AAAA;AAAA,EACtC;AAEJ;AAeA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA,GAAG;AACL,GAAgE;AAC9D,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,wDAAC,sCAAc,WAAU,UAAS;AAAA;AAAA,EACpC;AAEJ;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,wDAAC,wCAAgB,WAAU,UAAS;AAAA;AAAA,EACtC;AAEJ;;;ACvKA,IAAAC,iBAAqD;AAErD,IAAAC,uBAA4B;;;ACJ5B,IAAAC,iBAAyD;AAEzD,IAAAC,gBAAkB;AAiCX,SAAS,gBAAgB,QAAgD;AAC9E,QAAM,CAAC,SAAS,UAAU,QAAI,yBAA+B,CAAC,CAAC;AAC/D,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,IAAI;AAC3C,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,QAAM,oBAAgB,uBAA8B,IAAI;AACxD,QAAM,iBAAa,uBAAc,CAAC,CAAC;AACnC,QAAM,gBAAY,uBAAO,MAAM;AAE/B,QAAM,YAAY,OAAO,YAAY;AAErC,gCAAU,MAAM;AACd,eAAW,CAAC,CAAC;AACb,YAAQ,CAAC;AACT,eAAW,IAAI;AAAA,EACjB,GAAG,CAAC,OAAO,MAAM,CAAC;AAElB,QAAM,gBAAgB,CAAC,UAAgC;AACrD,UAAM,OAAO,oBAAI,IAAI;AACrB,WAAO,MAAM,OAAO,CAAC,SAAS;AAC5B,UAAI,KAAK,IAAI,KAAK,KAAK,EAAG,QAAO;AACjC,WAAK,IAAI,KAAK,KAAK;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,gCAAU,MAAM;AACd,cAAU,UAAU;AAAA,EACtB,GAAG,CAAC,MAAM,CAAC;AAEX,WAASC,gBAAe,KAAU,MAAc;AAC9C,QAAI,CAAC,OAAO,CAAC,KAAM,QAAO;AAC1B,UAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,WAAO,MAAM,OAAO,CAAC,KAAK,QAAQ,MAAM,GAAG,GAAG,GAAG;AAAA,EACnD;AAGA,QAAM,yBAAqB,4BAAY,CAAC,SAAsC;AAC5E,QAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC;AAC3C,UAAM,MAAM,UAAU;AAEtB,WAAO,KAAK,IAAI,UAAQ;AACtB,YAAM,QAAQA,gBAAe,MAAM,IAAI,OAAO,KAAK,KAAK,MAAM;AAC9D,UAAI,QAAa;AAEjB,UAAI,IAAI,WAAW;AACjB,gBAAQA,gBAAe,MAAM,IAAI,SAAS,KAAK,KAAK,QAAQ,KAAK,SAAS,KAAK,cAAc;AAAA,MAC/F;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,WAAS,2BAA2B,QAAgB,eAAwB;AAC1E,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,MACA,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAAA,IAC3D;AAEA,UAAM,UAA+B,CAAC;AACtC,QAAI,WAAW;AACf,UAAM,UAAU,OAAO,SAAS,OAAO;AAGvC,WAAO,aAAa,QAAQ,CAAC,OAAO,QAAQ;AAC1C,YAAM,UAAU,UAAU,MAAM,UAAU,UAAa,UAAU;AAEjE,UAAI,SAAS;AACX,mBAAW;AAGX,YAAI,cAAe;AAGnB;AAAA,MACF;AAEA,cAAQ,GAAG,IAAI;AAAA,IACjB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA,aAAa,iBAAiB;AAAA,MAC9B,QAAQ;AAAA,IACV;AAAA,EACF;AAGA,QAAM,mBAAe,4BAAY,OAAO,SAAiB,SAAiB;AACxE,QAAI,CAAC,UAAU,QAAQ,OAAQ,QAAO,CAAC;AACvC,UAAM,QAAQ;AACd,UAAM,SAAc,EAAE,MAAM,SAAS,MAAM;AAC3C,QAAI,KAAM,QAAO,UAAU,QAAQ,YAAY,GAAG,UAAU,QAAQ,SAAS,YAAY,eAAe,IAAI;AAE5G,UAAM,EAAE,SAAS,aAAa,QAAQ,UAAU,IAAI;AAAA,MAClD,UAAU,QAAQ;AAAA,MAClB,CAAC,CAAC,UAAU,QAAQ;AAAA,IACtB;AAEA,QAAI,aAAa;AACf,iBAAW,KAAK;AAChB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,cAAc,EAAE,GAAG,WAAW,GAAG,OAAO;AAE9C,UAAM,cAAc,UAAU,QAAQ,iBAAiB,cAAAC;AACvD,UAAM,MAAM,MAAM,YAAY,IAAI,SAAS;AAAA,MACzC,QAAQ;AAAA,MACR,iBAAiB;AAAA,IACnB,CAAC;AACD,QAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,YAAM,OAAO,IAAI,KAAK;AACtB,aAAO,mBAAmB,IAAI;AAAA,IAChC;AACA,WAAO,CAAC;AAAA,EACV,GAAG,CAAC,WAAW,kBAAkB,CAAC;AAGlC,QAAM,eAAW,4BAAY,OAAO,SAAiB,SAAiB;AACpE,UAAM,MAAM,UAAU;AACtB,QAAI,CAAC,IAAI,QAAS;AAClB,eAAW,IAAI;AAEf,QAAI;AACF,UAAI,cAAoC,CAAC;AAEzC,UAAI,IAAI,eAAe,OAAO;AAC5B,sBAAc,MAAM,aAAa,SAAS,IAAI;AAE9C,mBAAW,YAAY,WAAW,SAAS;AAAA,MAC7C,OAAO;AAEL,cAAM,UAAU,WAAW,WAAW,CAAC;AACvC,YAAI,WAAW;AACf,YAAI,MAAM;AACR,gBAAM,YAAY,KAAK,YAAY;AACnC,qBAAW,QAAQ,OAAO,UAAQ;AAChC,kBAAM,QAAQ,OAAO,KAAK,IAAI,SAAS,KAAK,KAAK,QAAQ,KAAK,SAAS,EAAE,EAAE,YAAY;AACvF,kBAAM,QAAQ,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,MAAM,EAAE,EAAE,YAAY;AACrE,mBAAO,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,SAAS;AAAA,UAC9D,CAAC;AAAA,QACH;AACA,cAAM,SAAS,UAAU,KAAK;AAC9B,cAAM,MAAM,QAAQ;AACpB,sBAAc,mBAAmB,SAAS,MAAM,OAAO,GAAG,CAAC;AAC3D,mBAAW,MAAM,SAAS,MAAM;AAAA,MAClC;AAEA,iBAAW,UAAQ;AACjB,cAAM,SAAS,YAAY,IACvB,cACA,CAAC,GAAG,MAAM,GAAG,WAAW;AAE5B,eAAO,cAAc,MAAM;AAAA,MAC7B,CAAC;AACD,cAAQ,OAAO;AAAA,IACjB,SAAS,KAAK;AACZ,cAAQ,MAAM,0CAAqC,GAAG;AACtD,iBAAW,KAAK;AAAA,IAClB,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,cAAc,kBAAkB,CAAC;AAErC,QAAM,iBAAiB,YAAY;AACjC,QAAI,CAAC,UAAU,QAAQ,OAAQ,QAAO,CAAC;AACvC,QAAI;AACF,iBAAW,IAAI;AACf,YAAM,cAAc,UAAU,QAAQ,iBAAiB,cAAAA;AACvD,UAAI,SAAc;AAAA,QAChB,CAAC,UAAU,QAAQ,OAAO,GAAG,UAAU,QAAQ;AAAA,MACjD;AACA,UAAI,MAAM,QAAQ,UAAU,QAAQ,KAAK,GAAG;AAC1C,YAAI,UAAU,QAAQ,MAAM,WAAW,GAAG;AACxC,qBAAW,KAAK;AAChB;AAAA,QACF;AACA,iBAAS;AAAA,UACP,CAAC,GAAG,UAAU,QAAQ,OAAO,MAAM,GAAG,UAAU,QAAQ,MAAM,KAAK,GAAG;AAAA,QACxE;AAAA,MACF;AACA,YAAM,EAAE,SAAS,aAAa,QAAQ,UAAU,IAAI;AAAA,QAClD,UAAU,QAAQ;AAAA,QAClB,CAAC,CAAC,UAAU,QAAQ;AAAA,MACtB;AAEA,UAAI,aAAa;AACf,mBAAW,KAAK;AAChB;AAAA,MACF;AAEA,YAAM,cAAc,EAAE,GAAG,WAAW,GAAG,OAAO;AAC9C,YAAM,MAAM,MAAM,YAAY,IAAI,SAAS;AAAA,QACzC,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB,CAAC;AAED,UAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,GAAG;AACjF,cAAM,UAAU,mBAAmB,IAAI,KAAK,IAAI;AAChD,mBAAW,UAAQ,cAAc,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,MACzD;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,KAAK,4DAAkD,GAAG;AAAA,IACpE,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,gCAAU,MAAM;AACd,UAAM,MAAM,UAAU;AACtB,QAAI,CAAC,IAAI,WAAW,CAAC,IAAI,SAAS,IAAI,eAAe,SAAS,CAAC,IAAI,OAAQ;AAE3E,QAAI,IAAI,eAAe;AACrB,YAAM,SAAS,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,IAAI,CAAC;AACpF,YAAM,cAAc,OAAO,MAAM,SAAO,QAAQ,KAAK,SAAO,IAAI,UAAU,GAAG,CAAC;AAC9E,UAAI,YAAa;AAAA,IACnB,OAAO;AACL,YAAM,cAAc,QAAQ,KAAK,SAAO,IAAI,UAAU,IAAI,KAAK;AAC/D,UAAI,YAAa;AAAA,IACnB;AACA,mBAAe;AAAA,EACjB,GAAG,CAAC,KAAK,UAAU,OAAO,KAAK,GAAG,OAAO,SAAS,OAAO,QAAQ,OAAO,UAAU,CAAC;AAGnF,QAAM,eAAW,4BAAY,MAAM;AACjC,QAAI,CAAC,WAAW,SAAS;AACvB,eAAS,OAAO,GAAG,UAAU;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,MAAM,UAAU,CAAC;AAGvC,QAAM,aAAS,4BAAY,CAAC,SAAiB;AAC3C,kBAAc,IAAI;AAElB,QAAI,cAAc,QAAS,cAAa,cAAc,OAAO;AAE7D,kBAAc,UAAU,WAAW,MAAM;AACvC,eAAS,GAAG,IAAI;AAAA,IAClB,GAAG,GAAG;AAAA,EACR,GAAG,CAAC,CAAC;AAGL,QAAM,YAAQ,4BAAY,MAAM;AAC9B,kBAAc,EAAE;AAChB,YAAQ,CAAC;AAAA,EACX,GAAG,CAAC,CAAC;AAGL,gCAAU,MAAM;AACd,QAAI,OAAO,aAAa,QAAQ;AAC9B,iBAAW,UAAU,OAAO;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,OAAO,WAAW,CAAC;AAEvB,gCAAU,MAAM;AACd,QAAI,OAAO,aAAc,UAAS,GAAG,EAAE;AAEvC,WAAO,MAAM;AACX,UAAI,cAAc,QAAS,cAAa,cAAc,OAAO;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,OAAO,UAAkB;AAC/C,QAAI,CAAC,UAAU,QAAQ,OAAQ,QAAO;AAEtC,UAAM,cAAc,UAAU,QAAQ,iBAAiB,cAAAA;AACvD,UAAM,SAAS,UAAU,QAAQ;AACjC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,MACA,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAAA,IAC3D;AAEA,UAAM,cAAsC,CAAC;AAC7C,WAAO,aAAa,QAAQ,CAAC,OAAO,QAAQ;AAC1C,kBAAY,GAAG,IAAI;AAAA,IACrB,CAAC;AAED,UAAM,OAAO;AAAA,MACX,GAAG;AAAA,MACH,CAAC,UAAU,QAAQ,SAAS,GAAG;AAAA,IACjC;AAEA,UAAM,MAAM,MAAM,YAAY,KAAK,OAAO,SAAS,OAAO,UAAU,MAAM;AAAA,MACxE,iBAAiB;AAAA,IACnB,CAAC;AAED,QAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,GAAG;AACjF,YAAM,UAAU,mBAAmB,IAAI,KAAK,IAAI;AAChD,iBAAW,UAAQ,cAAc,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AACvD,aAAO,QAAQ,CAAC;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADzMM,IAAAC,uBAAA;AAtHN,SAAS,mBAAmB;AAAA,EAC1B,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,2BAA2B;AAAA,EAC3B,GAAG;AACL,GAA4B;AAC1B,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,QAAM,kBAAc,uBAAuB,IAAI;AAC/C,QAAM,qBAAiB,uBAAuB,IAAI;AAElD,QAAM;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,gBAAgB;AAAA,IAClB,SAAS;AAAA,IACT,YAAY,UAAU;AAAA,IACtB;AAAA,IACA,UAAU,YAAY;AAAA,IACtB;AAAA,IACA;AAAA,IACA,aAAa,WAAW,CAAC;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,qBAAiB,wBAAQ,MAAM,YAAY,KAAK,SAAO,IAAI,UAAU,KAAK,GAAG,CAAC,aAAa,KAAK,CAAC;AAGvG,gCAAU,MAAM;AACd,UAAM,qBAAqB,CAAC,MAAkB;AAC5C,UAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,EAAE,MAAc,GAAG;AAC1E,kBAAU,KAAK;AACf,sBAAc,EAAE;AAAA,MAClB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,CAAC;AAGL,gCAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,WAAW,QAAS;AAEpC,UAAM,WAAW,IAAI;AAAA,MACnB,aAAW;AACT,YAAI,QAAQ,CAAC,EAAE,eAAgB,UAAS;AAAA,MAC1C;AAAA,MACA,EAAE,WAAW,IAAI;AAAA,IACnB;AAEA,QAAI,eAAe,QAAS,UAAS,QAAQ,eAAe,OAAO;AAEnE,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,QAAQ,SAAS,SAAS,QAAQ,CAAC;AAEvC,QAAM,qBAAqB,CAAC,MAA2C;AACrE,UAAM,OAAO,EAAE,OAAO;AACtB,kBAAc,IAAI;AAClB,WAAO,IAAI;AAAA,EACb;AAEA,QAAM,eAAe,CAAC,aAAqB;AACzC,eAAW,UAAU,MAAM,EAAE;AAC7B,cAAU,KAAK;AACf,kBAAc,EAAE;AAChB,UAAM;AAAA,EACR;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,SAAU,WAAU,IAAI;AAC7B,QAAI,YAAY,WAAW;AACzB,eAAS,GAAG,EAAE;AAAA,EAClB;AAEA,QAAM,wBAAwB,CAAC,MAA2C;AACxE,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,eAAW,IAAI,MAAM,EAAE;AACvB,kBAAc,EAAE;AAChB,UAAM;AACN,WAAO,EAAE;AAAA,EACX;AAEA,QAAM,qBAAqB,OAAO,cAAsB;AACtD,UAAM,SAAS,MAAM,gBAAgB,SAAS;AAC9C,QAAI,QAAQ;AACV,iBAAW,OAAO,OAAO,MAAM,EAAE;AACjC,gBAAU,KAAK;AACf,oBAAc,EAAE;AAChB,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,KAAK,aAAa,WAAU,mBAE/B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL;AAAA,QACA,MAAM;AAAA,QACN,WAAW;AAAA,UACT;AAAA,UACA,WAAW,mCAAmC;AAAA,UAC9C;AAAA,UACA,eAAe,mBAAmB;AAAA,QACpC;AAAA,QACA,aAAa,gBAAgB,SAAS;AAAA,QACtC,OAAO,SAAS,aAAa,gBAAgB,SAAS;AAAA,QACtD,SAAS;AAAA,QACT,UAAU;AAAA,QACV,UAAU,CAAC,UAAU;AAAA,QACrB;AAAA,QACA,cAAa;AAAA;AAAA,IACf;AAAA,IACC,kBAAkB,CAAC,YAAY,CAAC,YAC/B;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAW;AAAA,QACX,SAAS;AAAA,QACT,WAAU;AAAA,QAEV,wDAAC,oCAAY,WAAU,+BAA8B;AAAA;AAAA,IACvD;AAAA,IAED,gBACC,8CAAC,OAAE,WAAU,6BAA6B,wBAAa;AAAA,IAGxD,UAAU,CAAC,YACV,8CAAC,kBACC;AAAA,MAAC;AAAA;AAAA,QACC,aAAa,CAAC,MAAM,EAAE,gBAAgB;AAAA,QACtC,WAAU;AAAA,QACV,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO,YAAY,SAAS;AAAA,UAC5B,KAAK,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,SAAS,OAAO,UAAU;AAAA,UACjG,MAAM,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,OAAO,OAAO,UAAU;AAAA,QAClG;AAAA,QAGE,gBAAM,WAAW,CAAC,UAChB,+CAAC,SAAI,WAAU,sFACb;AAAA,wDAAC,SAAI,WAAU,gFAA+E;AAAA,UAAE;AAAA,WAElG,IAEA,+EACG,qBAAW,YAAY,WAAW,IACjC,+CAAC,SAAI,WAAU,sFACb;AAAA,wDAAC,SAAI,WAAU,gFAA+E;AAAA,UAAE;AAAA,WAElG,IACE,YAAY,SAAS,IACvB,gFACG;AAAA,sBAAY,IAAI,CAAC,QAAQ,UACxB;AAAA,YAAC;AAAA;AAAA,cAEC,SAAS,MAAM;AACb,6BAAa,OAAO,KAAK;AAAA,cAC3B;AAAA,cACA,WAAW,qDAAqD,OAAO,UAAU,QAAQ,gBAAgB,EAAE;AAAA,cAE1G,iBAAO;AAAA;AAAA,YANH,GAAG,OAAO,KAAK,IAAI,KAAK;AAAA,UAO/B,CACD;AAAA,UAEA,WACC;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,WAAU;AAAA,cAET,oBACC,+CAAC,SAAI,WAAU,kDACb;AAAA,8DAAC,SAAI,WAAU,gFAA+E;AAAA,gBAAE;AAAA,iBAElG,IAEA;AAAA;AAAA,UAEJ;AAAA,WAEJ,IAEA,+CAAC,SAAI,WAAU,+CACZ;AAAA,uBAAa,mBAAmB,UAAU,MAAM;AAAA,UAE/C,sBAAsB,cACpB;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM;AACb,mCAAmB,UAAU;AAAA,cAC/B;AAAA,cACA,WAAU;AAAA,cAET,kBAAQ,UAAU;AAAA;AAAA,UACrB;AAAA,WAGN,GAEJ;AAAA;AAAA,IAGN,GACF;AAAA,KAEJ;AAEJ;AAEA,IAAO,uBAAQ;;;AFxNT,IAAAC,uBAAA;AA7BN,IAAM,WAAW,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAgC;AAC7E,QAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,MAAM,OAAO,CAAC;AACxD,QAAM,cAAc,MAAM,cAAc,MAAM,cAAc;AAG5D,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,mBAAa,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAkB;AACtC,UAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EAC3C;AAEA,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,UAAU,KAAK,IAAI,CAAC,UAAe;AAAA,IACvC,OAAO,KAAK,OAAO;AAAA,IACnB,OAAO,KAAK,SAAS;AAAA,EACvB,EAAE;AAEF,MAAI,MAAM,UAAU;AAClB,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA,IAAI,MAAM,QAAQ;AAAA,QAClB,SAAS;AAAA,QACT,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ;AAAA,EAEJ;AAEA,SACE,gFACE;AAAA,mDAAC,UAAO,MAAM,MAAM,MAAM,OAAO,MAAM,SAAS,IAAI,eAAe,cAAc,UAAU,cAAc,CAAC,YACxG;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,WAAW,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,UACnE,OAAO;AAAA,YACL,GAAG;AAAA,YACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,UACvD;AAAA,UACA,iBAAe;AAAA,UAEf,wDAAC,eAAY,aAA0B;AAAA;AAAA,MACzC;AAAA,MACA,+CAAC,iBAEG;AAAA,cAAM,eACJ,8CAAC,cAAW,OAAM,QAAO,UAAQ,MAAC,wBAAU;AAAA,QAI9C,CAAC,MAAM,eAAe,QAAQ,WAAW,KACvC,8CAAC,cAAW,OAAM,QAAO,UAAQ,MAAC,wBAAU;AAAA,QAG/C,QAAQ,IAAI,CAAC,QACZ,8CAAC,cAA2B,OAAO,IAAI,OACpC,cAAI,SADU,IAAI,KAErB,CACD;AAAA,SACH;AAAA,OACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,mBAAQ;;;AIjGf,IAAAC,iBAA0B;;;ACA1B,sBAAiC;AAiB3B,IAAAC,uBAAA;AAbN,SAAS,OAAO;AAAA,EACd;AAAA,EACA,GAAG;AACL,GAAsD;AACpD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAiB;AAAA,QAAhB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;ADJI,IAAAC,uBAAA;AAhBJ,IAAM,eAAe,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA8B;AAC/E,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAmB;AACvC,UAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,EAC3C;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB,yDAAC,SAAI,WAAU,oCACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM,QAAQ;AAAA,UAClB,SAAS,CAAC,CAAC,MAAM;AAAA,UACjB,iBAAiB;AAAA,UACjB,UAAU,cAAc,CAAC;AAAA;AAAA,MAC3B;AAAA,MACA,8CAACC,QAAA,EAAM,SAAS,MAAM,QAAQ,UAAW,gBAAM,MAAK;AAAA,OACtD,GACF;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,uBAAQ;;;AExCf,IAAAC,iBAA0B;AAC1B,uCAA8C;AAK9C,mBAAO;AAoCH,IAAAC,uBAAA;AAlCJ,IAAM,kBAAkB,CAAC,QAAgB;AACvC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,QAAQ,WAAW,GAAG,EAAG,QAAO;AACpC,QAAM,QAAQ,QAAQ,QAAQ,OAAO,EAAE;AACvC,SAAO,MAAM,KAAK;AACpB;AAEA,IAAM,aAAa,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAuB;AACtE,QAAM,cAAc,MAAM,eAAe;AAEzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AAEvC,gCAAU,MAAM;AACd,QAAI,MAAM,UAAU,QAAW;AAE7B,YAAM,aAAa,gBAAgB,MAAM,KAAK;AAC9C,qBAAe,UAAU;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,QAAgB;AACpC,UAAM,aAAa,gBAAgB,GAAG;AACtC,UAAM,QAAQ;AAAA,MACZ,QAAQ;AAAA,QACN,MAAM,MAAM,QAAQ;AAAA,QACpB,OAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,WAAW,OAAO,MAAM,QAAQ,EAAE;AAAA,EAC1C;AAEA,SACE,gFACE;AAAA;AAAA,MAAC,iCAAAC;AAAA,MAAA;AAAA,QACC,gBAAe;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM,QAAQ,gBAAgB,MAAM,KAAK,IAAI;AAAA,QACpD,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,MAAM,eAAe,mBAAmB;AAAA,QAAE;AAAA,QAC5C,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,UAAU;AAAA,QACV,YAAY;AAAA,UACV,IAAI;AAAA,UACJ,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,SAAS,OAAO;AAAA,QAC1D;AAAA,QACA;AAAA,QACA,UAAU,cAAc,CAAC;AAAA;AAAA,IAC3B;AAAA,IACC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,qBAAQ;;;ACtEf,IAAAC,iBAA0B;AAqCtB,IAAAC,uBAAA;AA9BJ,IAAM,cAAc,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAwB;AACxE,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAc,iBAAiB,OAAO;AAAA,QACtC;AAAA,QACA,UAAU;AAAA,QACV,UAAU,cAAc,CAAC;AAAA,QACzB,UAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,sBAAQ;;;AClEf,IAAAC,iBAA0B;AA8BtB,IAAAC,uBAAA;AAxBJ,IAAM,YAAY,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAAsB;AACpE,QAAM,cAAc,MAAM,eAAe;AAEzC,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,CAAC,UAAe;AAClC,QAAI,MAAM,cAAc,QAAQ;AAC9B,aAAO,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ;AAAA,IACtE;AACA,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,WAAO;AAAA,EACT;AAEA,SACE,+CAAC,SAAI,WAAU,6CACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM;AAAA,QACZ,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B,WACE,GAAG,WAAW,MAAM,eAAe,mBAAmB,EAAE;AAAA,QAE1D,OAAO;AAAA,UACL,GAAG;AAAA,UACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,QACvD;AAAA,QACA,cAAa;AAAA,QACb;AAAA,QACA,UAAU;AAAA;AAAA,IACZ;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,oBAAQ;;;ACtDf,IAAAC,SAAuB;AAEvB,sBAAuB;AACvB,IAAAC,uBAA2C;;;ACL3C,IAAAC,SAAuB;AACvB,IAAAC,uBAIO;AACP,8BAA2D;AAyH/C,IAAAC,uBAAA;AApHZ,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,QAAM,wBAAoB,8CAAqB;AAE/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MACA;AAAA,MACA,YAAY;AAAA,QACV,qBAAqB,CAAC,SACpB,KAAK,eAAe,WAAW,EAAE,OAAO,QAAQ,CAAC;AAAA,QACnD,GAAG;AAAA,MACL;AAAA,MACA,YAAY;AAAA,QACV,MAAM,GAAG,SAAS,kBAAkB,IAAI;AAAA,QACxC,QAAQ;AAAA,UACN;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO,GAAG,8BAA8B,kBAAkB,KAAK;AAAA,QAC/D,KAAK;AAAA,UACH;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,iBAAiB;AAAA,UACf,eAAe,EAAE,SAAS,cAAc,CAAC;AAAA,UACzC;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX,eAAe,EAAE,SAAS,cAAc,CAAC;AAAA,UACzC;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB,UACd,YACA;AAAA,UACJ,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO;AAAA,QACP,UAAU,GAAG,QAAQ,kBAAkB,QAAQ;AAAA,QAC/C,SAAS;AAAA,UACP;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,MAAM,GAAG,oBAAoB,kBAAkB,IAAI;AAAA,QACnD,oBAAoB;AAAA,UAClB;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,KAAK;AAAA,UACH;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,cAAc,GAAG,gBAAgB,kBAAkB,YAAY;AAAA,QAC/D,WAAW,GAAG,0BAA0B,kBAAkB,SAAS;AAAA,QACnE,OAAO;AAAA,UACL;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,SAAS;AAAA,UACP;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,QAAQ,GAAG,aAAa,kBAAkB,MAAM;AAAA,QAChD,GAAG;AAAA,MACL;AAAA,MACA,YAAY;AAAA,QACV,MAAM,CAAC,EAAE,WAAAC,YAAW,SAAS,GAAGC,OAAM,MAAM;AAC1C,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,KAAK;AAAA,cACL,WAAW,GAAGD,UAAS;AAAA,cACtB,GAAGC;AAAA;AAAA,UACN;AAAA,QAEJ;AAAA,QACA,SAAS,CAAC,EAAE,WAAAD,YAAW,aAAa,GAAGC,OAAM,MAAM;AACjD,cAAI,gBAAgB,QAAQ;AAC1B,mBACE,8CAAC,wCAAgB,WAAW,GAAG,UAAUD,UAAS,GAAI,GAAGC,QAAO;AAAA,UAEpE;AAEA,cAAI,gBAAgB,SAAS;AAC3B,mBACE;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,UAAUD,UAAS;AAAA,gBAChC,GAAGC;AAAA;AAAA,YACN;AAAA,UAEJ;AAEA,iBACE,8CAAC,wCAAgB,WAAW,GAAG,UAAUD,UAAS,GAAI,GAAGC,QAAO;AAAA,QAEpE;AAAA,QACA,WAAW;AAAA,QACX,YAAY,CAAC,EAAE,UAAU,GAAGA,OAAM,MAAM;AACtC,iBACE,8CAAC,QAAI,GAAGA,QACN,wDAAC,SAAI,WAAU,mEACZ,UACH,GACF;AAAA,QAEJ;AAAA,QACA,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2C;AACzC,QAAM,wBAAoB,8CAAqB;AAE/C,QAAM,MAAY,cAA0B,IAAI;AAChD,EAAM,iBAAU,MAAM;AACpB,QAAI,UAAU,QAAS,KAAI,SAAS,MAAM;AAAA,EAC5C,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,YAAU,IAAI,KAAK,mBAAmB;AAAA,MACtC,wBACE,UAAU,YACV,CAAC,UAAU,eACX,CAAC,UAAU,aACX,CAAC,UAAU;AAAA,MAEb,oBAAkB,UAAU;AAAA,MAC5B,kBAAgB,UAAU;AAAA,MAC1B,qBAAmB,UAAU;AAAA,MAC7B,WAAW;AAAA,QACT;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AC/MA,uBAAkC;AAOzB,IAAAC,uBAAA;AAHT,SAAS,QAAQ;AAAA,EACf,GAAG;AACL,GAAuD;AACrD,SAAO,8CAAkB,uBAAjB,EAAsB,aAAU,WAAW,GAAG,OAAO;AAC/D;AAEA,SAAS,eAAe;AAAA,EACtB,GAAG;AACL,GAA0D;AACxD,SAAO,8CAAkB,0BAAjB,EAAyB,aAAU,mBAAmB,GAAG,OAAO;AAC1E;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,GAAG;AACL,GAA0D;AACxD,SACE,8CAAkB,yBAAjB,EACC;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ;;;AFyNU,IAAAC,uBAAA;AA5OV,SAAS,YAAY,QAAa,cAAsC;AACtE,MAAI,CAAC,OAAQ,QAAO;AAEpB,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,oBAAI,KAAK;AAAA,IAClB,KAAK;AACH,aAAO,eAAe,IAAI,KAAK,YAAY,IAAI;AAAA,IACjD,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEe,SAAR,eAAgC;AAAA,EACrC;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAyB;AAEvB,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AACA,QAAM,cAAc,MAAM,eAAe,eAAe,IAAmC;AAE3F,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,oBAAoB,MAAM,qBAAqB;AAErD,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,oBAAoB,MAAM,qBAAqB;AAErD,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,QAAM,UAAU,YAAY,aAAa,iBAAiB;AAC1D,QAAM,UAAU,YAAY,aAAa,iBAAiB;AAG1D,QAAM,CAAC,MAAM,OAAO,IAAU,gBAA2B,MAAM;AAC7D,QAAI,CAAC,MAAM,MAAO,QAAO;AACzB,UAAM,IAAI,IAAI,KAAK,MAAM,KAAY;AACrC,WAAO,MAAM,EAAE,QAAQ,CAAC,IAAI,SAAY;AAAA,EAC1C,CAAC;AAGD,QAAM,eAAe,OAAO,KAAK,SAAS,IAAI;AAC9C,QAAM,iBAAiB,OAAO,KAAK,WAAW,IAAI;AAClD,QAAM,CAAC,OAAO,QAAQ,IAAU,gBAAS,YAAY;AACrD,QAAM,CAAC,SAAS,UAAU,IAAU,gBAAS,cAAc;AAE3D,QAAM,CAAC,MAAM,OAAO,IAAU,gBAAS,IAAI;AAE3C,QAAM,eAAqB,eAAQ,MAAM;AACvC,QAAI,UAAU,EAAG,QAAO;AACxB,QAAI,QAAQ,GAAI,QAAO,QAAQ;AAC/B,WAAO;AAAA,EACT,GAAG,CAAC,KAAK,CAAC;AAEV,EAAM,iBAAU,MAAM;AACpB,YAAQ,SAAS,KAAK,OAAO,IAAI;AAAA,EACnC,GAAG,CAAC,KAAK,CAAC;AAEV,EAAM,iBAAU,MAAM;AACpB,QAAI,CAAC,MAAM,OAAO;AAChB,cAAQ,MAAS;AACjB;AAAA,IACF;AACA,UAAM,IAAI,IAAI,KAAK,MAAM,KAAY;AACrC,QAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;AACvB,cAAQ,CAAC;AACT,eAAS,EAAE,SAAS,CAAC;AACrB,iBAAW,EAAE,WAAW,CAAC;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,CAAC;AAEhB,QAAM,CAAC,MAAM,OAAO,IAAU,gBAAS,OAAO,KAAK,YAAY,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC;AAE3F,EAAM,iBAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,UAAM,UAAU,IAAI,KAAK,IAAI;AAC7B,YAAQ,YAAY,IAAI;AACxB,YAAQ,OAAO;AACf,eAAW,OAAO;AAAA,EACpB,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,aAAa,CAAC,aAA+B;AACjD,QAAI,CAAC,MAAM,SAAU;AAErB,QAAI,cAAc;AAClB,QAAI,CAAC,UAAU;AACb,oBAAc;AAAA,IAChB,WAAW,SAAS,QAAQ;AAC1B,wBAAc,wBAAO,UAAU,YAAY;AAAA,IAC7C,WAAW,SAAS,QAAQ;AAC1B,wBAAc,wBAAO,UAAU,UAAU;AAAA,IAC3C,OAAO;AACL,oBAAc,SAAS,YAAY;AAAA,IACrC;AAEA,UAAM,SAAS;AAAA,MACb,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO;AAAA,IACT;AAEA,UAAM,QAAQ;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,SAAS,OAAO,MAAM,QAAQ,EAAE;AAAA,EACxC;AAEA,QAAM,iBAAiB,CAAC,cAAgC,IAAI,OAAO,IAAI,YAAY;AACjF,QAAI,CAAC,cAAc;AACjB,cAAQ,MAAS;AACjB,iBAAW,MAAS;AACpB;AAAA,IACF;AAEA,UAAM,IAAI,IAAI,KAAK,YAAY;AAC/B,QAAI,SAAS,QAAQ;AACnB,QAAE,SAAS,CAAC;AACZ,QAAE,WAAW,CAAC;AACd,QAAE,WAAW,CAAC;AACd,QAAE,gBAAgB,CAAC;AAAA,IACrB,OAAO;AACL,QAAE,SAAS,GAAG,GAAG,GAAG,CAAC;AAAA,IACvB;AAEA,QAAI,WAAW,IAAI,QAAS;AAC5B,QAAI,WAAW,IAAI,QAAS;AAE5B,YAAQ,CAAC;AACT,YAAQ,EAAE,YAAY,CAAC;AACvB,eAAW,CAAC;AAAA,EACd;AAEA,QAAM,kBAAkB,CAAC,SAA2B;AAClD,QAAI,CAAC,MAAM;AACT,cAAQ,MAAS;AACjB,iBAAW,MAAS;AACpB;AAAA,IACF;AAEA,UAAM,cAAc,IAAI,KAAK,IAAI;AAEjC,mBAAe,WAAW;AAAA,EAC5B;AAEA,QAAM,mBAAmB,CAAC,GAAW,MAAc;AACjD,QAAI,CAAC,MAAM;AAET,YAAM,eAAe,oBAAI,KAAK;AAC9B,mBAAa,SAAS,CAAC;AACvB,mBAAa,WAAW,CAAC;AACzB,mBAAa,WAAW,CAAC;AACzB,mBAAa,gBAAgB,CAAC;AAC9B,cAAQ,YAAY;AACpB,iBAAW,YAAY;AAAA,IACzB,OAAO;AACL,YAAM,UAAU,IAAI,KAAK,IAAI;AAC7B,cAAQ,SAAS,CAAC;AAClB,cAAQ,WAAW,CAAC;AACpB,cAAQ,WAAW,CAAC;AACpB,cAAQ,gBAAgB,CAAC;AACzB,cAAQ,OAAO;AACf,iBAAW,OAAO;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,MAA4C;AACrE,QAAI,IAAI,OAAO,EAAE,OAAO,KAAK;AAC7B,QAAI,SAAS,QAAQ,IAAI,GAAI,MAAK;AAClC,QAAI,SAAS,QAAQ,MAAM,GAAI,KAAI;AACnC,aAAS,CAAC;AACV,qBAAiB,GAAG,OAAO;AAAA,EAC7B;AAEA,QAAM,sBAAsB,CAAC,MAA4C;AACvE,UAAM,IAAI,OAAO,EAAE,OAAO,KAAK;AAC/B,eAAW,CAAC;AACZ,qBAAiB,OAAO,CAAC;AAAA,EAC3B;AAEA,QAAM,mBAAmB,CAAC,MAA4C;AACpE,UAAM,MAAM,EAAE,OAAO;AACrB,YAAQ,GAAG;AACX,QAAI,IAAI;AACR,QAAI,QAAQ,QAAQ,IAAI,GAAI,MAAK;AACjC,QAAI,QAAQ,QAAQ,MAAM,GAAI,KAAI;AAClC,aAAS,CAAC;AACV,qBAAiB,GAAG,OAAO;AAAA,EAC7B;AAEA,QAAM,eAAc,oBAAI,KAAK,GAAE,YAAY;AAC3C,QAAM,cAAc,CAAC;AACrB,WAAS,IAAI,cAAc,IAAI,KAAK,cAAc,IAAI,KAAK;AACzD,gBAAY,KAAK,CAAC;AAAA,EACpB;AAEA,QAAM,eAAqB,eAAQ,MAAM;AACvC,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI;AACF,UAAI,SAAS,OAAQ,YAAO,wBAAO,MAAM,YAAY;AACrD,UAAI,SAAS,OAAQ,YAAO,wBAAO,MAAM,UAAU;AACnD,iBAAO,wBAAO,MAAM,qBAAqB;AAAA,IAC3C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,QAAM,kBAAkB,cAAc,CAAC;AAEvC,QAAM,CAAC,oBAAoB,qBAAqB,IAAU,gBAAS,MAAM;AACvE,UAAM,gBAAe,oBAAI,KAAK,GAAE,SAAS;AACzC,WAAO,OAAO,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,MAAM,YAAY;AAAA,EAC3F,CAAC;AAED,EAAM,iBAAU,MAAM;AACpB,0BAAsB,IAAI,KAAK,MAAM,mBAAmB,SAAS,CAAC,CAAC;AAAA,EACrE,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,cAAc,MAAM;AACxB,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,mBAAmB,IAAI,KAAK,MAAM,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AACzE,mBAAe,gBAAgB;AAAA,EACjC;AAEA,SACE,+CAAC,SAAI,WAAU,iBACb;AAAA,mDAAC,WACC;AAAA,oDAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,WAAW;AAAA,YACT;AAAA,YACA,CAAC,QAAQ;AAAA,YACT,MAAM,gBAAgB;AAAA,YACtB;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,GAAG;AAAA,YACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,UACvD;AAAA,UACA,UAAU;AAAA,UAEV;AAAA,0DAAC,sCAAc,WAAU,yBAAwB;AAAA,YACjD,8CAAC,UAAK,WAAU,QAAQ,0BAAgB,aAAY;AAAA,YACnD,gBACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,OAAO,EAAE,eAAe,OAAO;AAAA,gBAC/B,SAAS,OAAK;AACZ,oBAAE,gBAAgB;AAClB,0BAAQ,MAAS;AACjB,6BAAW,MAAS;AAAA,gBACtB;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MAEJ,GACF;AAAA,MAEA,8CAAC,kBAAe,WAAU,sBAAqB,OAAM,SACnD,yDAAC,SAAI,WAAU,uBACX;AAAA,kBAAS,UAAU,SAAS,eAC5B,gFACE;AAAA,yDAAC,SAAI,WAAU,2CACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,SAAS;AAAA,gBACV;AAAA;AAAA,YAED;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,QAAQ,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,gBAC/C,UAAU,mBAAmB;AAAA,gBAE5B,sBAAY,IAAI,CAAC,MAChB,8CAAC,YAAe,OAAO,GACpB,eADU,CAEb,CACD;AAAA;AAAA,YACH;AAAA,aACF;AAAA,UAEA,8CAAC,SAAI,WAAU,sBACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,UAAU;AAAA,cACV,OAAO;AAAA,cACP,eAAe,CAAC,aAAa,sBAAsB,QAAQ;AAAA,cAC3D,UAAU,CAAC,MAAM;AACf,oBAAI,WAAW,IAAI,QAAS,QAAO;AACnC,oBAAI,WAAW,IAAI,QAAS,QAAO;AACnC,uBAAO;AAAA,cACT;AAAA,cACA,WAAU;AAAA,cACV,WAAS;AAAA;AAAA,UACX,GACF;AAAA,WACF;AAAA,SAGA,SAAS,UAAU,SAAS,eAC5B,+CAAC,SAAI,WAAU,gCACb;AAAA,wDAAC,WAAM,WAAU,iCAAgC,kBAAI;AAAA,UACrD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,cACP,UAAU;AAAA,cACV,UAAU,mBAAmB;AAAA,cAE5B,gBAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,SAChD,8CAAC,YAAkB,OAAO,MACvB,eAAK,SAAS,EAAE,SAAS,GAAG,GAAG,KADrB,IAEb,CACD;AAAA;AAAA,UACH;AAAA,UACA,8CAAC,UAAK,WAAU,WAAU,eAAC;AAAA,UAC3B;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,cACP,UAAU;AAAA,cACV,UAAU,mBAAmB;AAAA,cAE5B,gBAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACxC,sBAAM,MAAM,IAAI;AAChB,uBACE,8CAAC,YAAiB,OAAO,KACtB,cAAI,SAAS,EAAE,SAAS,GAAG,GAAG,KADpB,GAEb;AAAA,cAEJ,CAAC;AAAA;AAAA,UACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,cACP,UAAU;AAAA,cACV,UAAU,mBAAmB;AAAA,cAE7B;AAAA,8DAAC,YAAO,OAAM,MAAK,gBAAE;AAAA,gBACrB,8CAAC,YAAO,OAAM,MAAK,gBAAE;AAAA;AAAA;AAAA,UACvB;AAAA,WACF;AAAA,SAEJ,GAEF;AAAA,OACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,cAAc,iBAAiB,OAAO;AAAA,QACtC,UAAU;AAAA,QACV,OACE,CAAC,OACG,KACA,SAAS,aACP,wBAAO,MAAM,YAAY,IACzB,SAAS,aACP,wBAAO,MAAM,UAAU,IACvB,KAAK,YAAY;AAAA,QAE3B,UAAU,MAAM;AAAA,QAAE;AAAA;AAAA,IACpB;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;;;AGhZA,IAAAC,iBAAiC;AAEjC,IAAAC,mBAAgC;AAsDd,IAAAC,uBAAA;AAzClB,IAAM,YAAY,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,MAA2B;AACzE,QAAM,cAAc,CAAC,QAAoC,CAAC,CAAC,OAAO,IAAI,gBAAgB;AAEtF,QAAM,CAAC,MAAM,OAAO,IAAI,eAAAC,QAAM;AAAA,IAC5B,YAAY,MAAM,KAAK,IACnB,MAAM,QACN;AAAA,MACA,MAAM,oBAAI,KAAK;AAAA,MACf,QAAI,0BAAQ,oBAAI,KAAK,GAAG,CAAC;AAAA,IAC3B;AAAA,EACJ;AAEA,gCAAU,MAAM;AAEd,QAAI,MAAM,SAAS,YAAY,MAAM,KAAK,GAAG;AAC3C,qBAAe,MAAM,KAAK;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,UAAsC;AAC1D,YAAQ,KAAK;AACb,QAAI,OAAO;AACT,YAAM,WAAW,OAAO,OAAO,QAAQ,EAAE;AAAA,IAC3C;AAAA,EACF;AAEA,SACE,gFACE;AAAA,kDAAC,SAAI,WAAsB,OACzB,yDAAC,WACC;AAAA,oDAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,SAAS;AAAA,UACT,WAAW;AAAA,YACT;AAAA,YACA,CAAC,QAAQ;AAAA,UACX;AAAA,UAEC,gBAAM,OACL,KAAK,KACH,gFACG;AAAA,yCAAO,KAAK,MAAM,WAAW;AAAA,YAAE;AAAA,YAAG;AAAA,gBAClC,yBAAO,KAAK,IAAI,WAAW;AAAA,aAC9B,QAEA,yBAAO,KAAK,MAAM,WAAW,IAG/B,8CAAC,UAAK,+BAAiB;AAAA;AAAA,MAE3B,GACF;AAAA,MACA,8CAAC,kBAAe,WAAU,cAAa,OAAM,SAC3C;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAc,MAAM;AAAA,UACpB,UAAU;AAAA,UACV,UAAU;AAAA,UACV,gBAAgB;AAAA;AAAA,MAClB,GACF;AAAA,OACF,GACF;AAAA,IACC,MAAM,gBAAgB,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KACtF;AAEJ;AAEA,IAAO,oBAAQ;;;ACpFf,IAAAC,iBAA0B;AA2BtB,IAAAC,uBAAA;AAtBJ,IAAM,iBAAiB,CAAC,EAAE,WAAW,OAAO,SAAS,QAAQ,GAAG,MAAM,MAA2B;AAC/F,QAAM,cAAc,MAAM,eAAe;AAGzC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,iBAAiB,MAAM,kBAAkB;AAE/C,gCAAU,MAAM;AAEd,QAAI,MAAM,UAAU,QAAW;AAC7B,YAAM,IAAI,EAAE,QAAQ,EAAE,OAAO,MAAM,MAAM,GAAG,MAAM,SAAS;AAC3D,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,WAAW,GAAG,OAAO,QAAQ,EAAE;AAAA,EACvC;AAEA,SACE,gFACE;AAAA;AAAA,MAAC;AAAA;AAAA,QAAI,WACH;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,MAAM,eAAe,mBAAmB;AAAA,QAC1C;AAAA,QAGC;AAAA,qBACC,8CAAC,SAAI,WAAU,mEACZ,mBACH;AAAA,UAEF;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,MAAM,QAAQ;AAAA,cAClB,MAAK;AAAA,cACL,MAAM,MAAM;AAAA,cACZ,OAAO,MAAM,SAAS;AAAA,cACtB,WACE;AAAA,gBACE;AAAA,gBACA;AAAA,cACF;AAAA,cAEF,OAAO;AAAA,gBACL,GAAG;AAAA,gBACH,aAAa,MAAM,eAAe,YAAY,OAAO;AAAA,cACvD;AAAA,cACA,cAAc,iBAAiB,OAAO;AAAA,cACtC;AAAA,cACA,UAAU;AAAA,cACV,UAAU,cAAc,CAAC;AAAA,cACzB,UAAU;AAAA;AAAA,UACZ;AAAA,UACC,UACC,8CAAC,SAAI,WAAU,mEACZ,kBACH;AAAA;AAAA;AAAA,IAEJ;AAAA,IAEC,MAAM,gBACL,8CAAC,OAAE,WAAU,6BAA6B,gBAAM,cAAa;AAAA,KAEjE;AAEJ;AAEA,IAAO,yBAAQ;;;AC5Ef,IAAAC,iBAAkE;AAElE,IAAAC,wBAAmC;AAwLzB,IAAAC,uBAAA;AA5JK,SAAR,wBAAyC;AAAA,EAC9C,QAAQ,CAAC;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,GAAG;AACL,GAAiC;AAC/B,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,QAAM,kBAAc,uBAAuB,IAAI;AAC/C,QAAM,qBAAiB,uBAAuB,IAAI;AAElD,QAAM,eAAe,CAAC,QAA4B;AAChD,WAAO,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC;AAAA,EAChC;AAEA,QAAM,iBAAiB,CAACC,WAAyB;AAC/C,QAAI,MAAgB,CAAC;AAErB,QAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,YAAMA;AAAA,IACR,WAAW,OAAOA,WAAU,UAAU;AACpC,UAAI,CAACA,OAAM,KAAK,EAAG,QAAO,CAAC;AAC3B,UAAIA,OAAM,SAAS,GAAG,EAAG,OAAMA,OAAM,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,eACxDA,OAAM,SAAS,GAAG,EAAG,OAAMA,OAAM,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,UACjE,OAAM,CAACA,OAAM,KAAK,CAAC;AAAA,IAC1B;AAEA,WAAO,aAAa,GAAG;AAAA,EACzB;AAEA,QAAM,kBAAkB,eAAe,KAAK;AAE5C,QAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,MAAM,OAAO,CAAC;AACxD,QAAM;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,gBAAgB;AAAA,IAClB,SAAS;AAAA,IACT,YAAY,UAAU;AAAA,IACtB;AAAA,IACA,UAAU,YAAY;AAAA,IACtB;AAAA,IACA;AAAA,IACA,aAAa,QAAQ,CAAC;AAAA,IACtB,OAAO;AAAA,IACP;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,QAAM,cAAc,MAAM,WAAW;AAErC,QAAM,gBAAgB,CAAC,WAAwC;AAC7D,UAAM,SAAS,aAAa,MAAM;AAClC,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB,KAAK;AACH,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,sBAAkB,wBAAQ,MAAgB;AAC9C,WAAO,gBAAgB,IAAI,CAAAC,QAAM;AAC/B,YAAM,WAAW,YAAY,KAAK,SAAO,IAAI,UAAUA,GAAE;AACzD,UAAI,SAAU,QAAO;AACrB,aAAO,EAAE,OAAOA,KAAI,OAAOA,IAAG;AAAA,IAChC,CAAC;AAAA,EACH,GAAG,CAAC,iBAAiB,WAAW,CAAC;AAEjC,gCAAU,MAAM;AACd,UAAM,cAAc,CAAC,MAAkB;AACrC,UAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,EAAE,MAAc,GAAG;AAC1E,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,WAAW;AAClD,WAAO,MAAM,SAAS,oBAAoB,aAAa,WAAW;AAAA,EACpE,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACd,QAAI,CAAC,UAAU,CAAC,WAAW,QAAS;AAEpC,UAAM,MAAM,IAAI;AAAA,MACd,aAAW;AACT,YAAI,QAAQ,CAAC,EAAE,eAAgB,UAAS;AAAA,MAC1C;AAAA,MACA,EAAE,WAAW,IAAI;AAAA,IACnB;AAEA,QAAI,eAAe,QAAS,KAAI,QAAQ,eAAe,OAAO;AAC9D,WAAO,MAAM,IAAI,WAAW;AAAA,EAC9B,GAAG,CAAC,QAAQ,SAAS,SAAS,QAAQ,CAAC;AAEvC,QAAM,eAAe,CAAC,MAA2C;AAC/D,UAAM,OAAO,EAAE,OAAO;AACtB,kBAAc,IAAI;AAClB,WAAO,IAAI;AAAA,EACb;AAEA,QAAM,eAAe,CAAC,QAAgB;AACpC,QAAI;AAEJ,QAAI,gBAAgB,SAAS,GAAG,GAAG;AACjC,gBAAU,gBAAgB,OAAO,OAAK,MAAM,GAAG;AAAA,IACjD,OAAO;AACL,gBAAU,aAAa,CAAC,GAAG,iBAAiB,GAAG,CAAC;AAAA,IAClD;AAEA,eAAW,cAAc,OAAO,GAAG,EAAE;AAAA,EACvC;AAEA,QAAM,YAAY,CAAC,QAAgB;AACjC,UAAM,UAAU,gBAAgB,OAAO,OAAK,MAAM,GAAG;AACrD,eAAW,cAAc,OAAO,GAAG,EAAE;AAAA,EACvC;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,UAAU;AACb,gBAAU,IAAI;AACd,UAAI,YAAY,WAAW,GAAG;AAC5B,iBAAS,GAAG,EAAE;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,KAAK,aAAa,WAAU,mBAC/B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA,0BAAgB,IAAI,SACnB;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cAET;AAAA,oBAAI;AAAA,gBACJ,CAAC,YAAY,CAAC,YACb;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS,CAAC,MAAM;AACd,wBAAE,gBAAgB;AAClB,gCAAU,IAAI,KAAK;AAAA,oBACrB;AAAA,oBACA,WAAU;AAAA,oBAEV,wDAAC,+BAAM,MAAM,IAAI;AAAA;AAAA,gBACnB;AAAA;AAAA;AAAA,YAdG,IAAI;AAAA,UAgBX,CACD;AAAA,UAED;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,aAAa,gBAAgB,SAAS,KAAK;AAAA,cAC3C,WAAU;AAAA,cACV,OAAO,SAAS,aAAa;AAAA,cAC7B,UAAU;AAAA,cACV;AAAA,cACA;AAAA,cACA,cAAa;AAAA;AAAA,UACf;AAAA;AAAA;AAAA,IACF;AAAA,IAEC,gBACC,8CAAC,OAAE,WAAU,6BAA6B,wBAAa;AAAA,IAGxD,UAAU,CAAC,YACV,8CAAC,kBACC;AAAA,MAAC;AAAA;AAAA,QACC,aAAa,CAAC,MAAM,EAAE,gBAAgB;AAAA,QACtC,WAAU;AAAA,QACV,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO,YAAY,SAAS;AAAA,UAC5B,KAAK,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,SAAS,OAAO,UAAU;AAAA,UACjG,MAAM,YAAY,UAAU,YAAY,QAAQ,sBAAsB,EAAE,OAAO,OAAO,UAAU;AAAA,QAClG;AAAA,QAEC,yBAAe,YAAY,WAAW,IACrC,8CAAC,SAAI,WAAU,uCAAsC,wBAErD,IACE,YAAY,SAAS,IACvB,gFACG;AAAA,sBAAY,IAAI,CAAC,WAAW;AAC3B,kBAAM,aAAa,gBAAgB,SAAS,OAAO,KAAK;AACxD,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,SAAS,MAAM,aAAa,OAAO,KAAK;AAAA,gBACxC,WAAW;AAAA,kBACT;AAAA,kBACA,cAAc;AAAA,gBAChB;AAAA,gBAEC;AAAA,yBAAO;AAAA,kBACP,cAAc,8CAAC,qCAAY,MAAM,IAAI;AAAA;AAAA;AAAA,cARjC,OAAO;AAAA,YASd;AAAA,UAEJ,CAAC;AAAA,UAEA,WACC;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,WAAU;AAAA,cAET,oBAAU,kBAAa;AAAA;AAAA,UAC1B;AAAA,WAEJ,IAEA,8CAAC,SAAI,WAAU,uCAAsC,wBAErD;AAAA;AAAA,IAEJ,GACF;AAAA,KAEJ;AAEJ;;;ACrRA,IAAAC,UAAuB;AAEvB,IAAAC,+BAA4B;AAC5B,IAAAC,4BAAgC;AAChC,IAAAC,sBAQO;AACP,IAAAC,wBAAwD;;;ACHlD,IAAAC,uBAAA;AANN,SAAS,MAAM,EAAE,WAAW,GAAG,MAAM,GAAkC;AACrE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MAEV;AAAA,QAAC;AAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAW,GAAG,kBAAkB,SAAS;AAAA,UACxC,GAAG;AAAA;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAkC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAkC;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAeA,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAA+B;AACrE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAA+B;AACtE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAA+B;AACtE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AChGA,yBAAmC;;;ACEnC,IAAAC,iBAAkB;AAElB,IAAAC,eAA6B;AAC7B,IAAAC,wBAAiC;AACjC,mBAAkB;;;ACNlB,mBAAkB;AAClB,iBAAgB;AAEhB,aAAAC,QAAM,OAAO,WAAAC,OAAG;AAEhB,IAAO,sBAAQ,aAAAD;;;ACHR,IAAM,iBAAiB,CAC5B,OACAE,SACA,mBAAsD,CAAC,MACpD;AACH,MAAI,CAACA,QAAQ,QAAO;AACpB,MAAI,SAAS,QAAQ,UAAU,MAAM,UAAU,OAAW,QAAO;AAGjE,MAAIA,QAAO,WAAW,SAAS,GAAG;AAChC,UAAM,MAAMA,QAAO,QAAQ,WAAW,EAAE;AACxC,WAAO,iBAAiB,GAAG,IAAI,iBAAiB,GAAG,EAAE,KAAK,IAAI;AAAA,EAChE;AAGA,QAAM,CAAC,MAAM,GAAG,IAAIA,QAAO,MAAM,GAAG;AAEpC,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,oBAAM,KAAK,EAAE,OAAO,OAAO,YAAY;AAAA,IAChD,KAAK;AACH,YAAM,SAAS,oBAAM,KAAK,EAAE,QAAQ,IAAI,oBAAM,KAAK,EAAE,IAAI,IAAI,oBAAM,KAAK;AACxE,aAAO,OAAO,OAAO,kBAAkB;AAAA,IACzC,KAAK;AACH,YAAM,WAAW,oBAAM,KAAK,EAAE,QAAQ,IAAI,oBAAM,KAAK,EAAE,IAAI,IAAI,oBAAM,KAAK;AAC1E,aAAO,SAAS,OAAO,qBAAqB;AAAA,IAC9C,KAAK;AACH,aAAO,GAAG,oBAAM,EAAE,KAAK,oBAAM,KAAK,GAAG,KAAK,CAAC;AAAA,IAC7C,KAAK;AACH,aAAO,GAAG,oBAAM,EAAE,KAAK,oBAAM,KAAK,GAAG,OAAO,CAAC;AAAA,IAC/C,KAAK;AACH,aAAO,GAAG,oBAAM,EAAE,KAAK,oBAAM,KAAK,GAAG,MAAM,CAAC;AAAA,IAC9C,KAAK;AACH,aAAO,oBAAM,KAAK,EAAE,OAAO,OAAO;AAAA,IACpC,KAAK;AACH,aAAO,OAAO,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,CAAC;AAAA,IACnD,KAAK;AACH,aAAO,IAAI,KAAK,aAAa,SAAS;AAAA,QACpC,OAAO;AAAA,QACP,UAAU,OAAO;AAAA,MACnB,CAAC,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,IACzB,KAAK;AACH,aAAO,OAAO,KAAK,EAAE,YAAY;AAAA,IACnC,KAAK;AACH,aAAO,OAAO,KAAK,EAAE,YAAY;AAAA,IACnC;AACE,aAAO;AAAA,EACX;AACF;;;AFOmD,IAAAC,uBAAA;AA9CnD,IAAM,mBAAmB,CAAC,OAAe;AAEvC,MAAI,IAAI,GAAG,KAAK,EAAE,YAAY;AAC9B,MAAI,sBAAsB,KAAK,CAAC,GAAG;AACjC,QAAI,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,OAAK,IAAI,CAAC,EAAE,KAAK,EAAE;AAAA,EACxD;AAEA,QAAM,QAAgC;AAAA,IACpC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACA,MAAI,CAAC,EAAE,WAAW,GAAG,GAAG;AACtB,UAAM,QAAQ,EAAE,YAAY;AAC5B,QAAI,MAAM,KAAK,EAAG,KAAI,MAAM,KAAK;AAAA,QAC5B,QAAO;AAAA,EACd;AACA,MAAI,CAAC,sBAAsB,KAAK,CAAC,EAAG,QAAO;AAC3C,QAAM,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AACpC,QAAM,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AACpC,QAAM,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAEpC,QAAM,cAAc,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AACnD,SAAO,aAAa,MAAM,YAAY;AACxC;AAGO,IAAM,gBAAgB,CAAC,QAAkB;AAC9C,MAAI,OAAO,KAAM,QAAO;AAGxB,MAAI,eAAAC,QAAM,eAAe,GAAG,EAAG,QAAO;AAGtC,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,SAAU,QAAO;AAG/D,MAAI,MAAM,QAAQ,GAAG,EAAG,QAAO,IAAI,IAAI,CAAC,GAAG,MAAM,8CAAC,eAAAA,QAAM,UAAN,EAAwB,wBAAc,CAAC,KAAnB,CAAqB,CAAiB;AAG5G,MAAI,OAAO,QAAQ,UAAU;AAC3B,QAAI,UAAU,OAAO,OAAO,IAAI,SAAS,SAAU,QAAO,IAAI;AAC9D,QAAI,WAAW,OAAO,OAAO,IAAI,UAAU,SAAU,QAAO,IAAI;AAChE,QAAI;AACF,aAAO,KAAK,UAAU,GAAG;AAAA,IAC3B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAGA,SAAO,OAAO,GAAG;AACnB;AAEO,IAAM,sBAAsB,CACjC,UACA,eACA,OACA,KACA,kBAA4D,CAAC,GAC7DC,SACA,mBAAsD,CAAC,GACvD,SACG;AACH,QAAM,iBAAiB,eAAe,OAAOA,SAAQ,gBAAgB;AACrE,QAAM,WAAW,MAAM,eAAe,QAAQ;AAE9C,UAAQ,UAAU;AAAA;AAAA,IAEhB,KAAK;AACH,aAAO,8CAAC,UAAM,sBAAY,gBAAe;AAAA,IAE3C,KAAK;AACH,aACE,8CAAC,UAAK,WAAU,2BACb,yBAAe,YAAY,OAAO,UAAU,GAC/C;AAAA,IAGJ,KAAK;AACH,aAAO,8CAAC,UAAM,yBAAe,YAAY,OAAOA,OAAM,GAAE;AAAA,IAE1D,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,GAAG,eAAe,UAAU,EAAE,GAAG,YAAY,cAAc;AAAA,UACjE,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAW,2BAA2B,eAAe,aAAa,EAAE;AAAA,UAEnE,yBAAe,SAAS;AAAA;AAAA,MAC3B;AAAA;AAAA,IAIJ,KAAK;AACH,aACE,8CAAC,SAAI,WAAU,YACb;AAAA,QAAC,aAAAC;AAAA,QAAA;AAAA,UACC,KACE,YACA,kBACA,eAAe,YACf;AAAA,UAEF,KAAK,eAAe,OAAO;AAAA,UAC3B,OAAO,eAAe,SAAS;AAAA,UAC/B,QAAQ,eAAe,UAAU;AAAA,UACjC,WAAW,gBAAgB,eAAe,UAAU,iBAAiB,EAAE,IAAI,eAAe,aAAa,EAAE;AAAA,UACzG,OAAO;AAAA,YACL,cAAc,eAAe,UAAU,QAAQ;AAAA,YAC/C,WAAW;AAAA,UACb;AAAA;AAAA,MACF,GACF;AAAA,IAGJ,KAAK;AACH,UAAI,CAAC,eAAgB,QAAO;AAE5B,aACE;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,eAAe;AAAA,UACxB,MAAM,eAAe;AAAA,UACrB,QAAQ,eAAe;AAAA,UACvB,UAAU,eAAe;AAAA,UACzB,WAAW,eAAe;AAAA,UAC1B,OAAO;AAAA,YACL,GAAI,eAAe,QAAQ,EAAE,OAAO,eAAe,MAAM,IAAI,CAAC;AAAA,UAChE;AAAA;AAAA,MACF;AAAA,IAGJ,KAAK,SAAS;AACZ,YAAM,QACJ,eAAe,WAAW,cAAc,KACxC,eAAe,SACf;AAEF,UAAI,CAAC,eAAgB,QAAO;AAE5B,YAAM,YAAY,iBAAiB,KAAK;AACxC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,kDAAkD,KAAK,aAAa,SAAS,QAAQ,eAAe,aAAa,EAAE;AAAA,UAC9H,OAAO,EAAE,iBAAiB,OAAO,OAAO,UAAU;AAAA,UAEjD;AAAA;AAAA,MACH;AAAA,IAEJ;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,QAAQ,eAAe,SAAS;AACtC,YAAM,YAAYC,aAAY,eAAe,IAAgC;AAE7E,YAAM,gBACJ,OAAO,cAAc,aAAc,YAAuC;AAC5E,UAAI,CAAC,eAAgB,QAAO;AAE5B,YAAM,YAAY,iBAAiB,KAAK;AAExC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,qEAAqE,KAAK,eAAe,SAAS;AAAA,UAC7G,OAAO,EAAE,iBAAiB,OAAO,OAAO,UAAU;AAAA,UAEjD;AAAA,2BAAe,QACd,+EACG,0BAAgB,8CAAC,iBAAc,WAAU,WAAU,IAAK,8CAAa,kBAAZ,EAAgB,WAAU,WAAU,GAChG;AAAA,YAED;AAAA;AAAA;AAAA,MACH;AAAA,IAEJ;AAAA;AAAA,IAGA,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,eAAe,UAAU,KAAK,cAAc;AAAA,UAC3D,WAAW,8DAA8D,eAAe,aAAa,EAAE;AAAA,UAEtG,sBAAY,cAAc,SAAS;AAAA;AAAA,MACtC;AAAA,IAGJ,KAAK;AACH,aACE,+CAAC,WAAM,WAAU,2CACf;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,CAAC,CAAC;AAAA,YACX,UAAU,CAAC,MACT,eAAe,WAAW,KAAK,EAAE,OAAO,OAAO;AAAA,YAEjD,WAAU;AAAA;AAAA,QACZ;AAAA,QACA,8CAAC,SAAI,WAAU,qFACb,wDAAC,SAAI,WAAU,yGAAwG,GACzH;AAAA,SACF;AAAA,IAGJ,KAAK;AACH,aACE,8CAAC,SAAI,WAAU,uCACb;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,GAAG,YAAY,kBAAkB,CAAC,IAAI;AAAA;AAAA,MACxD,GACF;AAAA,IAGJ,KAAK,UAAU;AACb,YAAM,QAAQ,KAAK,MAAM,OAAO,YAAY,cAAc,KAAK,CAAC;AAChE,aACE,8CAAC,SAAI,WAAU,qBACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM;AAAA,UACN,WAAW,IAAI,QAAQ,oBAAoB;AAAA,UAC3C,MAAM,IAAI,QAAQ,YAAY;AAAA;AAAA,QAHzB;AAAA,MAIP,CACD,GACH;AAAA,IAEJ;AAAA,IAEA,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,KAAK,IAAI,cAAc;AAAA,UAChC,UAAU,CAAC,KAAK,IAAI,aAAa;AAAA,UACjC,UAAU,KAAK,IAAI,yBAAyB;AAAA;AAAA,MAC9C;AAAA,IAGJ,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,yBAAyB,EAAE,QAAQ,OAAO,YAAY,cAAc,EAAE;AAAA;AAAA,MACxE;AAAA;AAAA,IAIJ,KAAK,UAAU;AACb,YAAM,iBACJ,gBAAgB,eAAe,gBAAgB,KAC/C,gBAAgB,eAAe,UAAU;AAC3C,UAAI;AACF,eACE;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP;AAAA,YACC,GAAG;AAAA;AAAA,QACN;AAEJ,aAAO,8CAAC,UAAK,qCAAuB;AAAA,IACtC;AAAA;AAAA,IAGA;AACE,aAAO,8CAAC,UAAM,4BAAkB,KAAI;AAAA,EACxC;AACF;;;AD5RA,IAAM,mBAAe,uCAAwB;AAG7C,SAAS,eAAe,KAAU,MAAc;AAC9C,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,KAAK,QAAQ,MAAM,GAAG,GAAG,GAAG;AAC7D;AAEO,IAAM,oBAAoB,CAC/B,QACA,kBAAkB,CAAC,GACnB,mBAAmB,CAAC,MACjB;AACH,SAAO,OAAO,QAAQ,IAAI,CAAC,QAAa;AACtC,UAAM,cAAc,IAAI,eAAe,IAAI;AAG3C,UAAM,aAAa,CAAC,QAAa;AAC/B,UAAI,CAAC,IAAK,QAAO;AAGjB,UAAI,OAAO,UAAU,eAAe,KAAK,KAAK,WAAW,GAAG;AAC1D,eAAO,cAAc,IAAI,WAAW,CAAC;AAAA,MACvC;AAEA,UAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,cAAM,MAAM,eAAe,KAAK,WAAW;AAC3C,eAAO,cAAc,GAAG;AAAA,MAC1B;AAEA,aAAO,cAAc,IAAI,WAAW,CAAC;AAAA,IACvC;AAGA,UAAM,eAAe,IAAI,QAAQ,CAAC;AAElC,UAAM,aAAa,CAAC;AACpB,QAAI,IAAI,QAAQ,IAAI,OAAO,GAAG;AAC5B,aAAO,OAAO,YAAY,EAAE,MAAM,IAAI,KAAK,CAAC;AAAA,IAC9C,OAAO;AACL,aAAO,OAAO,YAAY,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,OAAO,iBAAiB,CAAC;AACrF,aAAO,OAAO,cAAc,EAAE,WAAW,SAAS,CAAC;AAAA,IACrD;AAEA,WAAO,aAAa,SAAS,YAAY;AAAA,MACvC,GAAG;AAAA,MACH,GAAG;AAAA;AAAA,MAEH,IAAI,IAAI,MAAM;AAAA,MACd,QAAQ,IAAI;AAAA,MACZ,MAAM,CAAC,SAAS;AACd,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,MAAM,KAAK,IAAI;AACrB,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,eAAe,IAAI;AAAA,MACnB,oBAAoB,IAAI;AAAA;AAAA,MAExB,MAAM;AAAA,QACJ,GAAG;AAAA;AAAA,QAEH,GAAI,aAAa,cAAc,EAAE,aAAa,aAAa,YAAY,IAAI,CAAC;AAAA,MAC9E;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AFmBQ,IAAAC,uBAAA;AAlCD,SAAS,UAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,GAAkC;AAChC,QAAM,CAAC,eAAe,gBAAgB,IAAU,iBAA6B,CAAC,CAAC;AAC/E,QAAM,CAAC,kBAAkB,mBAAmB,IAAU,iBAAkC,CAAC,CAAC;AAC1F,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAsD,IAAI;AACpG,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAS,EAAE;AACrD,QAAM,YAAY,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAEhD,QAAM,YAAY,CAAC,GAAG,OAAO;AAE7B,MAAI,oBAAoB;AACtB,cAAU,QAAQ;AAAA,MAChB,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC,EAAE,OAAAC,OAAM,MACf;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAASA,OAAM,qBAAqB;AAAA,UACpC,UAAUA,OAAM,gCAAgC;AAAA;AAAA,MAClD;AAAA,MAEF,MAAM;AAAA,QACJ,WAAW;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,MACA,eAAe;AAAA,MACf,oBAAoB;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,kBAAkB,EAAE,SAAS,WAAW,mBAAmB,CAAC;AAChF,QAAM,CAAC,cAAc,eAAe,IAAU,iBAAS,CAAC,CAAC;AAEzD,QAAM,CAAC,eAAe,gBAAgB,IAAU,iBAAS,QAAQ;AAEjE,QAAM,YAAQ,mCAAc;AAAA,IAC1B,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,mBAAmB,WAAW;AAAA,QAChC,YAAY;AAAA,UACV,WAAW,uBAAuB;AAAA,UAClC,UAAU;AAAA,QACZ;AAAA,MACF,IAAI,CAAC;AAAA,IACP;AAAA,IACA,oBAAoB,CAAC,CAAC;AAAA,IACtB,sBAAsB,CAAC,YAAY;AACjC,sBAAgB,CAAC,QAAQ;AACvB,cAAM,WAAW,OAAO,YAAY,aAAa,QAAQ,GAAG,IAAI;AAEhE,cAAM,eAAe,OAAO,KAAK,QAAQ,EACtC,OAAO,CAAC,QAAQ,SAAS,GAAG,CAAC,EAC7B,IAAI,CAAC,UAAU,UAAU,OAAO,KAAK,CAAC,CAAC;AAE1C,0BAAkB,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,uBAAuB;AAAA,IACvB,0BAA0B;AAAA,IAC1B,qBAAiB,qCAAgB;AAAA,IACjC,yBAAqB,yCAAoB;AAAA,IACzC,uBAAuB,cAAc,mBAAmB,eAAW,2CAAsB,IAAI;AAAA,IAC7F,kBAAkB,mBAAmB;AAAA,IACrC,WAAW,mBAAmB,WAAW,KAAK,KAAK,eAAe,aAAa,IAAI;AAAA,IACnF,GAAI,mBAAmB,WACnB;AAAA,MACA,oBAAoB,CAAC,YAAY;AAC/B,cAAM,OAAO,MAAM,SAAS,EAAE;AAC9B,cAAM,OAAO,OAAO,YAAY,aAAa,QAAQ,IAAI,IAAI;AAC7D,uBAAe,KAAK,WAAW,KAAK,QAAQ;AAAA,MAC9C;AAAA,IACF,IACE,CAAC;AAAA,EACP,CAAC;AAED,QAAM,iBAAiB,CAAC,aAAqB,YAAoB,kBAAkB,MAAM;AACvF,QAAI,cAAc,iBAAiB;AACjC,aAAO,MAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IAC3D;AAEA,UAAM,mBAAmB,KAAK,IAAI,cAAc,GAAG,CAAC;AACpD,UAAM,oBAAoB,KAAK,IAAI,cAAc,GAAG,UAAU;AAE9D,UAAM,qBAAqB,mBAAmB;AAC9C,UAAM,sBAAsB,oBAAoB,aAAa;AAE7D,QAAI,CAAC,sBAAsB,qBAAqB;AAC9C,aAAO,CAAC,GAAG,GAAG,GAAG,KAAK;AAAA,IACxB;AACA,QAAI,sBAAsB,CAAC,qBAAqB;AAC9C,aAAO,CAAC,GAAG,OAAO,aAAa,GAAG,aAAa,GAAG,UAAU;AAAA,IAC9D;AACA,QAAI,sBAAsB,qBAAqB;AAC7C,aAAO,CAAC,GAAG,OAAO,cAAc,GAAG,aAAa,cAAc,GAAG,KAAK;AAAA,IACxE;AACA,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAY,MAAM,aAAa,MAAM,IAAI,IAAI,MAAM,aAAa;AAEtE,QAAM,uBAAuB,CAAC,MAA4C;AACxE,UAAM,UAAU,OAAO,EAAE,OAAO,KAAK;AACrC,UAAM,mBAAmB,MAAM,SAAS,EAAE,WAAW;AACrD,mBAAe,kBAAkB,OAAO;AACxC,qBAAiB,OAAO;AAAA,EAC1B;AAEA,QAAM,kBAAwB,gBAAQ,MAAM;AAC1C,UAAM,UAAU,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,OAAO,UAAQ,OAAO,YAAY;AACvE,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,YAAY,CAAC;AAEjB,SACE,+CAAC,SAAI,WAAU,qCAEZ;AAAA,KAAC,WACA,+CAAC,SAAI,WAAW,uCACd;AAAA,qDAAC,SAAI,WAAU,kCACZ;AAAA,SAAC,CAAC,gBAAiB,+CAAC,OAAE,WAAU,uBAAsB;AAAA;AAAA,UAAiB,aAAa,eAAe,OAAO,KAAK;AAAA,WAAE;AAAA,QACjH,gBACC,+CAAC,SAAI,WAAU,2CACb;AAAA,yDAAC,SAAI,WAAU,mBACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,aAAY;AAAA,gBACZ,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,KAAK;AAAA,gBAC7C,WAAW,CAAC,MAAM;AAChB,sBAAI,EAAE,QAAQ,WAAW,gBAAgB;AACvC,mCAAe,WAAW,KAAK,CAAC;AAAA,kBAClC;AAAA,gBACF;AAAA,gBACA,WAAU;AAAA;AAAA,YACZ;AAAA,YACA,8CAAC,gCAAO,WAAU,yCAAwC,MAAM,IAAI;AAAA,aACtE;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAM,iBAAiB,WAAW,KAAK,CAAC;AAAA,cAClD;AAAA;AAAA,UAED;AAAA,WACF;AAAA,SAEJ;AAAA,MAGA,+CAAC,WACC;AAAA,sDAAC,kBAAe,SAAO,MACrB;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAU;AAAA,YACX;AAAA;AAAA,QAED,GACF;AAAA,QACA,+CAAC,kBAAe,OAAM,OAAM,WAAU,sBACpC;AAAA,wDAAC,SAAI,WAAU,4BAA2B,iCAAmB;AAAA,UAE7D,+CAAC,WAAM,WAAU,oEACf;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAC;AAAA,gBACpE,KAAK,CAAC,UAAU;AACd,sBAAI,OAAO;AACT,0BAAM,gBACJ,MAAM,kBAAkB,EAAE,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC,KAC1D,CAAC,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAC;AAAA,kBAChE;AAAA,gBACF;AAAA,gBACA,UAAU,CAAC,MAAM;AACf,wBAAM,kBAAkB,EAAE;AAAA,oBAAQ,CAAC,QACjC,IAAI,iBAAiB,EAAE,OAAO,OAAO;AAAA,kBACvC;AAAA,gBACF;AAAA;AAAA,YACF;AAAA,YAAE;AAAA,aAEJ;AAAA,UAEC,MAAM,kBAAkB,EAAE,IAAI,CAAC,WAAW;AACzC,kBAAM,SAAS,OAAO,UAAU;AAChC,mBACE,+CAAC,WAAsB,WAAU,mCAC/B;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS,OAAO,aAAa;AAAA,kBAC7B,UAAU,CAAC,MAAM,OAAO,iBAAiB,EAAE,OAAO,OAAO;AAAA;AAAA,cAC3D;AAAA,cACC,OAAO,WAAW,aACf,OAAO,EAAE,QAAQ,QAAuB,MAAM,CAAC,IAC/C,OAAO,WAAW,WAChB,SACA,OAAO;AAAA,iBAVH,OAAO,EAYnB;AAAA,UAEJ,CAAC;AAAA,WACH;AAAA,SACF;AAAA,OACF;AAAA,IAIF,+CAAC,SAAM,WAAU,eACf;AAAA,oDAAC,eACE,gBAAM,gBAAgB,EAAE,IAAI,CAAC,OAC5B,8CAAC,YACE,aAAG,QAAQ,IAAI,CAAC,QAAQ,UAAU;AACjC,cAAM,UAAU,OAAO,OAAO,WAAW;AACzC,cAAM,YAAY,OAAO,OAAO,aAAa;AAC7C,cAAM,UAAU,YAAY,QAAQ,OAAO,OAAO,KAAK,WAAW,MAAM;AAExE,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO,OAAO,OAAO,QAAQ;AAAA,cAC7B,UAAU,OAAO,OAAO,UAAU;AAAA,cAClC,UAAU,OAAO,OAAO,UAAU;AAAA,YACpC;AAAA,YAEA,yDAAC,SAAI,WAAU,qCACb;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,2BAA2B,UAAU,mBAAmB,EAAE;AAAA,kBACrE,SAAS,MAAM;AACb,wBAAI,CAAC,QAAS;AACd,0BAAM,SACJ,YAAY,QAAQ,OAAO,OAAO,MAAM,WAAW,QAAQ,QACvD,SACA;AACN,kCAAc,EAAE,KAAK,OAAO,OAAO,IAAI,KAAK,OAAO,CAAC;AACpD,mCAAe,OAAO,OAAO,IAAI,MAAM;AAAA,kBACzC;AAAA,kBAEC;AAAA,wDAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,WAAW,CAAC;AAAA,oBAC9D,WACC,gFACG;AAAA,kCAAY,SAAS,8CAAC,iCAAQ,MAAM,IAAI,WAAU,iBAAgB;AAAA,sBAClE,YAAY,UAAU,8CAAC,mCAAU,MAAM,IAAI,WAAU,iBAAgB;AAAA,sBACrE,CAAC,WAAW,8CAAC,qCAAY,MAAM,IAAI,WAAU,iBAAgB;AAAA,uBAChE;AAAA;AAAA;AAAA,cAEJ;AAAA,cAEC,aACC,+CAAC,WACC;AAAA,8DAAC,kBAAe,SAAO,MACrB;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,oBAElC,wDAAC,6CAAgB,MAAM,0CAAa,WAAU,yBAAwB;AAAA;AAAA,gBACxE,GACF;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,YAAY;AAAA,oBACZ,WAAU;AAAA,oBACV,iBAAiB;AAAA,oBAEjB;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,CAAC,MAAM;AACf,4BAAE,eAAe;AACjB,gCAAM,WAAW,IAAI,SAAS,EAAE,aAAa;AAC7C,gCAAM,QAAS,SAAS,IAAI,QAAQ,KAAgB;AACpD,8BAAI,kBAAkB,OAAO;AAC3B,2CAAe,EAAE,WAAW,OAAO,OAAO,IAAI,YAAY,MAAM,CAAC;AAAA,0BACnE;AAAA,wBACF;AAAA,wBACA,WAAU;AAAA,wBAEV;AAAA,wEAAC,WAAM,SAAQ,UAAS,WAAU,qCAAoC,8BAEtE;AAAA,0BACA;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,aAAY;AAAA,8BACZ,cAAe,OAAO,OAAO,eAAe,KAAK;AAAA,8BACjD,WAAU;AAAA,8BACV,cAAa;AAAA;AAAA,0BACf;AAAA,0BACA,8CAAC,SAAI,WAAU,oBACb;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,WAAU;AAAA,8BACX;AAAA;AAAA,0BAED,GACF;AAAA;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA,iBACF;AAAA,eAEJ;AAAA;AAAA,UAjFK,UAAU,OAAO,EAAE,IAAI,KAAK;AAAA,QAkFnC;AAAA,MAEJ,CAAC,KA5FY,gBAAgB,GAAG,EAAE,EA6FpC,CACD,GACH;AAAA,MAEA,8CAAC,aACE,oBACC,+EACG,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,8CAAC,YACE,sBAAY,IAAI,CAACC,IAAG,MACnB,8CAAC,aAAkB,WAAU,OAC3B,wDAAC,UAAK,WAAU,qDAAoD,KADtD,CAEhB,CACD,KALY,CAMf,CACD,GACH,IACE,MAAM,YAAY,EAAE,KAAK,SAC3B,MAAM,YAAY,EAAE,KAAK,IAAI,CAAC,QAC5B,8CAAC,YACE,cAAI,gBAAgB,EAAE,IAAI,CAAC,MAAM,WAAW,QAAQ;AACnD,cAAM,OAAO,KAAK,OAAO,UAAU,QAAe,CAAC;AACnD,cAAM,cAAc,MAAM;AAC1B,cAAM,aAAa,cAAc,IAAI,SAAS;AAE9C,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,2CAA2C,MAAM,aAAa,EAAE,IAAI,cAAc,6DAA6D,EAAE;AAAA,YAC5J,OAAO;AAAA,cACL,OAAO,KAAK,OAAO,QAAQ;AAAA,cAC3B,UAAU,KAAK,OAAO,UAAU;AAAA,cAChC,UAAU,KAAK,OAAO,UAAU;AAAA,cAChC,GAAI,MAAM,aAAa,CAAC;AAAA,YAC1B;AAAA,YACA,SAAS,MAAM;AACb,kBAAI,eAAe,aAAa;AAC9B,4BAAY,KAAK,IAAI,UAAU,KAAK,OAAO,EAAE;AAAA,cAC/C;AAAA,YACF;AAAA,YAEC;AAAA,kDAAW,KAAK,OAAO,UAAU,MAAM,KAAK,WAAW,CAAC;AAAA,cAExD,cAAc,cAAc,WAAW,SAAS,KAC/C,8CAAC,SAAI,WAAU,uJACZ,qBAAW,IAAI,CAAC,WAAW;AAC1B,sBAAM,WAAW,OAAO,OAAO,YAAY,OAAO,SAAS;AAC3D,uBACE;AAAA,kBAAC;AAAA;AAAA,oBAEC,WAAW,qDAAqD,WAAW,+CAA+C,+BAA+B;AAAA,oBACzJ,SAAS,CAAC,UAAU;AAClB,4BAAM,gBAAgB;AACtB,0BAAI,UAAU;AACZ,sCAAc,KAAK,IAAI,UAAU,QAAQ;AAAA,sBAC3C,OAAO;AACL,sCAAc,KAAK,IAAI,UAAU,KAAK,OAAO,EAAE;AAAA,sBACjD;AAAA,oBACF;AAAA,oBACA,OAAO,OAAO;AAAA,oBAEb,iBAAO;AAAA;AAAA,kBAZH,OAAO;AAAA,gBAad;AAAA,cAEJ,CAAC,GACH;AAAA;AAAA;AAAA,UAtCG,QAAQ,KAAK,EAAE,IAAI,SAAS;AAAA,QAwCnC;AAAA,MAEJ,CAAC,KAlDY,IAAI,EAoDnB,CACD,IAED,8CAAC,YACC,wDAAC,aAAU,SAAS,YAAY,QAAQ,WAAU,oBAChD,wDAAC,UAAK,WAAU,sFAAqF,yBAErG,GACF,GACF,GAEJ;AAAA,OACF;AAAA,IAGC,cACC,+CAAC,SAAI,WAAU,yDACZ;AAAA,OAAC,WACA,+CAAC,SAAI,WAAU,2BACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,YACP,UAAU;AAAA,YACV,WAAU;AAAA,YAET,0BAAgB,IAAI,CAAC,SACpB,+CAAC,YAAkB,OAAO,MACvB;AAAA;AAAA,cAAK;AAAA,iBADK,IAEb,CACD;AAAA;AAAA,QACH;AAAA,QACA,+CAAC,SAAI;AAAA;AAAA,UACG,MAAM,SAAS,EAAE,WAAW,YAAY;AAAA,UAAE;AAAA,UAAK;AAAA,WACvD;AAAA,SACF;AAAA,MAEF,+CAAC,SAAI,WAAU,2BACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,MAAM,aAAa;AAAA,YAClC,UAAU,CAAC,MAAM,qBAAqB;AAAA,YACtC,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,QACC;AAAA,UACC,MAAM,SAAS,EAAE,WAAW,YAAY;AAAA,UACxC,MAAM,aAAa;AAAA,UACnB;AAAA,QACF,EAAE,IAAI,CAAC,SAAS,UACd;AAAA,UAAC;AAAA;AAAA,YAEC,UAAU,YAAY;AAAA,YACtB,SAAS,MAAM,OAAO,YAAY,YAAY,MAAM,aAAa,UAAU,CAAC;AAAA,YAC5E,WAAW,4BAA4B,MAAM,SAAS,EAAE,WAAW,YAAY,MAAM,UACjF,4BACA,UAAU,IAAI,YAAY,QAAQ,mBAAmB,gBAAgB;AAAA,YAExE;AAAA;AAAA,UAPI;AAAA,QAQP,CACD;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,MAAM,SAAS;AAAA,YAC9B,UAAU,CAAC,MAAM,iBAAiB;AAAA,YAClC,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,SACF;AAAA,OACF;AAAA,KAEJ;AAEJ;;;AMtfM,IAAAC,uBAAA;AA5BN,IAAMC,SAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA0B;AACxB,QAAM,aAAa,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC;AACvD,QAAM,UAAU,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAE9C,QAAM,eAAe,OAAO,SAAS;AAErC,SACE,8CAAC,SAAI,WAAW,GAAG,aAAa,EAAE,cAAc,OAC9C;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAS;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,qBAAqB,eAAe,OAAQ,IAAI;AAAA,MAChD,cAAc,CAAC,WAAW,aAAa;AACrC,uBAAe,EAAE,MAAM,YAAY,GAAG,cAAc,SAAS,CAAC;AAAA,MAChE;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,CAAC,KAAK,QAAQ,eAAe,EAAE,SAAS,KAAK,YAAY,IAAI,CAAC;AAAA,MAC5E,gBAAgB,CAAC,YAAY,iBAAiB,EAAE,WAAW,QAAQ,WAAW,YAAY,QAAQ,WAAW,CAAC;AAAA,MAC9G,gBAAgB,CAAC,SAAS,iBAAiB,EAAE,YAAY,KAAK,CAAC;AAAA,MAC/D;AAAA,MACA,aAAa,CAAC,MAAM,aAAa;AAC/B,sBAAc,EAAE,IAAI,KAAK,IAAI,QAAQ,MAAM,SAAS,CAAC;AAAA,MACvD;AAAA,MACA,aAAa,CAAC,SAAS;AACrB,sBAAc,KAAK,EAAE;AAAA,MACvB;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,IAAO,gBAAQA;;;AC5Df,IAAAC,wBAIO;AAOH,IAAAC,uBAAA;AAFJ,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC5D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAA+B;AAC7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oCAAoC,SAAS;AAAA,MAC1D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,EAAE,GAAG,MAAM,GAA+B;AAChE,SAAO,8CAAC,QAAG,aAAU,mBAAmB,GAAG,OAAO;AACpD;AAOA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAwB;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAc,WAAW,SAAS;AAAA,MAClC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT,eAAe;AAAA,UACb,SAAS,WAAW,YAAY;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,GAAgD;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW,GAAG,0BAA0B,SAAS;AAAA,MAChD,GAAG;AAAA,MAEJ;AAAA,sDAAC,yCAAgB;AAAA,QACjB,8CAAC,UAAK,WAAU,mBAAkB,sBAAQ;AAAA;AAAA;AAAA,EAC5C;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,GAAG;AACL,GAAgD;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW,GAAG,0BAA0B,SAAS;AAAA,MAChD,GAAG;AAAA,MAEJ;AAAA,sDAAC,UAAK,WAAU,mBAAkB,kBAAI;AAAA,QACtC,8CAAC,0CAAiB;AAAA;AAAA;AAAA,EACpB;AAEJ;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,GAAiC;AAC/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW,GAAG,2CAA2C,SAAS;AAAA,MACjE,GAAG;AAAA,MAEJ;AAAA,sDAAC,4CAAmB,WAAU,UAAS;AAAA,QACvC,8CAAC,UAAK,WAAU,WAAU,wBAAU;AAAA;AAAA;AAAA,EACtC;AAEJ;;;ACtCQ,IAAAC,uBAAA;AA5DR,IAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AACF,MAA6B;AAE3B,QAAM,iBAAiB,MAAM;AAC3B,UAAM,QAA6B,CAAC;AAEpC,QAAI,cAAc,iBAAiB;AACjC,aAAO,MAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IAC3D;AAEA,UAAM,mBAAmB,KAAK,IAAI,cAAc,GAAG,CAAC;AACpD,UAAM,oBAAoB,KAAK,IAAI,cAAc,GAAG,UAAU;AAE9D,UAAM,qBAAqB,mBAAmB;AAC9C,UAAM,sBAAsB,oBAAoB,aAAa;AAE7D,QAAI,CAAC,sBAAsB,qBAAqB;AAC9C,YAAM,YAAY,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAC3D,aAAO,CAAC,GAAG,WAAW,OAAO,UAAU;AAAA,IACzC;AAEA,QAAI,sBAAsB,CAAC,qBAAqB;AAC9C,YAAM,aAAa,MAAM;AAAA,QACvB,EAAE,QAAQ,EAAE;AAAA,QACZ,CAAC,GAAG,MAAM,aAAa,IAAI;AAAA,MAC7B;AACA,aAAO,CAAC,GAAG,OAAO,GAAG,UAAU;AAAA,IACjC;AAEA,QAAI,sBAAsB,qBAAqB;AAC7C,YAAM,cAAc,MAAM;AAAA,QACxB,EAAE,QAAQ,EAAE;AAAA,QACZ,CAAC,GAAG,MAAM,mBAAmB;AAAA,MAC/B;AACA,aAAO,CAAC,GAAG,OAAO,GAAG,aAAa,OAAO,UAAU;AAAA,IACrD;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,SAAiB;AACzC,QAAI,QAAQ,KAAK,QAAQ,cAAc,SAAS,aAAa;AAC3D,mBAAa;AAAA,QACX;AAAA,QACA,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,cAAc,eAAe;AAEnC,SACE,+CAAC,SAAI,WAAU,2DAEb;AAAA,mDAAC,SAAI,WAAU,2BACb;AAAA,oDAAC,OAAE,WAAU,mDAAkD,6BAAe;AAAA,MAC9E;AAAA,QAAC;AAAA;AAAA,UACC,cAAc,OAAO,OAAO;AAAA,UAC5B,eAAe,CAAC,UAAU;AACxB,yBAAa,EAAE,MAAM,GAAG,cAAc,OAAO,KAAK,EAAE,CAAC;AAAA,UACvD;AAAA,UAEA;AAAA,0DAAC,iBAAc,WAAU,aACvB,wDAAC,eAAY,aAAY,UAAS,GACpC;AAAA,YACA,+CAAC,iBACC;AAAA,4DAAC,cAAW,OAAM,KAAI,eAAC;AAAA,cACvB,8CAAC,cAAW,OAAM,MAAK,gBAAE;AAAA,cACzB,8CAAC,cAAW,OAAM,MAAK,gBAAE;AAAA,cACzB,8CAAC,cAAW,OAAM,MAAK,gBAAE;AAAA,eAC3B;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,8CAAC,cAAW,WAAU,eACpB,yDAAC,qBACC;AAAA,oDAAC,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,UAC/C,WAAW,gBAAgB,IAAI,mCAAmC;AAAA;AAAA,MACpE,GACF;AAAA,MAEC,YAAY,IAAI,CAAC,YAAY,UAC5B,8CAAC,kBACE,yBAAe,QACd,8CAAC,sBAAmB,IAEpB;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,iBAAiB,UAAoB;AAAA,UACpD,UAAU,gBAAgB;AAAA,UAC1B,WAAU;AAAA,UAET;AAAA;AAAA,MACH,KAViB,KAYrB,CACD;AAAA,MAED,8CAAC,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,UAC/C,WAAW,gBAAgB,aAAa,mCAAmC;AAAA;AAAA,MAC7E,GACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEA,IAAO,qBAAQ;;;ACnIf,IAAAC,iBAAwB;AAExB,IAAAC,wBAAmC;;;ACAnC,yBAAoC;AACpC,IAAAC,wBAAgC;AAOvB,IAAAC,uBAAA;AAHT,SAASC,WAAU;AAAA,EACjB,GAAG;AACL,GAAyD;AACvD,SAAO,8CAAoB,yBAAnB,EAAwB,aAAU,aAAa,GAAG,OAAO;AACnE;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,GAAG;AACL,GAAyD;AACvD,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,4BAA4B,SAAS;AAAA,MAClD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE,8CAAoB,2BAAnB,EAA0B,WAAU,QACnC;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAC,yCAAgB,WAAU,+GAA8G;AAAA;AAAA;AAAA,EAC3I,GACF;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MACT,GAAG;AAAA,MAEJ,wDAAC,SAAI,WAAW,GAAG,aAAa,SAAS,GAAI,UAAS;AAAA;AAAA,EACxD;AAEJ;;;AC1DI,IAAAC,uBAAA;AAFJ,SAAS,KAAK,EAAE,WAAW,GAAG,MAAM,GAAgC;AAClE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAgC;AACvE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,8BAA8B,SAAS;AAAA,MACpD,GAAG;AAAA;AAAA,EACN;AAEJ;AAyBA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAgC;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,QAAQ,SAAS;AAAA,MAC9B,GAAG;AAAA;AAAA,EACN;AAEJ;;;AFpBQ,IAAAC,uBAAA;AA5BR,SAAS,SACP,MACA,KACkB;AAClB,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,KAAK,GAAG;AACjB;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB,QAAQ;AAAA,EACR;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA4B;AAE1B,QAAM,WAAoB,wBAAQ,MAAM;AACtC,QAAI,MAAM,QAAQ,MAAM,IAAI,GAAG;AAC7B,aAAO,MAAM;AAAA,IACf;AACA,WAAO,CAAC;AAAA,EACV,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,MAAI,SAAS;AACX,WACE,8CAAC,QAAK,WAAW,GAAG,UAAU,SAAS,GACrC,yDAAC,eAAY,WAAU,8CACrB;AAAA,oDAAC,sCAAa,WAAU,8CAA6C;AAAA,MACrE,8CAAC,UAAK,WAAU,sCAAqC,mCAErD;AAAA,OACF,GACF;AAAA,EAEJ;AAEA,MAAI,KAAK,WAAW,GAAG;AACrB,WACE,8CAAC,QAAK,WAAW,GAAG,UAAU,SAAS,GACrC,wDAAC,eAAY,WAAU,+CAA8C,mCAErE,GACF;AAAA,EAEJ;AAEA,SACE,8CAAC,QAAK,WAAW,GAAG,UAAU,SAAS,GACrC,wDAACC,YAAA,EAAU,MAAK,UAAS,aAAW,MAAC,cAAa,WAChD,yDAAC,iBAAc,OAAM,WAAU,WAAU,YACvC;AAAA,kDAAC,cAAW,WAAU,uEACpB;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA,wDAAC,aAAU,WAAU,2BAClB,iBACH;AAAA;AAAA,IACF,GACF;AAAA,IAEA,8CAAC,oBAAiB,SAAO,MACvB,wDAAC,eAAY,WAAU,aACrB,wDAAC,QAAG,WAAU,uDACX,eAAK,IAAI,CAAC,MAAM,UAAU;AAEzB,YAAM,KAAM,KAAa,MAAM;AAC/B,YAAM,WAAW,SAAS,MAAM,QAAQ;AACxC,YAAM,iBAAiB,SAAS,MAAM,cAAc;AACpD,YAAM,eAAe,SAAS,MAAM,YAAY;AAEhD,YAAM,YAAY,OAAO,YAAY,EAAE;AACvC,YAAM,kBACJ,kBAAkB,OAAO,OAAO,cAAc,IAAI;AACpD,YAAM,gBACJ,gBAAgB,OAAO,IAAI,KAAK,YAAmB,IAAI;AAEzD,aACE,+CAAC,QAAY,WAAU,iBACrB;AAAA,sDAAC,UAAK,WAAU,uHACd,wDAAC,SAAI,WAAU,8CACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,YACF;AAAA;AAAA,QACF,GACF,GACF;AAAA,QAEA;AAAA,UAACA;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,aAAW;AAAA,YACX,WAAU;AAAA,YAEV,yDAAC,iBAAc,OAAO,QAAQ,KAAK,EAAE,IAAI,WAAU,YACjD;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,kBACF;AAAA,kBAEA,yDAAC,SAAI,WAAU,uBACb;AAAA,kEAAC,UAAK,WAAU,oCACb,qBACH;AAAA,oBACA,8CAAC,UAAK,WAAU,qCACb,cAAI,KAAK,eAAe,WAAW;AAAA,sBAClC,WAAW;AAAA,sBACX,WAAW;AAAA,oBACb,CAAC,EAAE,OAAO,iBAAiB,oBAAI,KAAK,CAAC,GACvC;AAAA,qBACF;AAAA;AAAA,cACF;AAAA,cAEA,8CAAC,oBAAiB,WAAU,QACzB,6BACC,8CAAC,OAAE,WAAU,+DACV,2BACH,GAEJ;AAAA,eACF;AAAA;AAAA,QACF;AAAA,WA5CO,EA6CT;AAAA,IAEJ,CAAC,GACH,GACF,GACF;AAAA,KACF,GACF,GACF;AAEJ;AAEA,IAAO,0BAAQ;;;AGlKf,IAAAC,iBAA+C;AAE/C,IAAAC,wBAAkC;AAClC,IAAAC,eAAiB;AACjB,IAAAC,qBAAuC;;;ACAvC,sBAAiC;AACjC,IAAAC,wBAAsB;AAOb,IAAAC,uBAAA;AAHT,SAAS,OAAO;AAAA,EACd,GAAG;AACL,GAAsD;AACpD,SAAO,8CAAiB,sBAAhB,EAAqB,aAAU,UAAU,GAAG,OAAO;AAC7D;AAQA,SAAS,aAAa;AAAA,EACpB,GAAG;AACL,GAAwD;AACtD,SAAO,8CAAiB,wBAAhB,EAAuB,aAAU,iBAAiB,GAAG,OAAO;AACtE;AAQA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,GAAG;AACL,GAAyD;AACvD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,GAAG;AACL,GAEG;AACD,SACE,+CAAC,gBAAa,aAAU,iBACtB;AAAA,kDAAC,iBAAc;AAAA,IACf;AAAA,MAAiB;AAAA,MAAhB;AAAA,QACC,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QAEH;AAAA;AAAA,UACA,mBACC;AAAA,YAAiB;AAAA,YAAhB;AAAA,cACC,aAAU;AAAA,cACV,WAAU;AAAA,cAEV;AAAA,8DAAC,+BAAM;AAAA,gBACP,8CAAC,UAAK,WAAU,WAAU,mBAAK;AAAA;AAAA;AAAA,UACjC;AAAA;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,gDAAgD,SAAS;AAAA,MACtE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA,GAAG;AACL,GAAuD;AACrD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC5D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA,GAAG;AACL,GAA6D;AAC3D,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA;AAAA,EACN;AAEJ;;;AClIA,oBAAsB;AAaf,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,UAAU;AAAA,IACd,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,QAAQ,cACJ;AAAA,MACA,OAAO;AAAA,MACP,SAAS,aAAa,MAAM;AAAA,MAAE;AAAA,IAChC,IACE;AAAA,EACN;AAEA,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,0BAAM,QAAQ,OAAO,OAAO;AAC5B;AAAA,IACF,KAAK;AACH,0BAAM,MAAM,OAAO,OAAO;AAC1B;AAAA,IACF,KAAK;AACH,0BAAM,KAAK,OAAO,OAAO;AACzB;AAAA,IACF,KAAK;AACH,0BAAM,QAAQ,OAAO,OAAO;AAC5B;AAAA,IACF;AACE,+BAAM,OAAO,OAAO;AAAA,EACxB;AACF;AASO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,cAAc;AAChB,GAA0C;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,SAAK,qBAAM,OAAO;AAAA,MACtB;AAAA,MACA,UAAU;AAAA,MACV,aAAa;AAAA,MACb,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS,MAAM;AACb,kBAAQ,IAAI;AACZ,8BAAM,QAAQ,EAAE;AAAA,QAClB;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS,MAAM;AACb,kBAAQ,KAAK;AACb,8BAAM,QAAQ,EAAE;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AF2EU,IAAAC,uBAAA;AA3IV,IAAM,OAAO,CAAC,EAAE,WAAW,OAAO,MAAM,cAAc,UAAU,YAAY,YAAY,OAAO,QAAQ,WAAW,aAAa,YAAY,SAAS,eAAe,gBAAgB,MAAiB;AAClM,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAwB,IAAI;AAC9D,QAAM,sBAAkB,gCAAY;AAEpC,WAAS,WAAW,QAAe,CAAC,GAAU;AAC5C,UAAM,UAAU,oBAAI,IAAiB;AAGrC,UAAM,QAAQ,UAAQ;AACpB,cAAQ,IAAI,KAAK,SAAS;AAAA,QACxB,GAAG;AAAA,QACH,KAAK,KAAK,cAAc,KAAK;AAAA,QAC7B,QAAQ,KAAK,eAAe,MAAM;AAAA,QAClC,YAAY;AAAA,QACZ,UAAU,CAAC;AAAA,MACb,CAAC;AAAA,IACH,CAAC;AAED,UAAM,YAAmB,CAAC;AAG1B,UAAM,QAAQ,UAAQ;AACpB,UAAI,KAAK,aAAa,UAAU,GAAG;AACjC,cAAM,SAAS,QAAQ,IAAI,KAAK,aAAa,UAAU,CAAC;AACxD,YAAI,QAAQ;AACV,iBAAO,SAAU,KAAK,QAAQ,IAAI,KAAK,OAAO,CAAE;AAAA,QAClD;AAAA,MACF,OAAO;AACL,kBAAU,KAAK,QAAQ,IAAI,KAAK,OAAO,CAAE;AAAA,MAC3C;AAAA,IACF,CAAC;AAGD,UAAM,YAAY,CAAC,SACjB,KACG,KAAK,CAAC,GAAG,OAAO,EAAE,cAAc,MAAM,EAAE,cAAc,EAAE,EACxD,IAAI,UAAQ;AACX,YAAM,iBAAiB,UAAU,KAAK,YAAY,CAAC,CAAC;AACpD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,QACV,YAAY,eAAe,SAAS;AAAA,MACtC;AAAA,IACF,CAAC;AAEL,WAAO,UAAU,SAAS;AAAA,EAC5B;AAEA,QAAM,cAAU,wBAAQ,MAAM;AAC5B,QAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC;AAClC,QAAI,WAAW,SAAU,QAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC9D,WAAO,WAAW,IAAI;AAAA,EACxB,GAAG,CAAC,MAAM,QAAQ,WAAW,aAAa,UAAU,CAAC;AAErD,QAAM,cACJ;AACF,QAAM,qBAAqB,gBAAgB,OAAO,aAAa,MAAM;AACrE,QAAM,uBAAuB,kBAAkB,SAAS,eAAe,MAAM;AAC7E,QAAM,gBAAgB,GAAG,kBAAkB,IAAI,oBAAoB;AACnE,QAAM,eAAe,GAAG,qBAAqB,mBAAmB,QAAQ,OAAO,WAAW,IAAI,kBAAkB,IAAI,uBAAuB,qBAAqB,QAAQ,SAAS,aAAa,IAAI,kBAAkB;AAEpN,QAAM,WAAW,CAAC,SAAkB;AAClC,QAAI,CAAC,KAAM,QAAO;AAGlB,UAAM,QAAQ,CAAC,MAAc;AAC3B,aAAO,EAAE,SAAS,GAAG,EAAG,KAAI,EAAE,MAAM,GAAG,EAAE;AACzC,aAAO;AAAA,IACT;AACA,UAAM,UAAU,MAAM,YAAY,mBAAmB,EAAE;AACvD,UAAM,SAAS,MAAM,IAAI;AAEzB,QAAI,CAAC,WAAW,CAAC,OAAQ,QAAO;AAGhC,QAAI,YAAY,OAAQ,QAAO;AAG/B,QAAI,QAAQ,WAAW,MAAM,KAAK,OAAO,WAAW,OAAO,EAAG,QAAO;AAGrE,UAAM,cAAc,QAAQ,MAAM,GAAG,EAAE,IAAI;AAC3C,UAAM,aAAa,OAAO,MAAM,GAAG,EAAE,IAAI;AAEzC,WAAO,CAAC,CAAC,eAAe,CAAC,CAAC,cAAc,gBAAgB;AAAA,EAC1D;AAEA,QAAM,iBAAiB,CAAC,QAAa;AACnC,QAAI,CAAC,MAAM,QAAQ,IAAI,QAAQ,EAAG,QAAO;AACzC,WAAO,IAAI,SAAS,KAAK,CAAC,UAAe,SAAS,MAAM,GAAG,CAAC;AAAA,EAC9D;AAEA,QAAM,aAAS,8BAAU;AAEzB,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAS,KAAK;AAC1D,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAwB,IAAI;AAEhE,QAAM,wBAAoB;AAAA,IACxB,CAAC,GAAwC,QAAgB;AACvD,UAAI,WAAW;AACb,UAAE,eAAe;AACjB,sBAAc,GAAG;AAEjB,wBAAgB;AAAA,UACd,SAAS;AAAA,UACT,OAAO;AAAA,UACP,aAAa,6BAA6B,GAAG;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY;AACd,wBAAkB,KAAK;AACvB,aAAO,KAAK,UAAU;AAAA,IACxB;AAAA,EACF;AAEA,MAAI;AAEJ,QAAM,mBAAmB,CAAC,KAAU,UAAkB;AACpD,UAAM,SAAS,SAAS,IAAI,GAAG,KAAK,eAAe,GAAG;AACtD,UAAM,eAAe,CAAC,aAAa,SAAS,gBAAgB,cAAc,IAAI,aAAa,EAAE,EAAE,KAAK,GAAG;AACvG,UAAM,aAAa;AAAA,MACjB,GAAG,IAAI;AAAA,MACP,iBAAiB,UAAU,gBAAgB,gBAAgB;AAAA,MAC3D,OAAO,UAAU,kBAAkB,kBAAkB;AAAA,MACrD,QAAQ,UAAU,kBAAkB,aAAa,eAAe,KAAK;AAAA,IACvE;AAEA,QAAI,MAAM,QAAQ,IAAI,QAAQ,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI,YAAY;AAC5E,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM,cAAc;AAAA,UACpB,cAAc,CAAC,SAAS,aAAa,OAAO,QAAQ,IAAI;AAAA,UAExD;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,YAAY;AAAA,gBAC1B,cAAc,MAAM;AAClB,+BAAa,OAAO;AACpB,+BAAa,KAAK;AAAA,gBACpB;AAAA,gBACA,cAAc,MAAM;AAClB,4BAAU,WAAW,MAAM,aAAa,IAAI,GAAG,GAAG;AAAA,gBACpD;AAAA,gBACA,OAAO;AAAA,gBAEN;AAAA,sBAAI;AAAA,kBACL,8CAAC,qCAAY,WAAU,sBAAqB;AAAA;AAAA;AAAA,YAC9C;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,YAAY;AAAA,gBACZ,WAAU;AAAA,gBACV,cAAc,MAAM;AAClB,+BAAa,OAAO;AACpB,+BAAa,KAAK;AAAA,gBACpB;AAAA,gBACA,cAAc,MAAM;AAClB,4BAAU,WAAW,MAAM,aAAa,IAAI,GAAG,GAAG;AAAA,gBACpD;AAAA,gBAEC,cAAI,SAAS,IAAI,CAAC,MAAWC,WAC5B;AAAA,kBAAC;AAAA;AAAA,oBAEC,SAAO;AAAA,oBACP,WAAU;AAAA,oBAEV;AAAA,sBAAC,aAAAC;AAAA,sBAAA;AAAA,wBACC,MAAM,KAAK,OAAO;AAAA,wBAClB,QAAQ,KAAK,mBAAmB,WAAW;AAAA,wBAC3C,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,OAAO,GAAG;AAAA,wBACpD,eAAK;AAAA;AAAA,oBAAO;AAAA;AAAA,kBART,KAAK,MAAMD;AAAA,gBASlB,CACD;AAAA;AAAA,YACH;AAAA;AAAA;AAAA,QA3CK;AAAA,MA4CP;AAAA,IAEJ;AAEA,WAAO,IAAI,MACT;AAAA,MAAC,aAAAC;AAAA,MAAA;AAAA,QAEC,MAAM,IAAI;AAAA,QACV,QAAQ,IAAI,mBAAmB,WAAW;AAAA,QAC1C,WAAW;AAAA,QAAc,OAAO;AAAA,QAChC,SAAS,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,GAAG;AAAA,QAElD,cAAI;AAAA;AAAA,MANA;AAAA,IAOP,IAEA,8CAAC,SAAgB,WAAW,cAAc,OAAO,YAAY,MAAK,UAAS,UAAU,GAClF,cAAI,UADG,KAEV;AAAA,EAEJ;AAEA,QAAM,mBAAmB,MACvB,+CAAC,gBACC;AAAA,mDAAC,uBAAoB,WAAU,+EAC7B;AAAA,oDAAC,8BAAK,WAAU,WAAU;AAAA,MAAE;AAAA,OAE9B;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,YAAY;AAAA,QACZ,WAAU;AAAA,QAET,kBAAQ,IAAI,CAAC,KAAU,MAAc;AACpC,gBAAM,cACJ,MAAM,QAAQ,IAAI,QAAQ,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI;AAEhE,cAAI,aAAa;AACf,mBACE,+CAAC,mBACC;AAAA,4DAAC,0BAAuB,WAAU,2HAC/B,cAAI,QACP;AAAA,cACA,8CAAC,0BAAuB,WAAU,4CAC/B,cAAI,SAAS,IAAI,CAAC,MAAW,UAC5B;AAAA,gBAAC;AAAA;AAAA,kBAEC,SAAO;AAAA,kBACP,WAAU;AAAA,kBAEV,wDAAC,aAAAA,SAAA,EAAK,MAAM,KAAK,OAAO,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,OAAO,GAAG,GAAI,eAAK,QAAO;AAAA;AAAA,gBAJ5F,KAAK,MAAM;AAAA,cAKlB,CACD,GACH;AAAA,iBAdoB,CAetB;AAAA,UAEJ;AAEA,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,SAAO;AAAA,cACP,WAAU;AAAA,cAEV,wDAAC,aAAAA,SAAA,EAAK,MAAM,IAAI,OAAO,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,GAAG,GAAI,cAAI,QAAO;AAAA;AAAA,YAJzF;AAAA,UAKP;AAAA,QAEJ,CAAC;AAAA;AAAA,IACH;AAAA,KACF;AAGF,QAAM,cAAc,aAAa,eAAe,YAAY,eAAe,WAAW;AACtF,QAAM,eAAe,aAAa,eAAe,YAAY;AAE7D,SACE,gFACE;AAAA,mDAAC,SAAI,WAAW,GAAG,YAAY,SAAS,GAAG,OACxC;AAAA,uBAAiB,SAChB,gBACE,8CAAC,SAAI,WAAU,kBACb,wDAAC,SAAI,WAAW,cAAc,eAAe,yBAAyB,UAAU,IAC7E,kBAAQ,IAAI,gBAAgB,GAC/B,GACF,IAGF,8CAAC,SAAI,WAAU,kBACb,wDAAC,SAAI,WAAW,cAAc,eAAe,yBAAyB,UAAU,IAC7E,kBAAQ,IAAI,gBAAgB,GAC/B,GACF;AAAA,MAGD,gBAAgB,SACf,eAAe,8CAAC,SAAK,2BAAiB,GAAE,IAExC,8CAAC,SAAI,WAAU,kBAAkB,2BAAiB,GAAE;AAAA,OAExD;AAAA,IAEA,8CAAC,UAAO,MAAM,gBAAgB,cAAc,mBAC1C,yDAAC,iBAAc,WAAU,aACvB;AAAA,qDAAC,gBACC;AAAA,sDAAC,eAAY,2BAAa;AAAA,QAC1B,8CAAC,qBAAkB,kFAEnB;AAAA,SACF;AAAA,MACA,+CAAC,gBACC;AAAA,sDAAC,UAAO,WAAU,2CAA0C,SAAQ,WAAU,SAAS,MAAM,kBAAkB,KAAK,GAAG,oBAEvH;AAAA,QACA,8CAAC,UAAO,WAAU,0CAAyC,SAAS,aAAa,uBAAS;AAAA,SAC5F;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEA,IAAO,eAAQ;;;AGhUf,IAAAC,iBAA2C;;;ACC3C,uBAAkC;AAS9B,IAAAC,uBAAA;AALJ,SAAS,gBAAgB;AAAA,EACvB,gBAAgB;AAAA,EAChB,GAAG;AACL,GAA2D;AACzD,SACE;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,QAAQ;AAAA,EACf,GAAG;AACL,GAAuD;AACrD,SACE,8CAAC,mBACC,wDAAkB,uBAAjB,EAAsB,aAAU,WAAW,GAAG,OAAO,GACxD;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB,GAAG;AACL,GAA0D;AACxD,SAAO,8CAAkB,0BAAjB,EAAyB,aAAU,mBAAmB,GAAG,OAAO;AAC1E;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,GAAG;AACL,GAA0D;AACxD,SACE,8CAAkB,yBAAjB,EACC;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD,8CAAkB,wBAAjB,EAAuB,WAAU,sGAAqG;AAAA;AAAA;AAAA,EACzI,GACF;AAEJ;;;AD4Ec,IAAAC,uBAAA;AA9Hd,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,aAAa;AACf,MAAmB;AACjB,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,EAAE;AACjD,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AACpD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAc,IAAI;AAClE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAc,IAAI;AAEhE,gCAAU,MAAM;AACd,QAAI,cAAc;AAChB,qBAAe,YAAY;AAAA,IAC7B,OAAO;AACL,qBAAe,UAAU,OAAO,SAAS,IAAI,OAAO,CAAC,EAAE,OAAO,IAAI,IAAI;AAAA,IACxE;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,cAAc,CAAC,aAAqB;AACxC,mBAAe,QAAQ;AACvB,oBAAgB,QAAQ;AACxB,UAAM,EAAE,YAAY,YAAY,IAAI,iBAAiB,QAAQ,QAAQ;AAErE,uBAAmB,UAAU;AAC7B,wBAAoB,WAAW;AAAA,EACjC;AAEA,QAAM,YAAY,MAAM;AACtB,QAAI,CAAC,UAAU,OAAO,WAAW,EAAG;AACpC,UAAM,eAAe,OAAO,UAAU,CAAC,UAAe,MAAM,OAAO,MAAM,WAAW;AAEpF,QAAI,eAAe,MAAM,OAAO,QAAQ;AACtC,YAAM,kBAAkB,OAAO,YAAY;AAC3C,kBAAY,gBAAgB,OAAO,CAAC;AACpC,qBAAe,IAAI;AACnB;AAAA,IACF;AAEA,QAAI,eAAe,OAAO,SAAS,GAAG;AACpC,YAAM,eAAe,OAAO,YAAY;AACxC,kBAAY,aAAa,OAAO,CAAC;AACjC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,UAAU,OAAO,SAAS,IAAI,OAAO,OAAO,SAAS,CAAC,EAAE,OAAO,IAAI;AACrF,QAAM,WAAW,eAAe;AAEhC,QAAM,eAAe,CAAC,aAAkB;AACtC,QAAI,CAAC,YAAY,aAAa,eAAe,gBAAgB,UAAW;AACxE,mBAAe,QAAQ;AACvB,QAAI,gBAAgB;AAClB,sBAAgB,QAAQ;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,mBAAmB,CACvB,OACA,MACA,OAAY,SAC4C;AACxD,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,EAAE,YAAY,MAAM,aAAa,KAAK;AAAA,IAC/C;AACA,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,aAAO,EAAE,YAAY,MAAM,aAAa,KAAK;AAAA,IAC/C;AAEA,eAAW,QAAQ,OAAO;AACxB,YAAM,cAAc,QAAQ;AAE5B,UAAI,OAAO,OAAO,MAAM,MAAM;AAC5B,eAAO;AAAA,UACL,YAAY,QAAQ;AAAA,UACpB,aAAa;AAAA,QACf;AAAA,MACF;AAEA,YAAM,SAAS,iBAAiB,MAAM,UAAU,MAAM,WAAW;AACjE,UAAI,OAAO,aAAa;AACtB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,EAAE,YAAY,MAAM,aAAa,KAAK;AAAA,EAC/C;AAEA,gCAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3C,yBAAmB,IAAI;AACvB,0BAAoB,IAAI;AACxB;AAAA,IACF;AAEA,UAAM,EAAE,YAAY,YAAY,IAAI,iBAAiB,QAAQ,YAAY;AAEzE,uBAAmB,UAAU;AAC7B,wBAAoB,WAAW;AAAA,EACjC,GAAG,CAAC,cAAc,MAAM,CAAC;AAEzB,QAAM,uBAAuB,eAAgB,kBAAkB,OAAO,MAAM;AAC5E,QAAM,WAAW,wBAAwB,WAAW;AAEpD,SACE,8CAAC,SAAI,WAAsB,OACzB;AAAA,IAAC;AAAA;AAAA,MAAI,WAAW;AAAA;AAAA;AAAA;AAAA,UAIZ,WAAW,eAAe,KAAK;AAAA;AAAA,MAIjC;AAAA,sDAAC,SAAI,WAAU,sDACb,wDAAC,YAAO,WAAU,+CAChB,wDAAC,SAAI,WAAU,yBAAwB,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAC/E,wDAAC,UAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,kBAAiB,GACxF,GACF,GACF;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YAAI,WAAW;AAAA;AAAA;AAAA,YAGZ,WAAW,yBAAyB,SAAS;AAAA;AAAA,YAG9C,oBACC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,GAAG,UAC1B;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMP,WAAW,WAAW,EAAE;AAAA;AAAA,gBAE5B,UAAQ;AAAA;AAAA,cATH;AAAA,YAUP,CACD,KACE,UAAU,CAAC,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,OAAiF,UAAkB;AAChJ,oBAAM,eAAe,OAAO,UAAU,CAAC,MAAW,EAAE,OAAO,MAAM,WAAW;AAC5E,oBAAM,mBAAmB,wBAAwB,SAAS;AAC1D,oBAAM,WAAW,CAAC,wBAAwB,UAAU;AACpD,kBAAI,aAAa;AAEjB,kBAAI,MAAM,eAAe,WAAW,KAAK,MAAM,cAAc,OAAO;AAClE,6BAAa;AAAA,cACf;AAEA,kBAAI,aAAa,MAAM,SAAS;AAChC,kBAAI,MAAM,OAAO,MAAM,mBAAmB,OAAO,KAAK,kBAAkB,OAAO,MAAM,MAAM,OAAO,GAAG;AACnG,6BAAa,mBAAmB,SAAS,KAAK;AAC9C,6BAAa;AAEb,oBAAI,iBAAiB,eAAe,WAAW,KAAK,iBAAiB,cAAc,OAAO;AACxF,+BAAa;AAAA,gBACf;AAAA,cACF;AACA,oBAAM,WAAW,OAAO,MAAM,OAAO,MAAM,WAAW,MAAM,OAAO,IAAI,KAAK,UAAU,MAAM,OAAO,CAAC;AACpG,qBACE,8CAAC,eAAAC,QAAM,UAAN,EACC,yDAAC,WAAQ,eAAe,KAAK,yBAAuB,MAClD;AAAA,8DAAC,kBAAe,SAAO,MACrB;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW;AAAA;AAAA;AAAA;AAAA,sBAIX,WAAW,sCACL,mBAAmB,aACjB,iEAAiE;AAAA,sBACzE,WAAW,8BAA8B,EAAE;AAAA;AAAA,oBAE3C,SAAS,MAAM;AACb,0BAAI,qBAAsB;AAC1B,mCAAa,MAAM,OAAO,CAAC;AAAA,oBAC7B;AAAA,oBAEC;AAAA;AAAA,gBACH,GACF;AAAA,gBAEA,8CAAC,kBAAe,WAAU,6DACxB,wDAAC,UAAK,wDAAC,OAAG,sBAAW,GAAI,GAC3B;AAAA,gBAGC,CAAC,YAAY,QAAQ,OAAO,SAAS,KACpC,8CAAC,SAAI,WAAU,+DAA8D;AAAA,mBA3BvB,QA6B1D,KA9BmB,QA+BrB;AAAA,YAEJ,CAAC;AAAA;AAAA,QACH;AAAA,QAGC,aACC;AAAA,UAAC;AAAA;AAAA,YAAI,WAAW;AAAA;AAAA,cAEZ,WAAW,yBAAyB,SAAS;AAAA;AAAA,YAG/C;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA;AAAA;AAAA,4BAGG,WAAW,kCAAkC,iBAAiB;AAAA;AAAA,gBAE5E,SAAS;AAAA,gBACT;AAAA,gBAEC,mBAAS,gBAAgB;AAAA;AAAA,YAC5B;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ,GACF;AAEJ;AAEA,IAAO,iBAAQ;;;AE7OX,IAAAC,uBAAA;AAFJ,IAAM,SAAS,CAAC,EAAE,WAAW,MAAM,MAAoB;AACrD,SACE,8CAAC,SAAI,WAAW,GAAG,SAAS,IAAI,OAAc;AAElD;AAEA,IAAO,iBAAQ;;;ACHT,IAAAC,uBAAA;;;ACAA,IAAAC,uBAAA;;;ACaE,IAAAC,uBAAA;;;AChBR,IAAAC,iBAA0D;AAE1D,IAAAC,wBAAmC;AACnC,IAAAC,gBAAkB;AAClB,IAAAC,eAAiB;AACjB,IAAAC,qBAA0B;;;ACP1B,IAAAC,UAAuB;AAEvB,sBAAiC;AAQ/B,IAAAC,uBAAA;AAJF,IAAM,SAAe,mBAGnB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,OAAO,cAA8B,qBAAK;AAE1C,IAAM,cAAoB,mBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,IACrD,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAA8B,sBAAM;AAEhD,IAAM,iBAAuB,mBAG3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,eAAe,cAA8B,yBAAS;;;AD4ChD,IAAAC,uBAAA;AAnES,SAAR,OAAwB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA;AAAA,EACb,OAAO,CAAC;AAAA,EACR,cAAc,CAAC;AAAA,EACf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AACF,GAAgB;AACd,QAAM,aAAS,8BAAU;AAGzB,QAAM,CAAC,YAAY,aAAa,QAAI;AAAA,IAClC;AAAA,EACF;AAEA,gCAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,UAAI,OAAO,aAAa,IAAK,eAAc,QAAQ;AAAA,eAC1C,OAAO,aAAa,KAAM,eAAc,QAAQ;AAAA,UACpD,eAAc,SAAS;AAAA,IAC9B;AAEA,eAAW;AACX,WAAO,iBAAiB,UAAU,UAAU;AAC5C,WAAO,MAAM,OAAO,oBAAoB,UAAU,UAAU;AAAA,EAC9D,GAAG,CAAC,CAAC;AAEL,QAAM,OAAO,cAAc;AAE3B,QAAM,WAAW,SAAS;AAC1B,QAAM,WAAW,SAAS;AAC1B,QAAM,YAAY,SAAS;AAE3B,QAAM,wBAAoB;AAAA,IACxB,CAAC,GAAQ,QAAgB;AACvB,UAAI,WAAW;AACb,UAAE,eAAe;AACjB,wBAAgB,EAAE,SAAS,QAAQ,OAAO,6BAA6B,GAAG,qBAAqB,UAAU,IAAK,CAAC;AAAA,MACjH,OAAO;AACL,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,IACF;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,oBAAgB,wBAAQ,MAAM;AAClC,QAAI,WAAW,WAAW,SAAS,QAAQ;AACzC,aAAO,QAAQ,IAAI,CAAC,OAAY;AAAA,QAC9B,GAAG;AAAA,QACH,QAAQ,EAAE,QAAQ;AAAA,MACpB,EAAE;AAAA,IACJ;AACA,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,SAAS,IAAI,CAAC;AAE1B,QAAM,oBAAoB,MACxB,8CAAC,SAAI,WAAU,eACb,yDAAC,SAAI,WAAU,8DACb;AAAA,kDAAC,gCAAO,WAAU,kFAAiF;AAAA,IACnG;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,WAAW,CAAC,UAAU;AACpB,cAAI,MAAM,QAAQ,SAAS;AACzB,kBAAM,QAAS,MAAM,OAA4B;AACjD,uBAAW;AAAA,cACT,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KACF,GACF;AAGF,SACE,gFAEE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV;AAAA,QAEA,yDAAC,SAAI,WAAU,mEAGb;AAAA;AAAA,YAAC,aAAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,CAAC,MAAM,kBAAkB,GAAG,GAAG;AAAA,cACxC,WAAU;AAAA,cAET,qBACC,8CAAC,cAAAC,SAAA,EAAM,KAAK,UAAU,KAAK,SAAS,OAAO,KAAK,QAAQ,IAAI,IAE5D,8CAAC,UAAK,WAAU,+BAA8B,kBAAI;AAAA;AAAA,UAEtD;AAAA,UAGC,aACC,8CAAC,SAAI,WAAU,yCACZ,wBAAc,IAAI,CAAC,SAClB;AAAA,YAAC,aAAAD;AAAA,YAAA;AAAA,cAEC,MAAM,KAAK;AAAA,cACX,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,GAAG;AAAA,cAC7C,WAAU;AAAA,cAET,eAAK;AAAA;AAAA,YALD,KAAK;AAAA,UAMZ,CACD,GACH;AAAA,UAIF,+CAAC,SAAI,WAAU,+BAGX;AAAA,0BAAa,aAAa,8CAAC,qBAAkB;AAAA,YAG/C,+CAAC,SAAI,WAAU,oDACb;AAAA,4DAAC,UAAO,SAAQ,SAAQ,MAAK,QAC3B,wDAAC,8BAAK,WAAU,4CAA2C,GAC7D;AAAA,cAEC,cAAc,YAAY,EAAE,qBAAqB,eAAe,MAAM,OAAO,UAAU,IAAI,IAC1F,8CAAC,UAAK,WAAU,oHACb,sBACH,IAEA,CAAC,qBACC,8CAAC,UAAK,WAAU,4DAA2D;AAAA,eAGjF;AAAA,YAGA,+CAAC,gBACC;AAAA,4DAAC,uBAAoB,SAAO,MAC1B,yDAAC,SAAI,WAAU,8CACZ;AAAA,iBAAC,YAAY,YACZ,8CAAC,QAAG,WAAU,4CACX,oBACH;AAAA,gBAEF,8CAAC,UAAO,WAAU,WACf,0BAAgB,WACf,8CAAC,eAAY,KAAI,0CAAyC,KAAI,WAAU,IAExE,8CAAC,SAAI,WAAU,+FACZ,sBAAY,QAAQ,GACvB,GAEJ;AAAA,iBAEE,YAAY,aACZ,8CAAC,UAAO,SAAQ,SAAQ,MAAK,QAC3B,wDAAC,8BAAK,WAAU,WAAU,GAC5B;AAAA,iBAEJ,GACF;AAAA,cAEA,+CAAC,uBAAoB,OAAM,OAAM,WAAU,6BACxC;AAAA,4BAAY,IAAI,CAAC,SAChB,8CAAC,oBACC,wDAAC,aAAAA,SAAA,EAAK,MAAM,KAAK,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,GAAG,GAChE,eAAK,QACR,KAHqB,KAAK,EAI5B,CACD;AAAA,iBAGC,YAAY,aACZ,gFACE;AAAA,gEAAC,yBAAsB;AAAA,kBACtB,cAAc,IAAI,CAAC,SAClB,8CAAC,oBACC,wDAAC,aAAAA,SAAA,EAAK,MAAM,KAAK,KAAK,SAAS,CAAC,MAAM,kBAAkB,GAAG,KAAK,GAAG,GAChE,eAAK,QACR,KAHqB,KAAK,EAI5B,CACD;AAAA,mBACH;AAAA,iBAEJ;AAAA,eACF;AAAA,aACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,IAGC,YACC,8CAAC,SAAI,WAAU,OACb,wDAAC,qBAAkB,GACrB;AAAA,KAEJ;AAEJ;;;AEtOA,IAAAE,iBAAiE;AAEjE,IAAAC,gBAAkB;AAClB,sBAWO;AA4HG,IAAAC,uBAAA;AAvHV,IAAM,iBAAiB,MAAM;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,EAC9C;AACA,SAAO,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,QAAQ,MAAM,CAAC;AAC3D;AAEA,IAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,MAAqB;AACnB,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAgB,CAAC,CAAC;AAChD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAc,IAAI;AAChD,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,KAAK;AACtD,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,CAAC;AAEhD,QAAM,gBAAgB,SAAS,UAAW,MAAM,QAA8B,CAAC;AAC/E,QAAM,mBAAmB,SAAS,eAAe;AAEjD,gCAAU,MAAM;AACd,QAAI,QAAQ;AACV,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,gBAAY,4BAAY,OAAO,SAAiB;AACpD,QAAI,CAAC,OAAQ;AAEb,UAAM,YAAY;AAElB,QAAI;AACF,sBAAgB,IAAI;AAEpB,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,MAAM,KAAK,SAAS;AAAA,QACpB,OAAO,MAAM,SAAS;AAAA,MACxB,CAAC;AAED,YAAM,cAAc,MAAM,iBAAiB,cAAAC;AAE3C,YAAM,MAAM,MAAM,YAAY,IAAI,GAAG,MAAM,IAAI,OAAO,SAAS,CAAC,IAAI;AAAA,QAClE,iBAAiB;AAAA,MACnB,CAAC;AAED,UAAI,CAAC,WAAW;AACd,YAAIC,QAAO,CAAC;AACZ,YAAI,OAAO;AACX,YAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,UAAAA,QAAO,IAAI,KAAK;AAChB,iBAAO,IAAI,KAAK,QAAQ;AAAA,QAC1B,WAAW,MAAM,QAAQ,IAAI,IAAI,GAAG;AAClC,UAAAA,QAAO,IAAI;AAAA,QACb;AACA,mBAAWA,KAAI;AACf,mBAAW,IAAI;AAAA,MACjB;AAAA,IACF,SAAS,KAAU;AACjB,UAAI,CAAC,WAAW;AACd,wBAAgB;AAAA,UACd,OAAO,KAAK,UAAU,MAAM,WAAW,KAAK,WAAW;AAAA,UACvD,SAAS;AAAA,QACX,CAAC;AACD,mBAAW,CAAC,CAAC;AAAA,MACf;AAAA,IACF,UAAE;AACA,UAAI,CAAC,UAAW,iBAAgB,KAAK;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,QAAQ,KAAK,CAAC;AAElB,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,cAAU,WAAW;AAAA,EACvB,GAAG,CAAC,QAAQ,aAAa,SAAS,CAAC;AAEnC,QAAM,mBAAmB,CAAC,YAAoB;AAC5C,QAAI,YAAY,UAAU,KAAK,UAAU,QAAQ,OAAQ;AACzD,mBAAe,OAAO;AAAA,EACxB;AAEA,QAAM,WAAO,wBAAQ,MAAM;AACzB,QAAI,CAAC,MAAM,QAAQ,aAAa,KAAK,cAAc,WAAW,KAAK,CAAC,WAAW,CAAC,WAAW;AACzF,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,cAAc,IAAI,CAAC,UAAe;AAAA,MACvC,GAAG;AAAA,MACH,CAAC,OAAO,GAAG,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MACpC,MAAM,eAAe;AAAA,IACvB,EAAE;AAAA,EACJ,GAAG,CAAC,eAAe,SAAS,SAAS,CAAC;AAEtC,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,kBAAkB,CAAC,UAAU,QAAQ,EAAE,SAAS,MAAM,eAAyB,IACjF,MAAM,kBACN;AAEJ,MAAI,oBAAoB,KAAK,WAAW,GAAG;AACzC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,kHAAkH,SAAS;AAAA,QACtI;AAAA,QAEA;AAAA,wDAAC,SAAI,WAAU,4BACb,yDAAC,SAAI,WAAU,2HACb;AAAA,0DAAC,SAAI,WAAU,gFAA+E;AAAA,YAC9F,8CAAC,UAAK,WAAU,+FAA8F,mCAE9G;AAAA,aACF,GACF;AAAA,UAEA,8CAAC,SAAI,WAAU,6GAA4G;AAAA,UAC3H,8CAAC,SAAI,WAAU,2HACb,wDAAC,SAAI,WAAU,+FACZ,WAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ;AAC9B,kBAAM,eAAe,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,IAAI,EAAE;AAC3D,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAW,kLAAkL,GAAG;AAAA,gBAChM,OAAO,EAAE,QAAQ,cAAc,gBAAgB,GAAG,MAAM,IAAI,IAAI;AAAA,gBAEhE;AAAA,gEAAC,SAAI,WAAU,mGAAkG;AAAA,kBACjH,8CAAC,SAAI,WAAU,sFAAqF;AAAA;AAAA;AAAA,cAL/F,OAAO,GAAG;AAAA,YAMjB;AAAA,UAEJ,CAAC,GACH,GACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,+CAAC,SAAI,WAAW,GAAG,SAAS,cAAc,OACvC;AAAA,2BAAuB,WACtB,+CAAC,SAAI,WAAU,+CACb;AAAA,qDAAC,SAAI,WAAU,yCAAwC;AAAA;AAAA,QAC/C,QAAQ;AAAA,QAAK;AAAA,QAAK,QAAQ;AAAA,QAAM;AAAA,QAAG,QAAQ,MAAM,eAAe;AAAA,QAAE;AAAA,SAC1E;AAAA,MACA,+CAAC,SAAI,WAAU,+DACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,gBAAgB,KAAK;AAAA,YAC/B,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,QACA,8CAAC,UAAK,WAAU,wFACb,uBACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,eAAe,QAAQ,SAAS;AAAA,YAC1C,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,SACF;AAAA,MAEA,+CAAC,SAAI,WAAU,8CACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,gBAAgB,KAAK;AAAA,YAC/B,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,QACA,8CAAC,UAAK,WAAU,+CACb,uBACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA,YAC/C,UAAU,eAAe,QAAQ,SAAS;AAAA,YAC1C,WAAU;AAAA,YAEV,wDAAC,UAAK,yBAAM;AAAA;AAAA,QACd;AAAA,SACF;AAAA,OACF;AAAA,IAKF,8CAAC,uCAAoB,OAAM,QAAO,QAAO,QACtC,wBAAc,QACb,+CAAC,4BAAS,MACR;AAAA,oDAAC,iCAAc,iBAAgB,OAAM;AAAA,MACrC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,OAAO;AAAA,UACP,YAAW;AAAA,UACX,UAAU;AAAA,UACV,eAAe,CAAC,UACd,OAAO,SAAS,EAAE,SAAS,KAAK,GAAG,MAAM,SAAS,EAAE,UAAU,GAAG,EAAE,CAAC,QAAQ;AAAA,UAE9E,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,UACR,WAAW;AAAA;AAAA,MACb;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,eAAe,CAAC,UAAkB,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,UAC9D,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,QAAQ,CAAC,WAAW,SAAS;AAAA,UAC7B,OAAO;AAAA;AAAA,MACT;AAAA,MACA,8CAAC,2BAAQ,WAAW,CAAC,UAAkB,CAAC,GAAG,KAAK,IAAI,OAAO,GAAG;AAAA,MAC9D,8CAAC,0BAAO,eAAe,iBAAwB,OAAM,UAAS;AAAA,MAC9D;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,UACnB,mBAAmB;AAAA;AAAA,MACrB;AAAA,OACF,IAEA,+CAAC,6BAAU,MACT;AAAA,oDAAC,UACC,yDAAC,oBAAe,IAAG,cAAa,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KACtD;AAAA,sDAAC,UAAK,QAAO,MAAK,WAAU,WAAU,aAAa,KAAK;AAAA,QACxD,8CAAC,UAAK,QAAO,OAAM,WAAU,WAAU,aAAa,GAAG;AAAA,SACzD,GACF;AAAA,MACA,8CAAC,iCAAc,iBAAgB,OAAM;AAAA,MACrC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA;AAAA,MACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,eAAe,CAAC,UAAkB,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,UAC9D,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,QAAQ,CAAC,WAAW,SAAS;AAAA,UAC7B,OAAO;AAAA;AAAA,MACT;AAAA,MACA,8CAAC,2BAAQ,WAAW,CAAC,UAAkB,GAAG,KAAK,KAAK;AAAA,MACpD;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL;AAAA,UACA,QAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAK;AAAA,UACL,mBAAmB;AAAA;AAAA,MACrB;AAAA,OACF,GAEJ;AAAA,KACF;AAEJ;AAEA,IAAO,mBAAQ,eAAAC,QAAM,KAAK,cAAc;;;AChTxC,IAAAC,iBAAoD;AAEpD,IAAAC,gBAAkB;AAClB,IAAAC,mBAMO;AAgKO,IAAAC,uBAAA;AA3Jd,IAAMC,kBAAiB,MAAM;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,IAAW;AAAA,EAC9C;AACA,SAAO,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,QAAQ,MAAM,CAAC;AAC3D;AAEA,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAqB;AACnB,QAAM,cAAc,MAAM,eAAe;AACzC,QAAM,aAAa,MAAM;AAEzB,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAgB,CAAC,CAAC;AAChD,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,KAAK;AAEtD,QAAM,gBAAgB,SAAS,UAAW,MAAM,QAA8B,CAAC;AAC/E,QAAM,mBAAmB,SAAS,eAAe;AAEjD,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,QAAI,YAAY;AAEhB,UAAM,YAAY,YAAY;AAC5B,UAAI;AACF,wBAAgB,IAAI;AAEpB,cAAM,cAAc,MAAM,iBAAiB,cAAAC;AAC3C,cAAM,MAAM,MAAM,YAAY,IAAI,QAAQ;AAAA,UACxC,iBAAiB;AAAA,QACnB,CAAC;AAED,YAAI,CAAC,WAAW;AACd,cAAIC,QAAO,CAAC;AACZ,cAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,GAAG;AACrD,YAAAA,QAAO,IAAI,KAAK;AAAA,UAClB,WAAW,MAAM,QAAQ,IAAI,IAAI,GAAG;AAClC,YAAAA,QAAO,IAAI;AAAA,UACb;AACA,qBAAWA,KAAI;AAAA,QACjB;AAAA,MACF,SAAS,KAAU;AACjB,YAAI,CAAC,WAAW;AACd,0BAAgB;AAAA,YACd,OAAO,KAAK,UAAU,MAAM,WAAW,KAAK,WAAW;AAAA,YACvD,SAAS;AAAA,UACX,CAAC;AACD,qBAAW,CAAC,CAAC;AAAA,QACf;AAAA,MACF,UAAE;AACA,YAAI,CAAC,UAAW,iBAAgB,KAAK;AAAA,MACvC;AAAA,IACF;AAEA,cAAU;AAEV,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,WAAO,wBAAQ,MAAM;AACzB,QAAI,CAAC,MAAM,QAAQ,aAAa,KAAK,cAAc,WAAW,EAAG,QAAO,CAAC;AACzE,WAAO,cAAc,IAAI,CAAC,UAAe;AAAA,MACvC,GAAG;AAAA,MACH,OAAO,KAAK,SAASF,gBAAe;AAAA,MACpC,CAAC,OAAO,GAAG,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MACpC,CAAC,SAAS,GAAG,KAAK,SAAS,KAAK;AAAA,IAClC,EAAE;AAAA,EACJ,GAAG,CAAC,eAAe,SAAS,SAAS,CAAC;AAEtC,QAAM,YAAQ;AAAA,IAAQ,MACpB,KAAK,OAAO,CAAC,KAAa,MAAW,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAAA,IAAG,CAAC,MAAM,OAAO;AAAA,EAClF;AAEA,QAAM,qBAAiB,wBAAQ,MAAM;AACnC,QAAI,SAAS,KAAS;AACpB,aAAO,IAAI,QAAQ,KAAS,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,IACrC;AACA,WAAO,MAAM,SAAS;AAAA,EACxB,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,gBAAY,wBAAQ,MAAM;AAC9B,QAAI,UAAU,EAAG,QAAO;AAExB,UAAM,aAAa,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK,EAAE;AACjF,UAAM,WAAW,MAAM,KAAK,IAAI,IAAI,WAAW,MAAM;AACrD,UAAM,WAAY,QAAQ,WAAY;AAEtC,WAAO,WAAW,IAAI,CAAC,MAAM,UAAU;AACrC,YAAM,QAAQ,KAAK,OAAO,KAAK;AAC/B,UAAI,QAAQ,YAAY,QAAQ,IAAI;AAClC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,CAAC,OAAO,GAAG,WAAW;AAAA,UACtB,WAAW;AAAA,QACb;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,OAAO,OAAO,CAAC;AAEzB,QAAM,cAAc,eAAe,YAAY,eAAe;AAE9D,QAAM,mBAAmB,MAAM;AAC7B,QAAI,YAAa,QAAO,EAAE,OAAO,IAAI,OAAO,IAAI;AAChD,QAAI,UAAU,UAAU,EAAG,QAAO,EAAE,OAAO,IAAI,OAAO,IAAI;AAC1D,WAAO,EAAE,OAAO,IAAI,OAAO,IAAI;AAAA,EACjC;AAEA,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,gCAAU,MAAM;AACd,UAAM,UAAU,WAAW,MAAM,WAAW,IAAI,GAAG,GAAG;AACtD,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB,wBAAQ,MAAM;AAClC,QAAI,CAAC,YAAa,QAAO;AACzB,WACE,8CAAC,SAAI,WAAU,6DACZ,oBAAU,IAAI,CAAC,GAAQ,UAAkB;AACxC,YAAM,cAAc,KAAK;AAAA,QAAK,CAAC,SAC7B,KAAK,SAAS,MAAM,EAAE,SAAS;AAAA,MACjC,IAAI,OAAO,KAAK,EAAE,OAAO;AAEzB,YAAM,eAAe,eAAe,MAChC,IAAI,cAAc,KAAM,QAAQ,CAAC,CAAC,MAClC,YAAY,eAAe;AAE/B,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UAEV;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,iBAAiB,EAAE,MAAM;AAAA;AAAA,YACpC;AAAA,YACA,+CAAC,SAAI,WAAU,kBACb;AAAA,4DAAC,UAAK,WAAU,uFACb,YAAE,SAAS,GACd;AAAA,cACA,+CAAC,SAAI,WAAU,6DACb;AAAA,8DAAC,UAAM,wBAAa;AAAA,gBACpB,+CAAC,UAAQ;AAAA,iCAAc,QAAS,KAAK,QAAQ,CAAC;AAAA,kBAAE;AAAA,mBAAC;AAAA,gBAChD,EAAE,aACD,8CAAC,UAAK,WAAU,iEAAgE,iBAEhF;AAAA,iBAEJ;AAAA,eACF;AAAA;AAAA;AAAA,QApBK,UAAU,KAAK;AAAA,MAqBtB;AAAA,IAEJ,CAAC,GACH;AAAA,EAEJ,GAAG,CAAC,WAAW,MAAM,WAAW,SAAS,OAAO,WAAW,CAAC;AAE5D,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,oBAAoB,KAAK,WAAW,GAAG;AACzC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,+HAA+H,SAAS;AAAA,QACnJ;AAAA,QAEA;AAAA,wDAAC,SAAI,WAAU,6GAA4G;AAAA,UAE3H,8CAAC,SAAI,WAAU,oBACb,yDAAC,SAAI,WAAU,2HACb;AAAA,0DAAC,SAAI,WAAU,gFAA+E;AAAA,YAC9F,8CAAC,UAAK,WAAU,+FAA8F,mCAE9G;AAAA,aACF,GACF;AAAA,UAEA,8CAAC,SAAI,WAAU,6DACZ,WAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,QACtB;AAAA,YAAC;AAAA;AAAA,cAEC,WAAW,kKAAkK,GAAG;AAAA,cAEhL;AAAA,8DAAC,SAAI,WAAU,mFAAkF;AAAA,gBACjG,+CAAC,SAAI,WAAU,oBACb;AAAA,gEAAC,SAAI,WAAU,8CAA6C;AAAA,kBAC5D,8CAAC,SAAI,WAAU,2DAA0D;AAAA,mBAC3E;AAAA;AAAA;AAAA,YAPK;AAAA,UAQP,CACD,GACH;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,EAAE,OAAO,MAAM,IAAI,iBAAiB;AAC1C,QAAM,cAAc;AACpB,QAAM,cAAc;AAEpB,SACE,+CAAC,SAAI,WAAW,uCAAuC,SAAS,IAAI,OAClE;AAAA,mDAAC,SAAI,WAAU,2FACb;AAAA,oDAAC,wCAAoB,OAAM,QAAO,QAAO,QACvC,yDAAC,6BACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,IAAG;AAAA,YACH,IAAG;AAAA,YACH;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,mBAAmB;AAAA,YACnB,mBAAmB;AAAA,YACnB,UAAU;AAAA,YAET,oBAAU,IAAI,CAAC,OAAY,UAC1B;AAAA,cAAC;AAAA;AAAA,gBAEC,MAAM,MAAM;AAAA,gBACZ,QAAQ,MAAM,YAAY,SAAS;AAAA,gBACnC,aAAa,MAAM,YAAY,MAAM;AAAA;AAAA,cAHhC,QAAQ,KAAK;AAAA,YAIpB,CACD;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,CAAC,OAAe,MAAc,YAAY;AACnD,oBAAM,QAAQ,WAAW,QAAQ,UAAU,QAAQ,QAAQ,SAAS,IAAI;AACxE,oBAAM,aAAa,KAAK,KAAK,CAAC,SAAc,KAAK,SAAS,MAAM,KAAK;AACrE,oBAAM,cAAc,aAAa,WAAW,OAAO,IAAI;AAEvD,oBAAM,iBAAiB,eAAe,MAClC,IAAI,cAAc,KAAM,QAAQ,CAAC,CAAC,MAClC,YAAY,eAAe;AAC/B,oBAAM,cAAe,cAAc,QAAS,KAAK,QAAQ,CAAC;AAE1D,qBAAO;AAAA,gBACL,GAAG,KAAK,KAAK,cAAc,KAAK,UAAU;AAAA,cAC5C;AAAA,YACF;AAAA,YACA,cAAc;AAAA,cACZ,iBAAiB;AAAA,cACjB,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,UAAU;AAAA,cACV,SAAS;AAAA,YACX;AAAA;AAAA,QACF;AAAA,SACF,GACF;AAAA,MAEC,QAAQ,KACP,8CAAC,SAAI,WAAW,+FAA+F,cAAc,iBAAiB,eAAe,uEAC3J,yDAAC,SAAI,WAAU,gCACZ;AAAA;AAAA,QACD,8CAAC,UAAK,WAAU,gFAA+E,mBAE/F;AAAA,SACF,GACF;AAAA,OAEJ;AAAA,IAEC;AAAA,KACH;AAEJ;AAEA,IAAO,mBAAQ,eAAAG,QAAM,KAAK,UAAU;;;ACzS1B,IAAAC,uBAAA;AANK,SAAR,cAA+B,EAAE,WAAW,OAAO,IAAI,OAAO,QAAQ,WAAW,SAAS,YAAY,IAAI,OAAO,KAAK,QAAQ,SAAS,YAAY,MAAM,QAAQ,GAAuB;AAE7L,SACE,8CAAC,SAAI,WAAsB,OACzB,yDAAC,SAAI,WAAU,kEACb;AAAA,kDAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,UAAQ;AAAA;AAAA,IACV,GACF;AAAA,IACA,8CAAC,SAAI,WAAU,QACb,yDAAC,SAAI,WAAU,2BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,UACvC,aAAY;AAAA,UACZ,WAAU;AAAA,UACV,UAAQ;AAAA;AAAA,MACV;AAAA,MACC,CAAC,UACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,YAAY,IAAI;AAAA,UAC/B,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MAED,CAAC,WACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM,aAAa,IAAI;AAAA,UAChC,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,OAEJ,GACF;AAAA,IACC,UACC,8CAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,QACvC,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAED,WACC,8CAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,QACxC,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAIF,8CAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,aAAa,EAAE,OAAO,KAAK;AAAA,QAC5C,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,IACA,8CAAC,SAAI,WAAU,QACb,wDAAC,YAAc,OAAO,MAAM,UAAU,SAAS,GACjD;AAAA,IACA,+CAAC,SAAI,WAAU,0BACb;AAAA,oDAAC,YAAO,WAAU,wDAAuD,qBAEzE;AAAA,MACA,8CAAC,YAAO,WAAU,+DAA8D,mBAEhF;AAAA,MACA,8CAAC,YAAO,WAAU,gDAA+C,kBAEjE;AAAA,OACF;AAAA,KACF,GACF;AAEJ;;;AC9FA,yBAAyB;AACzB,IAAAC,iBAAgD;AAM5C,IAAAC,uBAAA;AAJJ,IAAM,UAAU,CAAC,EAAE,GAAG,MAAM,MAAoB;AAC9C,QAAM,EAAE,QAAQ,SAAS,QAAI,6BAAS;AAEtC,SACE;AAAA,IAAC,eAAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAU;AAAA,MACV,OACE;AAAA,QACE,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,MACrB;AAAA,MAED,GAAG;AAAA;AAAA,EACN;AAEJ;","names":["ReactDOM","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_react","import_react","axios","import_jsx_runtime","import_jsx_runtime","import_react","React","import_jsx_runtime","Link","import_lucide_react","import_link","import_lucide_react","import_jsx_runtime","import_jsx_runtime","Link","import_react","import_react_fontawesome","import_jsx_runtime","prefix","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","Textarea","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","Label","import_jsx_runtime","Label","import_react","import_lucide_react","import_jsx_runtime","RadioGroup","import_jsx_runtime","RadioGroup","Label","import_react","import_jsx_runtime","Label","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_react","import_axios","getValueByPath","axios","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","Label","import_react","import_jsx_runtime","PhoneInputField","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_lucide_react","React","import_lucide_react","import_jsx_runtime","className","props","import_jsx_runtime","import_jsx_runtime","import_react","import_date_fns","import_jsx_runtime","React","import_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","value","id","React","import_free_solid_svg_icons","import_react_fontawesome","import_react_table","import_lucide_react","import_jsx_runtime","import_react","LucideIcons","import_lucide_react","dayjs","utc","format","import_jsx_runtime","React","format","Image","LucideIcons","import_jsx_runtime","table","_","import_jsx_runtime","Table","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_lucide_react","import_jsx_runtime","Accordion","import_jsx_runtime","import_jsx_runtime","Accordion","import_react","import_lucide_react","import_link","import_navigation","import_lucide_react","import_jsx_runtime","import_jsx_runtime","index","Link","import_react","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_image","import_link","import_navigation","React","import_jsx_runtime","import_jsx_runtime","Link","Image","import_react","import_axios","import_jsx_runtime","axios","data","React","import_react","import_axios","import_recharts","import_jsx_runtime","getRandomColor","axios","data","React","import_jsx_runtime","import_sonner","import_jsx_runtime","Sonner"]}
|