@geomak/ui 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icons/icons.tsx","../src/components/core/IconButton.tsx","../src/components/inputs/Button.tsx","../src/components/core/Modal.tsx","../src/components/core/Drawer.tsx","../src/components/core/Tooltip.tsx","../src/components/core/Tabs.tsx","../src/components/core/Tree.tsx","../src/components/core/ToggleButton.tsx","../src/components/core/Notification.tsx","../src/components/core/LoadingSpinner.tsx","../src/components/core/FadingBase.tsx","../src/components/core/List.tsx","../src/components/core/ScalableContainer.tsx","../src/components/core/GridCard.tsx","../src/components/core/OpaqueGridCard.tsx","../src/components/core/CatalogGrid.tsx","../src/components/core/CatalogCarousel.tsx","../src/components/core/Catalog.tsx","../src/components/core/MenuBarItem.tsx","../src/components/core/MenuBar.tsx","../src/components/core/ContextMenu.tsx","../src/components/core/Wizard.tsx","../src/components/inputs/SearchInput.tsx","../src/components/inputs/DropdownPill.tsx","../src/components/inputs/Dropdown.tsx","../src/components/core/Table.tsx","../src/components/core/Switch.tsx","../src/components/core/TopBar.tsx","../src/components/core/Sidebar.tsx","../src/components/core/AppShell.tsx","../src/components/core/ThemeProvider.tsx","../src/components/core/Skeleton.tsx","../src/components/inputs/TextInput.tsx","../src/components/inputs/NumberInput.tsx","../src/components/inputs/Password.tsx","../src/components/inputs/Checkbox.tsx","../src/components/inputs/Switch.tsx","../src/components/inputs/AutoComplete.tsx","../src/components/inputs/TreeSelect.tsx","../src/components/inputs/FileInput.tsx","../src/components/inputs/DatePicker.tsx"],"names":["jsx","jsxs","Fragment","useMemo","useReducedMotion","Dialog","AnimatePresence","motion","Dialog2","TooltipPrimitive","useState","useEffect","TabsPrimitive","Accordion","ToggleGroup","createContext","Toast","useContext","useRef","List","colors_default","useCallback","React","SearchInput","Popover","useId","SwitchPrimitive","vars","CheckboxPrimitive","SwitchPrimitive2","label","Popover2","Popover3","ChevronRight","DoubleChevronRight","ChevronDown"],"mappings":"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","file":"index.cjs","sourcesContent":["import React from 'react'\n\nconst Moon = ({ color = 'gray' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill={color} viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className=\"w-8 h-8\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z\" />\n </svg>\n)\n\nconst Sun = ({ color = 'yellow' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill={color} viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className=\"w-8 h-8\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z\" />\n </svg>\n)\n\nconst CheckCircle = ({ color = '#fff', size = 28 }) => (\n <svg width={size} height={size} viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14 0.25C6.40625 0.25 0.25 6.40625 0.25 14C0.25 21.5937 6.40625 27.75 14 27.75C21.5937 27.75 27.75 21.5937 27.75 14C27.75 6.40625 21.5937 0.25 14 0.25ZM19.96 11.675C20.0697 11.5496 20.1533 11.4034 20.2057 11.2452C20.2582 11.087 20.2784 10.9199 20.2653 10.7537C20.2522 10.5876 20.206 10.4257 20.1295 10.2777C20.0529 10.1296 19.9475 9.99838 19.8194 9.89168C19.6914 9.78497 19.5433 9.70495 19.3839 9.65633C19.2244 9.6077 19.0569 9.59145 18.8911 9.60853C18.7253 9.62562 18.5646 9.67568 18.4184 9.75579C18.2723 9.8359 18.1436 9.94443 18.04 10.075L12.665 16.5237L9.88375 13.7412C9.648 13.5136 9.33224 13.3876 9.0045 13.3904C8.67675 13.3933 8.36324 13.5247 8.13148 13.7565C7.89972 13.9882 7.76825 14.3018 7.76541 14.6295C7.76256 14.9572 7.88855 15.273 8.11625 15.5087L11.8662 19.2587C11.9891 19.3815 12.1361 19.4773 12.298 19.5401C12.4599 19.6028 12.6331 19.6312 12.8066 19.6233C12.98 19.6154 13.15 19.5715 13.3055 19.4943C13.4611 19.4171 13.5988 19.3084 13.71 19.175L19.96 11.675Z\" fill={color} />\n </svg>\n)\n\nconst Login = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9\" />\n </svg>\n)\n\nconst Loading = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size} animate-spin`}>\n <path fillRule=\"evenodd\" d=\"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst ToggleLoading = ({ color = '#fff', loading = false, size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size} ${loading && 'animate-spin'}`}>\n <path fillRule=\"evenodd\" d=\"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst Eye = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size}`}>\n <path d=\"M12 15a3 3 0 100-6 3 3 0 000 6z\" />\n <path fillRule=\"evenodd\" d=\"M1.323 11.447C2.811 6.976 7.028 3.75 12.001 3.75c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113-1.487 4.471-5.705 7.697-10.677 7.697-4.97 0-9.186-3.223-10.675-7.69a1.762 1.762 0 010-1.113zM17.25 12a5.25 5.25 0 11-10.5 0 5.25 5.25 0 0110.5 0z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst EyeSlash = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size}`}>\n <path d=\"M3.53 2.47a.75.75 0 00-1.06 1.06l18 18a.75.75 0 101.06-1.06l-18-18zM22.676 12.553a11.249 11.249 0 01-2.631 4.31l-3.099-3.099a5.25 5.25 0 00-6.71-6.71L7.759 4.577a11.217 11.217 0 014.242-.827c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113z\" />\n <path d=\"M15.75 12c0 .18-.013.357-.037.53l-4.244-4.243A3.75 3.75 0 0115.75 12zM12.53 15.713l-4.243-4.244a3.75 3.75 0 004.243 4.243z\" />\n <path d=\"M6.75 12c0-.619.107-1.213.304-1.764l-3.1-3.1a11.25 11.25 0 00-2.63 4.31c-.12.362-.12.752 0 1.114 1.489 4.467 5.704 7.69 10.675 7.69 1.5 0 2.933-.294 4.242-.827l-2.477-2.477A5.25 5.25 0 016.75 12z\" />\n </svg>\n)\n\nconst ArrowRight = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={className}>\n <path fillRule=\"evenodd\" d=\"M3.75 12a.75.75 0 01.75-.75h13.19l-5.47-5.47a.75.75 0 011.06-1.06l6.75 6.75a.75.75 0 010 1.06l-6.75 6.75a.75.75 0 11-1.06-1.06l5.47-5.47H4.5a.75.75 0 01-.75-.75z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst Minus = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 12h-15\" />\n </svg>\n)\n\nconst Dashboard = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 28 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.4688 9.65625H24.7812M3.21875 14.3438H13.5312M14 3.09375V20.9062M2.28125 2.15625H25.7188V21.8438H2.28125V2.15625Z\" stroke={color} strokeWidth=\"2.8125\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst FleetIcon = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_327_836)\">\n <path d=\"M26.5249 26.0324C26.7104 25.8203 26.93 25.7143 27.1839 25.7143C27.4377 25.7143 27.6573 25.8203 27.8428 26.0324L29.7173 28.1752L28.3993 29.6819L27.1839 28.2924L25.9684 29.6819C25.7927 29.894 25.573 30 25.3094 30C25.0458 30 24.8262 29.894 24.6504 29.6819L23.435 28.2924L22.2195 29.6819C22.034 29.894 21.8144 30 21.5605 30C21.3067 30 21.087 29.894 20.9016 29.6819L19.6861 28.2924L18.4706 29.6819C18.2852 29.894 18.0655 30 17.8117 30C17.5578 30 17.3382 29.894 17.1527 29.6819L15.9372 28.2924L14.7218 29.6819C14.5363 29.894 14.3166 30 14.0628 30C13.809 30 13.5893 29.894 13.4038 29.6819L12.1884 28.2924L10.9729 29.6819C10.7874 29.894 10.5677 30 10.3139 30C10.0601 30 9.84042 29.894 9.65493 29.6819L8.43948 28.2924L7.22402 29.6819C7.03853 29.894 6.81887 30 6.56504 30C6.31121 30 6.09155 29.894 5.90606 29.6819L4.6906 28.2924L3.47515 29.6819C3.28966 29.894 3.06999 30 2.81616 30C2.56233 30 2.34267 29.894 2.15718 29.6819L0.282745 27.5391L1.60071 26.0324L2.81616 27.4219L4.03162 26.0324C4.21711 25.8203 4.43677 25.7143 4.6906 25.7143C4.94443 25.7143 5.16409 25.8203 5.34958 26.0324L6.56504 27.4219L7.7805 26.0324C7.96599 25.8203 8.18565 25.7143 8.43948 25.7143C8.69331 25.7143 8.91297 25.8203 9.09846 26.0324L10.3139 27.4219L11.5294 26.0324C11.7149 25.8203 11.9345 25.7143 12.1884 25.7143C12.4422 25.7143 12.6618 25.8203 12.8473 26.0324L14.0628 27.4219L15.2782 26.0324C15.4637 25.8203 15.6834 25.7143 15.9372 25.7143C16.1911 25.7143 16.4107 25.8203 16.5962 26.0324L17.8117 27.4219L19.0271 26.0324C19.2126 25.8203 19.4323 25.7143 19.6861 25.7143C19.9399 25.7143 20.1596 25.8203 20.3451 26.0324L21.5605 27.4219L22.776 26.0324C22.9615 25.8203 23.1811 25.7143 23.435 25.7143C23.6888 25.7143 23.9085 25.8203 24.094 26.0324L25.3094 27.4219L26.5249 26.0324ZM3.47515 25.3962C3.28966 25.6083 3.06999 25.7143 2.81616 25.7143C2.56233 25.7143 2.34267 25.6083 2.15718 25.3962L0.282745 23.2533L1.60071 21.7467L2.81616 23.1194L4.03162 21.7467C4.21711 21.5346 4.43677 21.4286 4.6906 21.4286C4.94443 21.4286 5.16409 21.5346 5.34958 21.7467L6.56504 23.1194L7.50226 22.048V17.1429L4.42701 11.8862C4.26104 11.596 4.22687 11.2807 4.3245 10.9403C4.42213 10.5999 4.61738 10.3739 4.91026 10.2623L7.50226 9.29129V4.28571H9.3767V2.14286H13.1256V0H16.8744V2.14286H20.6233V4.28571H22.4978V9.29129L25.0898 10.2623C25.3826 10.3739 25.5779 10.5999 25.6755 10.9403C25.7731 11.2807 25.739 11.596 25.573 11.8862L22.4978 17.1429V22.048L22.776 21.7467C22.9615 21.5346 23.1811 21.4286 23.435 21.4286C23.6888 21.4286 23.9085 21.5346 24.094 21.7467L25.3094 23.1194L26.5249 21.7467C26.7104 21.5346 26.93 21.4286 27.1839 21.4286C27.4377 21.4286 27.6573 21.5346 27.8428 21.7467L29.7173 23.8895L28.3993 25.3962L27.1839 24.0067L25.9684 25.3962C25.7927 25.6083 25.573 25.7143 25.3094 25.7143C25.0458 25.7143 24.8262 25.6083 24.6504 25.3962L23.435 24.0067L22.2195 25.3962C22.034 25.6083 21.8144 25.7143 21.5605 25.7143C21.3067 25.7143 21.087 25.6083 20.9016 25.3962L19.6861 24.0067L18.4706 25.3962C18.2852 25.6083 18.0655 25.7143 17.8117 25.7143C17.5578 25.7143 17.3382 25.6083 17.1527 25.3962L15.9372 24.0067L14.7218 25.3962C14.5363 25.6083 14.3166 25.7143 14.0628 25.7143C13.809 25.7143 13.5893 25.6083 13.4038 25.3962L12.1884 24.0067L10.9729 25.3962C10.7874 25.6083 10.5677 25.7143 10.3139 25.7143C10.0601 25.7143 9.84042 25.6083 9.65493 25.3962L8.43948 24.0067L7.22402 25.3962C7.03853 25.6083 6.81887 25.7143 6.56504 25.7143C6.31121 25.7143 6.09155 25.6083 5.90606 25.3962L4.6906 24.0067L3.47515 25.3962ZM9.3767 6.42857V8.57143L15 6.42857L20.6233 8.57143V6.42857H18.7489V4.28571H11.2511V6.42857H9.3767Z\" fill={color} />\n </g>\n <defs>\n <clipPath id=\"clip0_327_836\"><rect width=\"30\" height=\"30\" fill={color} /></clipPath>\n </defs>\n </svg>\n)\n\nconst Performance = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.64 25.515H24.36C26.0709 23.3842 27.0024 20.7327 27 18C27 11.385 21.63 6 15 6C8.37 6 3 11.385 3 18C3 20.85 3.99 23.445 5.64 25.515ZM13.5 9C13.5 8.175 14.175 7.5 15 7.5C15.825 7.5 16.5 8.175 16.5 9C16.5 9.84 15.825 10.5 15 10.5C14.175 10.5 13.5 9.84 13.5 9ZM6 12C6 11.175 6.675 10.5 7.5 10.5C8.325 10.5 9 11.175 9 12C9 12.84 8.325 13.5 7.5 13.5C6.675 13.5 6 12.84 6 12ZM12.78 17.1C14.04 15.855 22.545 11.85 22.545 11.85C22.545 11.85 18.555 20.37 17.31 21.615C16.05 22.875 14.04 22.875 12.78 21.615C12.1819 21.016 11.8459 20.204 11.8459 19.3575C11.8459 18.511 12.1819 17.699 12.78 17.1ZM4.5 19.5C4.5 18.675 5.175 18 6 18C6.825 18 7.5 18.675 7.5 19.5C7.5 20.34 6.825 21 6 21C5.175 21 4.5 20.34 4.5 19.5ZM13.5 19.5C13.5 18.675 14.175 18 15 18C15.825 18 16.5 18.675 16.5 19.5C16.5 20.34 15.825 21 15 21C14.175 21 13.5 20.34 13.5 19.5ZM22.5 19.5C22.5 18.675 23.175 18 24 18C24.825 18 25.5 18.675 25.5 19.5C25.5 20.34 24.825 21 24 21C23.175 21 22.5 20.34 22.5 19.5Z\" fill={color} />\n </svg>\n)\n\nconst Map = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 34 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_327_830)\">\n <path d=\"M16.875 0C12.7975 0 9.49219 3.30527 9.49219 7.38281C9.49219 10.6793 14.3174 16.6875 16.166 18.8684C16.5404 19.3102 17.2102 19.3102 17.584 18.8684C19.4326 16.6875 24.2578 10.6793 24.2578 7.38281C24.2578 3.30527 20.9525 0 16.875 0ZM16.875 9.84375C15.5156 9.84375 14.4141 8.74219 14.4141 7.38281C14.4141 6.02344 15.5156 4.92188 16.875 4.92188C18.2344 4.92188 19.3359 6.02344 19.3359 7.38281C19.3359 8.74219 18.2344 9.84375 16.875 9.84375ZM1.17891 12.6533C0.830964 12.7925 0.532694 13.0327 0.322564 13.343C0.112435 13.6533 8.33325e-05 14.0194 0 14.3941L0 29.0613C0 29.7246 0.669727 30.1781 1.28555 29.932L9.375 26.25V12.593C8.85703 11.6566 8.4334 10.7449 8.12988 9.87305L1.17891 12.6533ZM16.875 21.0744C16.0506 21.0744 15.2707 20.7123 14.7357 20.0807C13.5838 18.7213 12.3586 17.1732 11.25 15.5854V26.2494L22.5 29.9994V15.5859C21.3914 17.1732 20.1668 18.7219 19.0143 20.0812C18.4793 20.7123 17.6994 21.0744 16.875 21.0744ZM32.4645 9.44297L24.375 13.125V30L32.5711 26.7217C32.9191 26.5826 33.2174 26.3424 33.4275 26.0321C33.6377 25.7218 33.75 25.3556 33.75 24.9809V10.3137C33.75 9.65039 33.0803 9.19688 32.4645 9.44297Z\" fill={color} />\n </g>\n <defs>\n <clipPath id=\"clip0_327_830\"><rect width=\"33.75\" height=\"30\" fill={color} /></clipPath>\n </defs>\n </svg>\n)\n\nconst CharterParty = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <mask id=\"mask0_327_823\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x=\"3\" y=\"1\" width=\"24\" height=\"28\">\n <path d=\"M23.75 2.5H6.25C5.55964 2.5 5 3.05964 5 3.75V26.25C5 26.9404 5.55964 27.5 6.25 27.5H23.75C24.4404 27.5 25 26.9404 25 26.25V3.75C25 3.05964 24.4404 2.5 23.75 2.5Z\" stroke=\"white\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 2.5H15.625V12.5L12.8125 10L10 12.5V2.5Z\" fill={color} stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 17.5H16.25M10 21.25H20\" stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </mask>\n <g mask=\"url(#mask0_327_823)\"><path d=\"M0 0H30V30H0V0Z\" fill={color} /></g>\n </svg>\n)\n\nconst Compliance = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_327_821)\">\n <path d=\"M1.87499 14.9962C1.86582 11.6183 3.15973 8.36699 5.48738 5.91906C7.81504 3.47112 10.9971 2.01516 14.3712 1.85426C17.7453 1.69336 21.0514 2.83991 23.6015 5.05525C26.1515 7.27058 27.7489 10.384 28.0612 13.7475C27.6828 13.6443 27.3021 13.5499 26.9194 13.4644C24.8954 13.0002 22.8059 12.893 20.745 13.1475C19.9256 13.2506 19.1512 13.41 18.4219 13.6312C18.325 13.4207 18.2243 13.2119 18.12 13.005C17.9905 12.7506 17.8673 12.493 17.7506 12.2325C17.5856 11.8575 17.4056 11.37 17.4375 10.8525C17.475 10.2525 17.7787 9.76498 18.2681 9.39748C18.8625 8.95123 19.6106 7.92935 20.2556 6.89623C20.5669 6.4031 20.8312 5.93998 21.0187 5.60248L21.0619 5.52373C19.2523 4.36216 17.1465 3.74636 14.9962 3.74998H14.9062C15.0769 4.08748 15.2644 4.4906 15.4331 4.93873C15.8906 6.14998 16.3031 7.92373 15.5662 9.49123C14.8894 10.935 13.7212 11.31 12.8475 11.535L12.7219 11.5669C11.8725 11.7862 11.5219 11.8762 11.2669 12.2606C11.0306 12.6206 11.0737 13.0725 11.3419 13.9481L11.4037 14.145C11.5106 14.4862 11.6381 14.8912 11.7037 15.2737C11.7862 15.75 11.8087 16.3462 11.5087 16.9237C11.2532 17.4397 10.8463 17.8655 10.3425 18.1444C9.95176 18.3427 9.5312 18.4757 9.09749 18.5381L8.96999 18.5606C8.29874 18.6787 7.95749 18.7387 7.62936 19.0893C7.37249 19.365 7.21311 19.8431 7.12124 20.5369C7.08374 20.82 7.05936 21.1012 7.03686 21.3919L7.02374 21.5456C7.00327 21.8794 6.96005 22.2114 6.89436 22.5394L6.84749 22.7456C8.00741 23.9672 9.42664 24.9129 11.0006 25.5131C10.6481 26.0381 10.3219 26.5819 10.0181 27.1406C7.60928 26.1523 5.54882 24.4699 4.09879 22.3074C2.64875 20.1449 1.87467 17.5999 1.87499 14.9962ZM29.8594 16.3837C29.7756 16.2476 29.6584 16.1351 29.5189 16.057C29.3795 15.9789 29.2223 15.9377 29.0625 15.9375H29.0475C28.9738 15.9284 28.9006 15.9159 28.8281 15.9C28.64 15.8553 28.4531 15.8059 28.2675 15.7519L28.0894 15.7031C27.5677 15.5518 27.0419 15.4155 26.5125 15.2943C24.6983 14.8768 22.8251 14.7798 20.9775 15.0075C18.7237 15.2887 17.0006 16.0537 15.825 17.1487C14.6437 18.2531 14.0625 19.6556 14.0625 21.0862C14.0625 21.4294 14.0887 21.7556 14.1337 22.0612C16.1025 20.3437 18.5306 18.9544 21.2137 17.88C21.3281 17.8342 21.4504 17.8114 21.5736 17.8128C21.6968 17.8143 21.8185 17.84 21.9317 17.8885C22.045 17.937 22.1476 18.0073 22.2337 18.0954C22.3197 18.1836 22.3876 18.2878 22.4334 18.4022C22.4792 18.5165 22.502 18.6388 22.5006 18.762C22.4991 18.8852 22.4734 19.0069 22.4249 19.1202C22.3764 19.2334 22.3061 19.336 22.218 19.4221C22.1298 19.5082 22.0256 19.5761 21.9112 19.6219C20.4169 20.22 19.035 20.91 17.79 21.6881C14.6925 23.4956 12.7631 25.8169 11.3494 28.6444C11.2898 28.7549 11.253 28.8762 11.2412 29.0012C11.2294 29.1262 11.2428 29.2523 11.2807 29.372C11.3185 29.4917 11.38 29.6026 11.4616 29.6981C11.5431 29.7936 11.643 29.8717 11.7553 29.9279C11.8676 29.984 11.99 30.017 12.1153 30.025C12.2406 30.0329 12.3662 30.0156 12.4847 29.974C12.6032 29.9325 12.7121 29.8676 12.805 29.7831C12.898 29.6987 12.973 29.5965 13.0256 29.4825C13.7456 28.0462 14.6062 26.7544 15.7406 25.605C16.0418 26.1539 16.4089 26.6639 16.8337 27.1237C17.7037 28.0612 19.1081 29.0625 21.0937 29.0625C22.3162 29.0625 23.3325 28.7512 24.165 28.2075C24.99 27.6712 25.5862 26.9419 26.0325 26.1769C26.7225 24.9956 27.1181 23.5893 27.4106 22.5469C27.4856 22.2843 27.5512 22.0462 27.615 21.84C27.9394 20.7825 28.4137 19.8337 28.8525 19.0575C29.0737 18.6712 29.2819 18.3319 29.4619 18.0431L29.4919 17.9944C29.6374 17.7668 29.7737 17.5335 29.9006 17.295C29.9719 17.1521 30.0055 16.9935 29.9983 16.834C29.9911 16.6745 29.9433 16.5195 29.8594 16.3837Z\" fill={color} />\n </g>\n <defs>\n <clipPath id=\"clip0_327_821\"><rect width=\"30\" height=\"30\" fill={color} /></clipPath>\n </defs>\n </svg>\n)\n\nconst Applications = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.28125 3.28125H11.7188V11.7188H3.28125V3.28125ZM3.28125 18.2812H11.7188V26.7188H3.28125V18.2812ZM18.2812 18.2812H26.7188V26.7188H18.2812V18.2812ZM18.2812 3.28125H26.7188V11.7188H18.2812V3.28125Z\" stroke={color} strokeWidth=\"2.8125\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst PowerOff = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5.636 5.636a9 9 0 1012.728 0M12 3v9\" />\n </svg>\n)\n\nconst ChevronDown = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n </svg>\n)\n\nconst ChevronRight = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n)\n\nconst Checked = ({ color = '#fff', size = 4 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n)\n\nconst Search = ({ color = '#fff', size = 4 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z\" />\n </svg>\n)\n\nconst Calendar = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\" />\n </svg>\n)\n\nconst Clock = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n)\n\nconst ChartBoard = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5m.75-9l3-3 2.148 2.148A12.061 12.061 0 0116.5 7.605\" />\n </svg>\n)\n\nconst BarChartBoard = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6\" />\n </svg>\n)\n\nconst ChartBar = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z\" />\n </svg>\n)\n\nconst PieChart = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.5 6a7.5 7.5 0 107.5 7.5h-7.5V6z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13.5 10.5H21A7.5 7.5 0 0013.5 3v7.5z\" />\n </svg>\n)\n\nconst BarChartSquare = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7.5 14.25v2.25m3-4.5v4.5m3-6.75v6.75m3-9v9M6 20.25h12A2.25 2.25 0 0020.25 18V6A2.25 2.25 0 0018 3.75H6A2.25 2.25 0 003.75 6v12A2.25 2.25 0 006 20.25z\" />\n </svg>\n)\n\nconst Shield = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m0-10.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.75c0 5.592 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.57-.598-3.75h-.152c-3.196 0-6.1-1.249-8.25-3.286zm0 13.036h.008v.008H12v-.008z\" />\n </svg>\n)\n\nconst Calculator = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 15.75V18m-7.5-6.75h.008v.008H8.25v-.008zm0 2.25h.008v.008H8.25V13.5zm0 2.25h.008v.008H8.25v-.008zm0 2.25h.008v.008H8.25V18zm2.498-6.75h.007v.008h-.007v-.008zm0 2.25h.007v.008h-.007V13.5zm0 2.25h.007v.008h-.007v-.008zm0 2.25h.007v.008h-.007V18zm2.504-6.75h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V13.5zm0 2.25h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V18zm2.498-6.75h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V13.5zM8.25 6h7.5v2.25h-7.5V6zM12 2.25c-1.892 0-3.758.11-5.593.322C5.307 2.7 4.5 3.65 4.5 4.757V19.5a2.25 2.25 0 002.25 2.25h10.5a2.25 2.25 0 002.25-2.25V4.757c0-1.108-.806-2.057-1.907-2.185A48.507 48.507 0 0012 2.25z\" />\n </svg>\n)\n\nconst Contract = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z\" />\n </svg>\n)\n\nconst Buoy = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M16.712 4.33a9.027 9.027 0 011.652 1.306c.51.51.944 1.064 1.306 1.652M16.712 4.33l-3.448 4.138m3.448-4.138a9.014 9.014 0 00-9.424 0M19.67 7.288l-4.138 3.448m4.138-3.448a9.014 9.014 0 010 9.424m-4.138-5.976a3.736 3.736 0 00-.88-1.388 3.737 3.737 0 00-1.388-.88m2.268 2.268a3.765 3.765 0 010 2.528m-2.268-4.796a3.765 3.765 0 00-2.528 0m4.796 4.796c-.181.506-.475.982-.88 1.388a3.736 3.736 0 01-1.388.88m2.268-2.268l4.138 3.448m0 0a9.027 9.027 0 01-1.306 1.652c-.51.51-1.064.944-1.652 1.306m0 0l-3.448-4.138m3.448 4.138a9.014 9.014 0 01-9.424 0m5.976-4.138a3.765 3.765 0 01-2.528 0m0 0a3.736 3.736 0 01-1.388-.88 3.737 3.737 0 01-.88-1.388m2.268 2.268L7.288 19.67m0 0a9.024 9.024 0 01-1.652-1.306 9.027 9.027 0 01-1.306-1.652m0 0l4.138-3.448M4.33 16.712a9.014 9.014 0 010-9.424m4.138 5.976a3.765 3.765 0 010-2.528m0 0c.181-.506.475-.982.88-1.388a3.736 3.736 0 011.388-.88m-2.268 2.268L4.33 7.288m6.406 1.18L7.288 4.33m0 0a9.024 9.024 0 00-1.652 1.306A9.025 9.025 0 004.33 7.288\" />\n </svg>\n)\n\nconst Cog = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n)\n\nconst TableIcon = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 01-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0112 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5\" />\n </svg>\n)\n\nconst Data = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125\" />\n </svg>\n)\n\nconst XClose = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nconst Grid = ({ color = '#fff', size = 6 }) => (\n <svg width={size} height={size} viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_401_39)\">\n <path d=\"M0.375 0.75C0.375 0.650544 0.414509 0.555161 0.484835 0.484835C0.555161 0.414509 0.650544 0.375 0.75 0.375H1.5C1.59946 0.375 1.69484 0.414509 1.76516 0.484835C1.83549 0.555161 1.875 0.650544 1.875 0.75V1.5C1.875 1.59946 1.83549 1.69484 1.76516 1.76516C1.69484 1.83549 1.59946 1.875 1.5 1.875H0.75C0.650544 1.875 0.555161 1.83549 0.484835 1.76516C0.414509 1.69484 0.375 1.59946 0.375 1.5V0.75ZM2.25 0.75C2.25 0.650544 2.28951 0.555161 2.35984 0.484835C2.43016 0.414509 2.52554 0.375 2.625 0.375H3.375C3.47446 0.375 3.56984 0.414509 3.64016 0.484835C3.71049 0.555161 3.75 0.650544 3.75 0.75V1.5C3.75 1.59946 3.71049 1.69484 3.64016 1.76516C3.56984 1.83549 3.47446 1.875 3.375 1.875H2.625C2.52554 1.875 2.43016 1.83549 2.35984 1.76516C2.28951 1.69484 2.25 1.59946 2.25 1.5V0.75ZM4.125 0.75C4.125 0.650544 4.16451 0.555161 4.23484 0.484835C4.30516 0.414509 4.40054 0.375 4.5 0.375H5.25C5.34946 0.375 5.44484 0.414509 5.51516 0.484835C5.58549 0.555161 5.625 0.650544 5.625 0.75V1.5C5.625 1.59946 5.58549 1.69484 5.51516 1.76516C5.44484 1.83549 5.34946 1.875 5.25 1.875H4.5C4.40054 1.875 4.30516 1.83549 4.23484 1.76516C4.16451 1.69484 4.125 1.59946 4.125 1.5V0.75ZM0.375 2.625C0.375 2.52554 0.414509 2.43016 0.484835 2.35984C0.555161 2.28951 0.650544 2.25 0.75 2.25H1.5C1.59946 2.25 1.69484 2.28951 1.76516 2.35984C1.83549 2.43016 1.875 2.52554 1.875 2.625V3.375C1.875 3.47446 1.83549 3.56984 1.76516 3.64016C1.69484 3.71049 1.59946 3.75 1.5 3.75H0.75C0.650544 3.75 0.555161 3.71049 0.484835 3.64016C0.414509 3.56984 0.375 3.47446 0.375 3.375V2.625ZM2.25 2.625C2.25 2.52554 2.28951 2.43016 2.35984 2.35984C2.43016 2.28951 2.52554 2.25 2.625 2.25H3.375C3.47446 2.25 3.56984 2.28951 3.64016 2.35984C3.71049 2.43016 3.75 2.52554 3.75 2.625V3.375C3.75 3.47446 3.71049 3.56984 3.64016 3.64016C3.56984 3.71049 3.47446 3.75 3.375 3.75H2.625C2.52554 3.75 2.43016 3.71049 2.35984 3.64016C2.28951 3.56984 2.25 3.47446 2.25 3.375V2.625ZM4.125 2.625C4.125 2.52554 4.16451 2.43016 4.23484 2.35984C4.30516 2.28951 4.40054 2.25 4.5 2.25H5.25C5.34946 2.25 5.44484 2.28951 5.51516 2.35984C5.58549 2.43016 5.625 2.52554 5.625 2.625V3.375C5.625 3.47446 5.58549 3.56984 5.51516 3.64016C5.44484 3.71049 5.34946 3.75 5.25 3.75H4.5C4.40054 3.75 4.30516 3.71049 4.23484 3.64016C4.16451 3.56984 4.125 3.47446 4.125 3.375V2.625ZM0.375 4.5C0.375 4.40054 0.414509 4.30516 0.484835 4.23484C0.555161 4.16451 0.650544 4.125 0.75 4.125H1.5C1.59946 4.125 1.69484 4.16451 1.76516 4.23484C1.83549 4.30516 1.875 4.40054 1.875 4.5V5.25C1.875 5.34946 1.83549 5.44484 1.76516 5.51516C1.69484 5.58549 1.59946 5.625 1.5 5.625H0.75C0.650544 5.625 0.555161 5.58549 0.484835 5.51516C0.414509 5.44484 0.375 5.34946 0.375 5.25V4.5ZM2.25 4.5C2.25 4.40054 2.28951 4.30516 2.35984 4.23484C2.43016 4.16451 2.52554 4.125 2.625 4.125H3.375C3.47446 4.125 3.56984 4.16451 3.64016 4.23484C3.71049 4.30516 3.75 4.40054 3.75 4.5V5.25C3.75 5.34946 3.71049 5.44484 3.64016 5.51516C3.56984 5.58549 3.47446 5.625 3.375 5.625H2.625C2.52554 5.625 2.43016 5.58549 2.35984 5.51516C2.28951 5.44484 2.25 5.34946 2.25 5.25V4.5ZM4.125 4.5C4.125 4.40054 4.16451 4.30516 4.23484 4.23484C4.30516 4.16451 4.40054 4.125 4.5 4.125H5.25C5.34946 4.125 5.44484 4.16451 5.51516 4.23484C5.58549 4.30516 5.625 4.40054 5.625 4.5V5.25C5.625 5.34946 5.58549 5.44484 5.51516 5.51516C5.44484 5.58549 5.34946 5.625 5.25 5.625H4.5C4.40054 5.625 4.30516 5.58549 4.23484 5.51516C4.16451 5.44484 4.125 5.34946 4.125 5.25V4.5Z\" fill={color} />\n </g>\n <defs><clipPath id=\"clip0_401_39\"><rect width=\"6\" height=\"6\" fill=\"white\" /></clipPath></defs>\n </svg>\n)\n\nconst Carousel = ({ color = '#fff', size = 6 }) => (\n <svg width={size} height={size} viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_401_41)\">\n <path d=\"M1 4.75H1.5C1.5 5.02575 1.72425 5.25 2 5.25H4C4.27575 5.25 4.5 5.02575 4.5 4.75H5C5.27575 4.75 5.5 4.52575 5.5 4.25V1.75C5.5 1.47425 5.27575 1.25 5 1.25H4.5C4.5 0.97425 4.27575 0.75 4 0.75H2C1.72425 0.75 1.5 0.97425 1.5 1.25H1C0.72425 1.25 0.5 1.47425 0.5 1.75V4.25C0.5 4.52575 0.72425 4.75 1 4.75ZM5 1.75V4.25H4.5V1.75H5ZM2 1.25H4L4.00025 4.75H2V1.25ZM1 1.75H1.5V4.25H1V1.75Z\" fill={color} />\n </g>\n <defs><clipPath id=\"clip0_401_41\"><rect width=\"6\" height=\"6\" fill=\"white\" /></clipPath></defs>\n </svg>\n)\n\nconst DoubleChevronRight = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 4.5l7.5 7.5-7.5 7.5m-6-15l7.5 7.5-7.5 7.5\" />\n </svg>\n)\n\nconst PlusCircle = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v6m3-3H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n)\n\nconst Info = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" />\n </svg>\n)\n\nconst Warning = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" />\n </svg>\n)\n\nconst ErrorIcon = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m0-10.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.75c0 5.592 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.57-.598-3.75h-.152c-3.196 0-6.1-1.249-8.25-3.286zm0 13.036h.008v.008H12v-.008z\" />\n </svg>\n)\n\nconst ShowMore = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 6.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 12.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 18.75a.75.75 0 110-1.5.75.75 0 010 1.5z\" />\n </svg>\n)\n\nconst Tweak = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.5 6h9.75M10.5 6a1.5 1.5 0 11-3 0m3 0a1.5 1.5 0 10-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m-9.75 0h9.75\" />\n </svg>\n)\n\nconst Download = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3\" />\n </svg>\n)\n\nconst Expand = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\" />\n </svg>\n)\n\nconst Collapse = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25\" />\n </svg>\n)\n\nconst ShieldCheck = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z\" />\n </svg>\n)\n\nconst XCircle = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n)\n\nconst Play = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.348a1.125 1.125 0 010 1.971l-11.54 6.347a1.125 1.125 0 01-1.667-.985V5.653z\" />\n </svg>\n)\n\nconst Document = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\" />\n </svg>\n)\n\nconst EditIcon = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10\" />\n </svg>\n)\n\nconst Upload = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 16.5V9.75m0 0l3 3m-3-3l-3 3M6.75 19.5a4.5 4.5 0 01-1.41-8.775 5.25 5.25 0 0110.233-2.33 3 3 0 013.758 3.848A3.752 3.752 0 0118 19.5H6.75z\" />\n </svg>\n)\n\nconst FileIcon = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.125 2.25h-4.5c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125v-9M10.125 2.25h.375a9 9 0 019 9v.375M10.125 2.25A3.375 3.375 0 0113.5 5.625v1.5c0 .621.504 1.125 1.125 1.125h1.5a3.375 3.375 0 013.375 3.375M9 15l2.25 2.25L15 12\" />\n </svg>\n)\n\nconst Delete = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0\" />\n </svg>\n)\n\nconst Bookmarks = ({ color = '#000', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M16.5 3.75V16.5L12 14.25 7.5 16.5V3.75m9 0H18A2.25 2.25 0 0120.25 6v12A2.25 2.25 0 0118 20.25H6A2.25 2.25 0 013.75 18V6A2.25 2.25 0 016 3.75h1.5m9 0h-9\" />\n </svg>\n)\n\nconst Save = ({ color = '#000', size = 16 }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M18.1716 1C18.702 1 19.2107 1.21071 19.5858 1.58579L22.4142 4.41421C22.7893 4.78929 23 5.29799 23 5.82843V20C23 21.6569 21.6569 23 20 23H4C2.34315 23 1 21.6569 1 20V4C1 2.34315 2.34315 1 4 1H18.1716ZM4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21L5 21L5 15C5 13.3431 6.34315 12 8 12L16 12C17.6569 12 19 13.3431 19 15V21H20C20.5523 21 21 20.5523 21 20V6.82843C21 6.29799 20.7893 5.78929 20.4142 5.41421L18.5858 3.58579C18.2107 3.21071 17.702 3 17.1716 3H17V5C17 6.65685 15.6569 8 14 8H10C8.34315 8 7 6.65685 7 5V3H4ZM17 21V15C17 14.4477 16.5523 14 16 14L8 14C7.44772 14 7 14.4477 7 15L7 21L17 21ZM9 3H15V5C15 5.55228 14.5523 6 14 6H10C9.44772 6 9 5.55228 9 5V3Z\" fill={color} />\n </svg>\n)\n\nconst CircleStack = ({ color = '#000', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125\" />\n </svg>\n)\n\nconst Copy = ({ color = '#000', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\" />\n </svg>\n)\n\nconst Icon = () => <></>\n\nIcon.Moon = Moon\nIcon.Sun = Sun\nIcon.CheckCircle = CheckCircle\nIcon.Login = Login\nIcon.Loading = Loading\nIcon.ToggleLoading = ToggleLoading\nIcon.Eye = Eye\nIcon.EyeSlash = EyeSlash\nIcon.ArrowRight = ArrowRight\nIcon.Minus = Minus\nIcon.Dashboard = Dashboard\nIcon.FleetIcon = FleetIcon\nIcon.Performance = Performance\nIcon.Map = Map\nIcon.CharterParty = CharterParty\nIcon.Compliance = Compliance\nIcon.Applications = Applications\nIcon.PowerOff = PowerOff\nIcon.ChevronDown = ChevronDown\nIcon.ChevronRight = ChevronRight\nIcon.DoubleChevronRight = DoubleChevronRight\nIcon.Checked = Checked\nIcon.Search = Search\nIcon.Calendar = Calendar\nIcon.Clock = Clock\nIcon.ChartBoard = ChartBoard\nIcon.BarChartBoard = BarChartBoard\nIcon.BarChartSquare = BarChartSquare\nIcon.ChartBar = ChartBar\nIcon.PieChart = PieChart\nIcon.Shield = Shield\nIcon.Calculator = Calculator\nIcon.Contract = Contract\nIcon.Buoy = Buoy\nIcon.Cog = Cog\nIcon.Table = TableIcon\nIcon.Data = Data\nIcon.XClose = XClose\nIcon.Grid = Grid\nIcon.Carousel = Carousel\nIcon.PlusCircle = PlusCircle\nIcon.Info = Info\nIcon.Warning = Warning\nIcon.Error = ErrorIcon\nIcon.ShowMore = ShowMore\nIcon.Tweak = Tweak\nIcon.Download = Download\nIcon.Expand = Expand\nIcon.Collapse = Collapse\nIcon.ShieldCheck = ShieldCheck\nIcon.XCircle = XCircle\nIcon.Play = Play\nIcon.Document = Document\nIcon.Edit = EditIcon\nIcon.Upload = Upload\nIcon.File = FileIcon\nIcon.Delete = Delete\nIcon.Bookmarks = Bookmarks\nIcon.Save = Save\nIcon.Copy = Copy\nIcon.CircleStack = CircleStack\n\nexport default Icon\n","import { useMemo } from 'react'\n\nexport interface IconButtonProps {\n icon?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n /** 'primary' | 'bordered' */\n type?: string\n buttonType?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n size?: 'sm' | 'lg'\n loading?: boolean\n loadingIcon?: React.ReactNode\n title?: string\n [key: string]: any\n}\n\n/**\n * Square icon-only button.\n *\n * @example\n * <IconButton icon={<Icon.Search />} onClick={doSearch} />\n * <IconButton type=\"bordered\" icon={<Icon.Edit />} />\n */\nexport default function IconButton({\n icon,\n onClick,\n type = 'primary',\n buttonType = 'button',\n disabled = false,\n size = 'lg',\n loading = false,\n loadingIcon,\n}: IconButtonProps) {\n const colorScheme = useMemo(() => {\n if (type === 'primary') {\n return 'hover:bg-true-blue bg-usafa-blue dark:bg-independence dark:hover:bg-black-coral'\n }\n if (type === 'bordered') {\n return 'bg-ice hover:bg-ice-dark border border-prussian-blue disabled:border-disabled'\n }\n return ''\n }, [type])\n\n return (\n <button\n type={buttonType}\n disabled={disabled || loading}\n onClick={onClick}\n className={`${size === 'sm' ? 'p-1' : 'p-2'} rounded-lg shadow-lg transition-all duration-150 ${colorScheme} dark:disabled:bg-manatee disabled:bg-disabled disabled:cursor-not-allowed`}\n >\n {loading ? loadingIcon : icon}\n </button>\n )\n}\n","import React from 'react'\n\nexport interface ButtonProps {\n content?: React.ReactNode\n /** Visual style variant */\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger'\n /** Size — controls height, padding, and font size */\n size?: 'sm' | 'md' | 'lg'\n /** HTML button type */\n buttonType?: 'button' | 'submit' | 'reset'\n loading?: boolean\n disabled?: boolean\n /** Inline style overrides (width, etc.). Margins/layout belong in the parent. */\n style?: React.CSSProperties\n /** Leading icon — rendered before content */\n icon?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n /**\n * @deprecated Pass `variant` instead. Kept for API compat — currently no-op.\n * Will be removed in the next major version.\n */\n type?: string\n}\n\nconst VARIANT_CLASSES: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary: [\n 'bg-accent text-white',\n 'hover:bg-accent-hover',\n 'active:bg-accent',\n 'disabled:bg-roman-silver disabled:text-white/70 disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' '),\n\n secondary: [\n 'bg-transparent border border-accent text-accent',\n 'hover:bg-accent hover:text-white',\n 'active:bg-accent-hover active:text-white',\n 'disabled:border-roman-silver disabled:text-roman-silver disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' '),\n\n ghost: [\n 'bg-transparent text-foreground-secondary',\n 'hover:bg-ice dark:hover:bg-oxford-blue-700 hover:text-foreground',\n 'active:bg-ice-dark dark:active:bg-independence',\n 'disabled:text-roman-silver disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' '),\n\n danger: [\n 'bg-status-error text-white',\n 'hover:opacity-90',\n 'active:opacity-100',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-status-error focus-visible:ring-offset-2',\n ].join(' '),\n}\n\nconst SIZE_CLASSES: Record<NonNullable<ButtonProps['size']>, string> = {\n sm: 'h-7 px-3 text-xs gap-1 rounded-md',\n md: 'h-9 px-4 text-sm gap-1.5 rounded-lg',\n lg: 'h-11 px-5 text-sm gap-2 rounded-xl',\n}\n\n/**\n * Primary action button with variant + size system.\n *\n * Width is never hardcoded — set `style={{ width }}` or let the parent grid/flex control it.\n *\n * @example\n * <Button content=\"Save\" onClick={handleSave} />\n * <Button content=\"Delete\" variant=\"danger\" size=\"sm\" />\n * <Button content=\"Cancel\" variant=\"secondary\" />\n * <Button content=\"Loading…\" loading buttonType=\"submit\" />\n */\nexport default function Button({\n content,\n variant = 'primary',\n size = 'md',\n buttonType = 'button',\n loading,\n disabled,\n style,\n icon,\n onClick,\n}: ButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled || loading}\n type={buttonType}\n style={style}\n className={[\n // Base — layout, transitions, focus reset\n 'inline-flex items-center justify-center font-medium',\n 'outline-none transition-colors duration-150 select-none',\n 'whitespace-nowrap',\n SIZE_CLASSES[size],\n VARIANT_CLASSES[variant],\n ].join(' ')}\n >\n {loading ? (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4 animate-spin flex-shrink-0\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z\"\n />\n </svg>\n ) : icon ? (\n <span className=\"flex-shrink-0\" aria-hidden=\"true\">{icon}</span>\n ) : null}\n {content}\n </button>\n )\n}\n","import React from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport Button from '../inputs/Button'\n\nexport interface ModalProps {\n /**\n * Max width of the modal panel in pixels (default 600).\n * On narrow viewports the panel fills the screen minus 1 rem on each side.\n * Height is always content-driven — `size[1]` is accepted for backwards\n * compatibility but is no longer used; remove it when convenient.\n */\n size?: [number, number] | [number]\n isOpen?: boolean\n onClose?: () => void\n onOk?: () => void\n onCancel?: () => void\n okText?: string\n cancelText?: string\n hasFooter?: boolean\n title?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * Centred modal dialog powered by Radix Dialog + Framer Motion.\n *\n * Radix handles focus-trap, escape-to-close, and ARIA roles.\n * Framer Motion drives the scale + fade enter/exit animation.\n * prefers-reduced-motion is respected via useReducedMotion().\n *\n * @example\n * <Modal isOpen={open} onClose={() => setOpen(false)} title=\"Confirm\" onOk={handleOk}>\n * Are you sure you want to delete this item?\n * </Modal>\n */\nexport default function Modal({\n size = [600, 400],\n isOpen = false,\n onClose,\n onOk,\n onCancel,\n okText = 'Ok',\n cancelText = 'Cancel',\n hasFooter = true,\n title,\n children,\n}: ModalProps) {\n const reduced = useReducedMotion()\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => { if (!open) onClose?.() }}>\n <Dialog.Portal forceMount>\n {/* ── Backdrop ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/40 z-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: reduced ? 0 : 0.18, ease: 'easeOut' }}\n />\n </Dialog.Overlay>\n )}\n </AnimatePresence>\n\n {/* ── Panel ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Content asChild>\n <motion.div\n className=\"fixed left-1/2 top-1/2 z-modal flex flex-col w-[calc(100%-2rem)] max-h-[90dvh] bg-surface rounded-2xl shadow-xl overflow-hidden focus:outline-none\"\n style={{\n maxWidth: size[0],\n x: '-50%',\n y: '-50%',\n }}\n initial={{ opacity: 0, scale: reduced ? 1 : 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: reduced ? 1 : 0.96 }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n type: 'spring',\n damping: 28,\n stiffness: 380,\n duration: 0.25,\n }\n }\n >\n {/* Header */}\n <div className=\"flex h-14 flex-shrink-0 items-center justify-between border-b border-border px-5\">\n <Dialog.Title className=\"text-base font-semibold text-foreground tracking-tight\">\n {title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n aria-label=\"Close\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-foreground-muted hover:bg-surface-raised hover:text-foreground transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\">\n <path d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\" fill=\"currentColor\" fillRule=\"evenodd\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </Dialog.Close>\n </div>\n\n {/* Body */}\n <div className={`flex-1 overflow-y-auto p-5 ${hasFooter ? '' : 'pb-5'}`}>\n {isOpen && children}\n </div>\n\n {/* Footer */}\n {hasFooter && (\n <div className=\"flex flex-shrink-0 items-center justify-end gap-3 border-t border-border px-5 py-3\">\n <Button\n style={{ width: 90 }}\n content={cancelText}\n onClick={onCancel}\n />\n <Button\n style={{ width: 90 }}\n content={okText}\n onClick={onOk}\n />\n </div>\n )}\n </motion.div>\n </Dialog.Content>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import React from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport Button from '../inputs/Button'\n\nexport interface DrawerProps {\n isOpen?: boolean\n onClose?: () => void\n hasFooter?: boolean\n /** 'left' | 'right' — which edge the panel slides from */\n placement?: 'left' | 'right'\n width?: number\n okText?: string\n cancelText?: string\n onOk?: () => void\n onCancel?: () => void\n title?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * Side-sliding drawer panel powered by Radix Dialog + Framer Motion.\n *\n * Radix handles focus-trap, escape-to-close, and ARIA roles.\n * Framer Motion drives the slide enter/exit animation.\n * prefers-reduced-motion is respected via useReducedMotion().\n *\n * @example\n * <Drawer isOpen={open} placement=\"right\" onClose={() => setOpen(false)} title=\"Filters\">\n * <FilterForm />\n * </Drawer>\n */\nexport default function Drawer({\n isOpen = false,\n onClose,\n hasFooter = true,\n placement = 'right',\n width = 320,\n okText = 'Ok',\n cancelText = 'Cancel',\n onOk,\n onCancel,\n title,\n children,\n}: DrawerProps) {\n const reduced = useReducedMotion()\n const isRight = placement === 'right'\n const hiddenX = isRight ? '100%' : '-100%'\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => { if (!open) onClose?.() }}>\n <Dialog.Portal forceMount>\n {/* ── Backdrop ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/40 z-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: reduced ? 0 : 0.2, ease: 'easeOut' }}\n />\n </Dialog.Overlay>\n )}\n </AnimatePresence>\n\n {/* ── Panel ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Content asChild>\n <motion.div\n className={`fixed top-0 bottom-0 ${isRight ? 'right-0' : 'left-0'} z-modal flex flex-col bg-surface shadow-xl focus:outline-none`}\n style={{ width: `min(calc(100vw - 1rem), ${width}px)` }}\n initial={{ x: reduced ? 0 : hiddenX, opacity: reduced ? 0 : 1 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: reduced ? 0 : hiddenX, opacity: reduced ? 0 : 1 }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n x: {\n type: 'tween',\n duration: 0.26,\n ease: [0.16, 1, 0.3, 1], // ease-out-expo\n },\n opacity: { duration: 0 },\n }\n }\n >\n {/* Header */}\n <div className={`flex h-14 flex-shrink-0 items-center justify-between border-b border-border px-5 ${isRight ? 'flex-row-reverse' : ''}`}>\n <Dialog.Title className=\"text-base font-semibold text-foreground tracking-tight\">\n {title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n aria-label=\"Close drawer\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-foreground-muted hover:bg-surface-raised hover:text-foreground transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\">\n <path d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\" fill=\"currentColor\" fillRule=\"evenodd\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </Dialog.Close>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 overflow-y-auto p-5\">\n {isOpen && children}\n </div>\n\n {/* Footer */}\n {hasFooter && (\n <div className={`flex flex-shrink-0 items-center gap-3 border-t border-border px-5 py-3 ${isRight ? 'justify-start' : 'justify-end'}`}>\n <Button style={{ width: 90 }} content={cancelText} onClick={onCancel} />\n <Button style={{ width: 90 }} content={okText} onClick={onOk} />\n </div>\n )}\n </motion.div>\n </Dialog.Content>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\n\nexport interface TooltipProps {\n children: React.ReactNode\n /** The text or node shown inside the tooltip */\n title: React.ReactNode\n /** Which side of the trigger the tooltip appears on */\n placement?: 'top' | 'right' | 'bottom' | 'left'\n /** Delay before showing, ms (default 300) */\n delayDuration?: number\n /** Offset from trigger in px (default 8) */\n sideOffset?: number\n}\n\n// Each placement animates in from the opposite edge (toward the trigger)\nconst ANIMATION: Record<NonNullable<TooltipProps['placement']>, string> = {\n top: 'data-[state=delayed-open]:animate-tooltip-in-top',\n bottom: 'data-[state=delayed-open]:animate-tooltip-in-bottom',\n left: 'data-[state=delayed-open]:animate-tooltip-in-left',\n right: 'data-[state=delayed-open]:animate-tooltip-in-right',\n}\n\n/**\n * Tooltip powered by Radix Tooltip.\n *\n * Radix handles keyboard navigation (Escape), pointer events, and ARIA.\n * Each placement animates in from the correct direction.\n * Wrap your app in `<TooltipProvider>` (re-exported below) to share a\n * single provider instead of nesting one per tooltip.\n *\n * @example\n * <TooltipProvider>\n * <Tooltip title=\"Delete record\" placement=\"top\">\n * <IconButton icon={<TrashIcon />} />\n * </Tooltip>\n * </TooltipProvider>\n */\nexport default function Tooltip({\n children,\n title,\n placement = 'top',\n delayDuration = 300,\n sideOffset = 8,\n}: TooltipProps) {\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"inline-flex\">{children}</span>\n </TooltipPrimitive.Trigger>\n\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={placement}\n sideOffset={sideOffset}\n className={[\n // Layout + typography\n 'pointer-events-none z-[500000] max-w-[220px] px-2.5 py-1.5',\n 'text-xs font-medium leading-snug text-white',\n // Background + border — slightly translucent for depth\n 'bg-foreground/95 rounded-md border border-white/5',\n // Shadow\n 'shadow-md',\n // Out animation (always the same — just fade)\n 'data-[state=closed]:animate-tooltip-out',\n // In animation — direction-aware\n ANIMATION[placement],\n ].join(' ')}\n >\n {title}\n <TooltipPrimitive.Arrow\n width={10}\n height={5}\n className=\"fill-foreground/95\"\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )\n}\n\nexport { TooltipPrimitive as TooltipPrimitives }\nexport const TooltipProvider = TooltipPrimitive.Provider\n","import React, { useEffect, useState } from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nexport interface TabItem {\n key: string\n title: React.ReactNode\n content: React.ReactNode\n}\n\nexport interface TabsProps {\n tabs?: TabItem[]\n onTabChange?: (prev: TabItem | undefined, next: TabItem | undefined) => void\n onTabClose?: (key: string) => void\n /** Only mount the active tab's content */\n isLazy?: boolean\n tabsClosable?: boolean\n defaultActiveTab?: string\n}\n\n/**\n * Scrollable pill-style tabs powered by Radix Tabs.\n *\n * Radix handles roving-tabindex keyboard navigation and ARIA roles.\n * Rounded pill style, fully themed via semantic design tokens.\n * Supports dynamic tab add/remove with automatic activation.\n *\n * @example\n * <Tabs\n * tabs={[\n * { key: 'v1', title: 'Vessel 1', content: <Panel1 /> },\n * { key: 'v2', title: 'Vessel 2', content: <Panel2 /> },\n * ]}\n * tabsClosable\n * onTabClose={(key) => removetab(key)}\n * />\n */\nexport default function Tabs({\n tabs = [],\n onTabChange,\n onTabClose,\n isLazy,\n tabsClosable = true,\n defaultActiveTab,\n}: TabsProps) {\n const [value, setValue] = useState<string>(() => defaultActiveTab ?? tabs[0]?.key ?? '')\n\n // Sync when external defaultActiveTab changes\n useEffect(() => {\n if (defaultActiveTab) setValue(defaultActiveTab)\n }, [defaultActiveTab])\n\n // When tabs are added / removed, keep a valid active tab\n useEffect(() => {\n if (tabs.length === 0) {\n setValue('')\n return\n }\n const exists = tabs.find((t) => t.key === value)\n if (!exists) {\n // Activate last tab (mimics original behaviour on close)\n setValue(tabs[tabs.length - 1].key)\n }\n }, [tabs, value])\n\n const handleValueChange = (newValue: string) => {\n const prev = tabs.find((t) => t.key === value)\n const next = tabs.find((t) => t.key === newValue)\n onTabChange?.(prev, next)\n setValue(newValue)\n }\n\n const toPreviousTab = () => {\n const idx = tabs.findIndex((t) => t.key === value)\n if (idx > 0) handleValueChange(tabs[idx - 1].key)\n }\n\n const toNextTab = () => {\n const idx = tabs.findIndex((t) => t.key === value)\n if (idx < tabs.length - 1) handleValueChange(tabs[idx + 1].key)\n }\n\n if (tabs.length === 0) return null\n\n return (\n <TabsPrimitive.Root\n value={value}\n onValueChange={handleValueChange}\n className=\"h-full max-w-full flex flex-col gap-2\"\n >\n {/* Tab strip */}\n <div className=\"bg-surface border border-border rounded-lg flex items-center justify-between flex-shrink-0 w-full p-1 overflow-hidden\">\n {/* Left chevron */}\n <button\n type=\"button\"\n onClick={toPreviousTab}\n aria-label=\"Previous tab\"\n className=\"cursor-pointer rounded-lg transition-colors duration-150 hover:bg-surface-raised text-foreground-secondary hover:text-foreground rotate-180 flex-shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} className=\"h-6 w-6\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n\n {/* Pills list */}\n <TabsPrimitive.List\n aria-label=\"Tabs\"\n className=\"flex-1 flex items-center gap-1 overflow-x-auto overflow-y-hidden rounded-lg scroll-smooth snap-x snap-mandatory hidden-scrollbar\"\n >\n {tabs.map((tab) => (\n <TabsPrimitive.Trigger\n key={tab.key}\n value={tab.key}\n className=\"snap-start snap-always flex items-center justify-between gap-2 px-3 py-2 rounded-3xl cursor-pointer transition-all duration-200 select-none h-10 flex-1 min-w-[120px] max-w-[220px] flex-shrink-0\n text-foreground-secondary bg-surface-raised\n hover:bg-surface hover:text-foreground\n data-[state=active]:bg-accent data-[state=active]:text-accent-foreground\n focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <span className=\"truncate text-sm\">{tab.title}</span>\n {tabsClosable && (\n <span\n role=\"button\"\n aria-label={`Close ${tab.title}`}\n onClick={(e) => {\n e.stopPropagation()\n onTabClose?.(tab.key)\n }}\n className=\"flex-shrink-0 rounded hover:bg-black/10 p-0.5 transition-colors\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n )}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n\n {/* Right chevron */}\n <button\n type=\"button\"\n onClick={toNextTab}\n aria-label=\"Next tab\"\n className=\"cursor-pointer rounded-lg transition-colors duration-150 hover:bg-surface-raised text-foreground-secondary hover:text-foreground flex-shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} className=\"h-6 w-6\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Content pane */}\n <div className=\"p-2 rounded-lg w-full flex-1 min-h-0 bg-surface border border-border overflow-hidden\">\n {isLazy ? (\n // Mount only the active content\n tabs\n .filter((t) => t.key === value)\n .map((t) => (\n <TabsPrimitive.Content key={t.key} value={t.key} className=\"w-full h-full focus:outline-none\">\n {t.content}\n </TabsPrimitive.Content>\n ))\n ) : (\n // Pre-mount all, hide non-active via Radix\n tabs.map((t) => (\n <TabsPrimitive.Content key={t.key} value={t.key} className=\"w-full h-full focus:outline-none\" forceMount>\n <div className={`w-full h-full ${t.key === value ? 'block' : 'hidden'}`}>\n {t.content}\n </div>\n </TabsPrimitive.Content>\n ))\n )}\n </div>\n </TabsPrimitive.Root>\n )\n}\n","import React from 'react'\nimport * as Accordion from '@radix-ui/react-accordion'\n\nexport interface TreeNode {\n key: string\n label: string\n nodeData?: any\n parentLabel?: string\n children?: TreeNode[]\n}\n\nexport interface TreeItemClickPayload {\n isParent: boolean\n key: string\n label: string\n data?: any\n parentLabel?: string\n}\n\nexport interface TreeProps {\n nodes: TreeNode[]\n onNodeClick: (payload: TreeItemClickPayload) => void\n defaultExpandAll?: boolean\n defaultExpandedKeys?: string[]\n}\n\n/** ─────────────────── helpers ─────────────────── */\nconst isParent = (item: TreeNode) =>\n Boolean(item.children && item.children.length > 0)\n\n/** ─────────────────── single node ─────────────────── */\ninterface NodeProps {\n item: TreeNode\n onNodeClick: TreeProps['onNodeClick']\n defaultExpandAll: boolean\n defaultExpandedKeys: string[]\n depth?: number\n}\n\nfunction TreeNodeItem({\n item,\n onNodeClick,\n defaultExpandAll,\n defaultExpandedKeys,\n depth = 0,\n}: NodeProps) {\n if (!isParent(item)) {\n return (\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2.5 cursor-pointer select-none group text-left rounded-md px-2 py-1.5 hover:bg-surface-raised transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n style={{ paddingLeft: depth * 12 + 8 }}\n onClick={() =>\n onNodeClick({\n isParent: false,\n key: item.key,\n label: item.label,\n data: item.nodeData,\n parentLabel: item.parentLabel,\n })\n }\n >\n {/* Leaf dot */}\n <span className=\"w-1.5 h-1.5 rounded-full flex-shrink-0 bg-foreground-muted group-hover:bg-accent transition-colors duration-150\" />\n <span className=\"text-sm text-foreground-secondary group-hover:text-foreground transition-colors duration-150\">\n {item.label}\n </span>\n </button>\n )\n }\n\n const initialOpen =\n defaultExpandAll || defaultExpandedKeys.includes(item.key)\n ? [item.key]\n : []\n\n return (\n <Accordion.Root\n type=\"multiple\"\n defaultValue={initialOpen}\n style={{ paddingLeft: depth * 12 }}\n >\n <Accordion.Item value={item.key} className=\"border-none\">\n <Accordion.Trigger className=\"flex items-center gap-2 cursor-pointer py-1.5 px-2 group focus:outline-none focus-visible:ring-2 focus-visible:ring-accent w-full text-left rounded-md hover:bg-surface-raised transition-colors duration-150\">\n {/* Chevron — rotates on open/close */}\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n className=\"h-3.5 w-3.5 flex-shrink-0 text-foreground-muted transition-transform duration-200 group-data-[state=open]:rotate-0 group-data-[state=closed]:-rotate-90\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n <span\n className=\"text-sm font-semibold text-foreground select-none\"\n onClick={() =>\n onNodeClick({\n isParent: true,\n key: item.key,\n label: item.label,\n data: item.nodeData,\n parentLabel: item.parentLabel,\n })\n }\n >\n {item.label}\n </span>\n </Accordion.Trigger>\n\n <Accordion.Content className=\"overflow-hidden data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\">\n <div className=\"ml-3.5 border-l border-border py-0.5\">\n {item.children!.map((child) => (\n <TreeNodeItem\n key={child.key}\n item={child}\n onNodeClick={onNodeClick}\n defaultExpandAll={defaultExpandAll}\n defaultExpandedKeys={defaultExpandedKeys}\n depth={depth + 1}\n />\n ))}\n </div>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )\n}\n\n/** ─────────────────── public component ─────────────────── */\n\n/**\n * Hierarchical tree view powered by Radix Accordion.\n *\n * Each parent node is an independent Accordion.Root with type=\"multiple\" so\n * sibling branches expand independently. Leaf nodes are plain buttons.\n * Expand/collapse is animated via CSS keyframes.\n *\n * @example\n * <Tree\n * nodes={fleetTree}\n * onNodeClick={({ key, isParent }) => selectNode(key)}\n * defaultExpandAll\n * />\n */\nexport default function Tree({\n nodes,\n onNodeClick,\n defaultExpandAll = false,\n defaultExpandedKeys = [],\n}: TreeProps) {\n return (\n <div className=\"p-1 w-full\">\n {nodes.map((item) => (\n <TreeNodeItem\n key={item.key}\n item={item}\n onNodeClick={onNodeClick}\n defaultExpandAll={defaultExpandAll}\n defaultExpandedKeys={defaultExpandedKeys}\n />\n ))}\n </div>\n )\n}\n","import React from 'react'\nimport * as ToggleGroup from '@radix-ui/react-toggle-group'\n\nexport interface ToggleItem {\n key: string\n label?: React.ReactNode\n icon?: React.ReactNode\n}\n\nexport interface ToggleButtonProps {\n items: ToggleItem[]\n onChange: (key: string) => void\n activeKey: string\n}\n\n/**\n * Segmented toggle-button group powered by Radix ToggleGroup.\n *\n * Radix handles keyboard navigation (arrow keys), focus ring, and\n * `role=\"group\"` / `aria-pressed` ARIA attributes.\n *\n * @example\n * <ToggleButton\n * items={[\n * { key: 'grid', icon: <Icon.Grid /> },\n * { key: 'list', icon: <Icon.List /> },\n * ]}\n * activeKey={view}\n * onChange={setView}\n * />\n */\nexport default function ToggleButton({ items, onChange, activeKey }: ToggleButtonProps) {\n return (\n <ToggleGroup.Root\n type=\"single\"\n value={activeKey}\n onValueChange={(val) => {\n // Radix passes '' when user clicks the already-selected item → keep current\n if (val) onChange(val)\n }}\n className=\"flex items-center\"\n >\n {items.map((item, index) => (\n <ToggleGroup.Item\n key={item.key}\n value={item.key}\n aria-label={typeof item.label === 'string' ? item.label : item.key}\n className={[\n index === 0 && 'rounded-l-lg border-r border-ice-dark',\n index === items.length - 1 && 'rounded-r-lg border-l border-ice-dark dark:border-manatee',\n 'p-2 cursor-pointer transition-all duration-300',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-usafa-blue',\n 'bg-ice dark:bg-manatee hover:bg-ice-dark dark:hover:bg-black-coral',\n 'data-[state=on]:bg-ice-dark dark:data-[state=on]:bg-indigo-dye',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {item.icon ?? item.label}\n </ToggleGroup.Item>\n ))}\n </ToggleGroup.Root>\n )\n}\n","import React, { createContext, useContext, useState } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\n\n/** ─────────────────── types ─────────────────── */\nexport type NotificationType = 'info' | 'success' | 'warning' | 'danger'\n\nexport type NotificationPosition =\n | 'top-right' | 'top-left' | 'top-center'\n | 'bottom-right' | 'bottom-left' | 'bottom-center'\n\nexport interface NotificationPayload {\n title: React.ReactNode\n description?: React.ReactNode\n /** Auto-dismiss duration in ms (default 4000) */\n duration?: number\n type?: NotificationType\n}\n\ninterface NotificationEntry extends NotificationPayload {\n id: number\n}\n\ninterface NotificationContextValue {\n open: (payload: NotificationPayload) => void\n close: (id: number) => void\n}\n\n/** ─────────────────── context ─────────────────── */\nconst NotificationContext = createContext<NotificationContextValue>({\n open: () => undefined,\n close: () => undefined,\n})\n\n/** ─────────────────── helpers ─────────────────── */\nconst TYPE_BG: Record<NotificationType, string> = {\n info: 'bg-status-info',\n success: 'bg-status-success',\n warning: 'bg-status-warning',\n danger: 'bg-status-error',\n}\n\n// Viewport positioning classes per position\nconst VIEWPORT_CLASSES: Record<NotificationPosition, string> = {\n 'top-right': 'fixed top-14 right-0 flex flex-col items-end',\n 'top-left': 'fixed top-14 left-0 flex flex-col items-start',\n 'top-center': 'fixed top-14 left-1/2 flex flex-col items-center -translate-x-1/2',\n 'bottom-right': 'fixed bottom-4 right-0 flex flex-col-reverse items-end',\n 'bottom-left': 'fixed bottom-4 left-0 flex flex-col-reverse items-start',\n 'bottom-center': 'fixed bottom-4 left-1/2 flex flex-col-reverse items-center -translate-x-1/2',\n}\n\n// Initial animation state per position\nfunction getInitialMotion(pos: NotificationPosition, reduced: boolean | null) {\n if (reduced) return { opacity: 0, x: 0, y: 0, scale: 1 }\n const right = pos.endsWith('right')\n const left = pos.endsWith('left')\n const center = pos.endsWith('center')\n const bottom = pos.startsWith('bottom')\n return {\n opacity: 0,\n x: right ? 40 : left ? -40 : 0,\n y: center ? (bottom ? 12 : -12) : 0,\n scale: center ? 0.96 : 1,\n }\n}\n\nfunction TypeIcon({ type }: { type: NotificationType }) {\n if (type === 'success') {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )\n }\n if (type === 'info') {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" /><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n )\n }\n if (type === 'warning') {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" /><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n )\n }\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" /><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n )\n}\n\n/** ─────────────────── animated toast item ─────────────────── */\nfunction NotificationItem({\n n,\n pos,\n onClose,\n reduced,\n}: {\n n: NotificationEntry\n pos: NotificationPosition\n onClose: (id: number) => void\n reduced: boolean | null\n}) {\n const initial = getInitialMotion(pos, reduced)\n const center = pos.endsWith('center')\n\n return (\n <motion.div\n layout\n initial={initial}\n animate={{ opacity: 1, x: 0, y: 0, scale: 1 }}\n exit={{ ...initial, opacity: 0 }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n opacity: { duration: 0.14 },\n x: { type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] },\n y: { type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] },\n scale: { type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] },\n layout: { duration: 0.18 },\n }\n }\n >\n <Toast.Root\n open\n duration={n.duration}\n onOpenChange={(o) => { if (!o) onClose(n.id) }}\n className={[\n 'w-[300px] rounded-md shadow-lg overflow-hidden',\n center ? 'mx-auto' : '',\n 'focus:outline-none',\n TYPE_BG[n.type ?? 'info'],\n ].join(' ')}\n >\n {/* Colored side accent strip — thin, meaningful */}\n <div className=\"flex items-start gap-3 p-3 pr-2.5\">\n <span className=\"mt-0.5 flex-shrink-0 text-white/90\">\n <TypeIcon type={n.type ?? 'info'} />\n </span>\n\n <div className=\"flex-1 min-w-0\">\n <Toast.Title className=\"text-sm font-semibold text-white leading-snug\">\n {n.title}\n </Toast.Title>\n {n.description && (\n <Toast.Description className=\"mt-0.5 text-xs text-white/75 leading-relaxed\">\n {n.description}\n </Toast.Description>\n )}\n </div>\n\n <Toast.Action asChild altText=\"Close\">\n <button\n aria-label=\"Close\"\n onClick={() => onClose(n.id)}\n className=\"flex-shrink-0 mt-0.5 rounded p-1 text-white/60 hover:text-white hover:bg-white/15 transition-colors duration-100 focus:outline-none focus-visible:ring-1 focus-visible:ring-white/50\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 3L3 9M3 3l6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </Toast.Action>\n </div>\n </Toast.Root>\n </motion.div>\n )\n}\n\n/** ─────────────────── provider ─────────────────── */\n\n/**\n * Wrap your app in `NotificationProvider`, then call `useNotification()` anywhere inside.\n *\n * @param position One of 6 viewport positions (default: `top-right`)\n *\n * @example\n * <NotificationProvider position=\"bottom-right\">\n * <App />\n * </NotificationProvider>\n */\nexport function NotificationProvider({\n children,\n position = 'top-right',\n}: {\n children: React.ReactNode\n position?: NotificationPosition\n}) {\n const [notifications, setNotifications] = useState<NotificationEntry[]>([])\n const reduced = useReducedMotion()\n\n const open = (payload: NotificationPayload) => {\n setNotifications((prev) => [\n ...prev,\n { duration: 4000, ...payload, id: Date.now() + Math.random() },\n ])\n }\n\n const close = (id: number) => {\n setNotifications((prev) => prev.filter((n) => n.id !== id))\n }\n\n return (\n <NotificationContext.Provider value={{ open, close }}>\n <Toast.Provider swipeDirection={\n position.endsWith('right') ? 'right' :\n position.endsWith('left') ? 'left' : 'up'\n }>\n {children}\n\n <Toast.Viewport\n asChild\n className={[\n VIEWPORT_CLASSES[position],\n 'z-[500000] gap-2 w-[332px] p-4 outline-none',\n ].join(' ')}\n >\n <ul>\n <AnimatePresence initial={false}>\n {notifications.map((n) => (\n <NotificationItem\n key={n.id}\n n={n}\n pos={position}\n onClose={close}\n reduced={reduced}\n />\n ))}\n </AnimatePresence>\n </ul>\n </Toast.Viewport>\n </Toast.Provider>\n </NotificationContext.Provider>\n )\n}\n\n/** ─────────────────── hook ─────────────────── */\nexport function useNotification() {\n const { open } = useContext(NotificationContext)\n return {\n info: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'info', ...props }),\n success: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'success', ...props }),\n warning: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'warning', ...props }),\n danger: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'danger', ...props }),\n }\n}\n","import React, { useEffect, useMemo } from 'react'\n\nexport interface LoadingSpinnerProps {\n /** Text animated letter by letter */\n prompt: string\n}\n\n/**\n * Full-screen loading overlay with a spinning shape and staggered text reveal.\n *\n * @example\n * {isLoading && <LoadingSpinner prompt=\"Loading data...\" />}\n */\nexport default function LoadingSpinner({ prompt }: LoadingSpinnerProps) {\n const letterRefs = useMemo<(HTMLSpanElement | null)[]>(() => [], [])\n const letters = prompt.split('')\n\n useEffect(() => {\n const timeouts: ReturnType<typeof setTimeout>[] = []\n if (letterRefs.length === letters.length) {\n letterRefs.forEach((ref, index) => {\n const t = setTimeout(() => {\n ref?.classList.add('slowly-appear')\n }, index * 100)\n timeouts.push(t)\n })\n }\n return () => timeouts.forEach(clearTimeout)\n }, [letterRefs, letters.length])\n\n return (\n <div className=\"fixed top-0 bottom-0 right-0 left-0 bg-oxford-blue-700-opaque z-[8000000] flex flex-col gap-5 items-center justify-start pt-80\">\n <div className=\"border-r-prussian-blue border-l-prussian-blue border-t-white border-b-white border-[10px] w-[80px] h-[80px] rounded-xl shapeshift\" />\n <div className=\"text-prussian-blue dark:text-white text-3xl font-bold\">\n {letters.map((letter, index) => (\n <span\n key={index}\n className=\"select-none\"\n ref={(ref) => {\n letterRefs[index] = ref\n }}\n >\n {letter}\n </span>\n ))}\n </div>\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\nexport interface FadingBaseProps {\n className?: string\n /** Controls mount/unmount with fade transition */\n isMounted?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Fade-in / fade-out page container.\n *\n * Replaces `react-transition-group` with a pure CSS opacity transition.\n * The component mounts on `isMounted=true` and unmounts after the 300ms\n * fade-out completes on `isMounted=false`.\n *\n * Uses CSS `dark:` class for the glass effect — no ThemeContext dependency.\n *\n * @example\n * <FadingBase isMounted={isPageVisible}>\n * <PageContent />\n * </FadingBase>\n */\nexport default function FadingBase({\n className = '',\n isMounted = false,\n children,\n}: FadingBaseProps) {\n const [shouldRender, setShouldRender] = useState(isMounted)\n const [visible, setVisible] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n if (isMounted) {\n setShouldRender(true)\n // rAF gives the DOM time to paint before triggering the transition\n const rafId = requestAnimationFrame(() => setVisible(true))\n return () => cancelAnimationFrame(rafId)\n } else {\n setVisible(false)\n timerRef.current = setTimeout(() => setShouldRender(false), 300)\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }\n }, [isMounted])\n\n if (!shouldRender) return null\n\n return (\n <div\n className={`w-full calculated-height pl-2 pr-2 pb-2 transition-opacity duration-300 ${visible ? 'opacity-100' : 'opacity-0'}`}\n >\n <div className={`bg-ice dark:glassmorphism w-full h-full rounded-lg p-2 ${className}`}>\n {children}\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface ListItem {\n key: string | number\n label: React.ReactNode\n [key: string]: any\n}\n\nexport interface ListProps {\n items: ListItem[]\n onItemClick: (item: ListItem) => void\n activeKey?: string | number\n}\n\n/**\n * Vertical clickable list with active-item highlight.\n *\n * @example\n * <List\n * items={vessels.map(v => ({ key: v.imo, label: v.name }))}\n * activeKey={selectedImo}\n * onItemClick={(item) => setSelected(item.key)}\n * />\n */\nexport default function List({ items, onItemClick, activeKey }: ListProps) {\n return (\n <div role=\"listbox\">\n {items.map((item) => (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={activeKey === item.key}\n className={`hover:bg-ice-dark dark:hover:bg-independence cursor-pointer p-3 border-b border-b-ice-dark dark:border-b-independence transition-all duration-300 ${\n activeKey === item.key ? 'bg-ice-dark dark:bg-independence' : ''\n }`}\n onClick={() => onItemClick(item)}\n >\n {item.label}\n </div>\n ))}\n </div>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport Tooltip from './Tooltip'\nimport IconButton from './IconButton'\n\nexport interface ScalableContainerProps {\n width?: React.CSSProperties['width']\n height?: React.CSSProperties['height']\n children?: React.ReactNode\n /** CSS class applied to the children wrapper when expanded */\n assignClassOnClick?: string\n}\n\n/**\n * Container that can be expanded to fill its parent, with a tooltip-annotated\n * expand/collapse icon button.\n *\n * @example\n * <ScalableContainer width=\"50%\" height={300}>\n * <Chart data={data} />\n * </ScalableContainer>\n */\nexport default function ScalableContainer({\n width,\n height,\n children,\n assignClassOnClick,\n}: ScalableContainerProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [isScaled, setScaled] = useState(false)\n const [wrapperClass, setWrapperClass] = useState('')\n\n const onClick = () => {\n const next = !isScaled\n setScaled(next)\n setTimeout(() => {\n containerRef.current?.scrollIntoView({ behavior: 'smooth' })\n if (assignClassOnClick) {\n setWrapperClass(next ? assignClassOnClick : '')\n }\n }, 200)\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n width: isScaled ? '100%' : width,\n height: isScaled ? '100%' : height,\n }}\n className=\"rounded-lg bg-ice-dark dark:bg-prussian-blue flex flex-col transition-all duration-300 origin-center\"\n >\n <div className=\"p-2 w-max\">\n <Tooltip placement=\"right\" title={isScaled ? 'Collapse' : 'Expand'}>\n <IconButton\n onClick={onClick}\n icon={\n isScaled ? (\n /* Collapse (arrows-pointing-in) */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#fff\" className=\"w-5 h-5\">\n <path fillRule=\"evenodd\" d=\"M3.22 3.22a.75.75 0 011.06 0l3.97 3.97V4.5a.75.75 0 011.5 0V9a.75.75 0 01-.75.75H4.5a.75.75 0 010-1.5h2.69L3.22 4.28a.75.75 0 010-1.06zm17.56 0a.75.75 0 010 1.06l-3.97 3.97h2.69a.75.75 0 010 1.5H15a.75.75 0 01-.75-.75V4.5a.75.75 0 011.5 0v2.69l3.97-3.97a.75.75 0 011.06 0zM3.75 15a.75.75 0 01.75-.75H9a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-2.69l-3.97 3.97a.75.75 0 01-1.06-1.06l3.97-3.97H4.5a.75.75 0 01-.75-.75zm10.5 0a.75.75 0 01.75-.75h4.5a.75.75 0 01.75.75 .75.75 0 01-.75.75h-2.69l3.97 3.97a.75.75 0 11-1.06 1.06l-3.97-3.97v2.69a.75.75 0 01-1.5 0V15z\" clipRule=\"evenodd\" />\n </svg>\n ) : (\n /* Expand (arrows-pointing-out) */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#fff\" className=\"w-5 h-5\">\n <path fillRule=\"evenodd\" d=\"M15 3a.75.75 0 01.75-.75h5.25A.75.75 0 0121 3v5.25a.75.75 0 01-1.5 0V4.81l-5.72 5.72a.75.75 0 11-1.06-1.06L18.19 3.75H15.75A.75.75 0 0115 3zM3 15a.75.75 0 01.75-.75h2.44l5.72-5.72a.75.75 0 111.06 1.06l-5.72 5.72v2.44a.75.75 0 01-1.5 0V15.75A.75.75 0 013 15zm0-11.25A.75.75 0 013.75 3h5.25a.75.75 0 010 1.5H4.81l5.72 5.72a.75.75 0 11-1.06 1.06L3.75 5.56V8.25a.75.75 0 01-1.5 0V3.75A.75.75 0 013 3zm18 12a.75.75 0 01-.75.75h-5.25a.75.75 0 010-1.5h2.44l-5.72-5.72a.75.75 0 111.06-1.06l5.72 5.72v-2.44a.75.75 0 011.5 0V15z\" clipRule=\"evenodd\" />\n </svg>\n )\n }\n />\n </Tooltip>\n </div>\n <div className={wrapperClass}>{children}</div>\n </div>\n )\n}\n","import React from 'react'\nimport Button from '../inputs/Button'\n\nexport interface GridCardItem {\n key: string | number\n title: React.ReactNode\n description?: React.ReactNode\n /** Image URL or JSX element */\n cover?: string | React.ReactNode\n enabled?: boolean\n /** Arbitrary route or payload — passed back to onOpen */\n to?: string\n [key: string]: any\n}\n\nexport interface GridCardProps {\n item: GridCardItem\n buttonText?: string\n /** Called when the button is clicked. Receives the full item. */\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Application card tile (grid layout).\n *\n * Decoupled from React Router — navigation is delegated to the `onOpen` prop.\n *\n * @example\n * <GridCard\n * item={{ key: 'reports', title: 'Reports', enabled: true, to: '/reports' }}\n * onOpen={({ to }) => navigate(to!)}\n * />\n */\nexport default function GridCard({ item, buttonText = 'Open Application', onOpen }: GridCardProps) {\n return (\n <div className=\"flex flex-col w-[200px] h-[250px] rounded-lg bg-ice dark:bg-independence items-center justify-between p-2 shadow-2xl\">\n <div className=\"text-prussian-blue dark:text-white text-lg font-bold text-center h-1/4\">\n <h2>{item.title}</h2>\n </div>\n <div className=\"h-1/4 flex items-center justify-center\">\n {typeof item.cover === 'string' ? (\n <img src={item.cover} alt=\"Grid Card Cover\" />\n ) : (\n item.cover\n )}\n </div>\n <div className=\"text-prussian-blue text-sm dark:text-white text-center h-1/4\">\n <p>{item.description}</p>\n </div>\n <div>\n <Button\n disabled={!item.enabled}\n style={{ width: 'max-content', padding: '0 8px', margin: '0' }}\n content={buttonText}\n onClick={() => onOpen?.(item)}\n />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport Button from '../inputs/Button'\nimport { GridCardItem } from './GridCard'\n\nexport interface OpaqueGridCardProps {\n item: GridCardItem\n isRight?: boolean\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Opaque carousel variant of GridCard (left or right edge of the carousel).\n *\n * Decoupled from React Router and ThemeContext.\n * Uses CSS `dark:` classes instead of `useTheme()`.\n *\n * @example\n * <OpaqueGridCard item={sideItem} isRight onOpen={({ to }) => navigate(to!)} />\n */\nexport default function OpaqueGridCard({\n item,\n isRight = false,\n buttonText = 'Open Application',\n onOpen,\n}: OpaqueGridCardProps) {\n return (\n <div\n className={`flex flex-col w-[200px] h-[250px] rounded-lg items-center p-2 ${\n !isRight\n ? 'opaque-carousel-card-left dark:opaque-carousel-card-dark-left'\n : 'opaque-carousel-card-right dark:opaque-carousel-card-dark-right'\n }`}\n >\n <div\n className={`${\n !isRight\n ? 'opaque-carousel-card-text-right dark:opaque-carousel-card-text-dark-right'\n : 'opaque-carousel-card-text-left dark:opaque-carousel-card-text-dark-left'\n } text-prussian-blue dark:text-white text-lg font-bold text-center h-1/4 select-none`}\n >\n <h2>{item.title}</h2>\n </div>\n <div className=\"h-1/4 flex items-center justify-center\">\n {typeof item.cover === 'string' ? (\n <img src={item.cover} alt=\"Grid Card Cover\" />\n ) : (\n item.cover\n )}\n </div>\n <div\n className={`${\n !isRight\n ? 'opaque-carousel-card-text-right dark:opaque-carousel-card-text-dark-right'\n : 'opaque-carousel-card-text-left dark:opaque-carousel-card-text-dark-left'\n } text-prussian-blue dark:text-white text-center h-1/4 select-none text-sm`}\n >\n <p>{item.description}</p>\n </div>\n <div>\n <Button\n style={{\n width: 'max-content',\n padding: '0 8px',\n margin: '0',\n background: !isRight\n ? 'linear-gradient(90deg, #0353A4 6.29%, rgba(3, 83, 164, 0) 97.35%)'\n : 'linear-gradient(270deg, #0353A4 3.97%, rgba(3, 83, 164, 0) 94.04%)',\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n content={\n <div\n className={\n !isRight\n ? 'opaque-carousel-card-text-dark-right'\n : 'opaque-carousel-card-text-dark-left'\n }\n >\n {buttonText}\n </div>\n }\n onClick={() => onOpen?.(item)}\n />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport GridCard, { GridCardItem } from './GridCard'\n\nexport interface CatalogGridProps {\n items: GridCardItem[]\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Wrapping flex grid of `GridCard` tiles.\n */\nexport default function CatalogGrid({ items, buttonText, onOpen }: CatalogGridProps) {\n return (\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item) => (\n <GridCard key={item.key} item={item} buttonText={buttonText} onOpen={onOpen} />\n ))}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport GridCard, { GridCardItem } from './GridCard'\nimport OpaqueGridCard from './OpaqueGridCard'\nimport COLORS from '../../utils/colors'\n\nexport interface CatalogCarouselProps {\n items: GridCardItem[]\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Three-card carousel (previous → active (scaled) → next).\n *\n * Decoupled from ThemeContext — uses CSS `dark:` classes.\n */\nexport default function CatalogCarousel({ items, buttonText, onOpen }: CatalogCarouselProps) {\n const [activeIndex, setActiveIndex] = useState(0)\n const [indexPool, setIndexPool] = useState<number[]>([])\n const cardRefs = useRef<{ cardIndex: number; ref: HTMLDivElement }[]>([])\n\n const getIndexes = useMemo(() => {\n let nextIndex = activeIndex + 1\n let previousIndex = activeIndex - 1\n if (activeIndex === 0) previousIndex = items.length - 1\n if (activeIndex === items.length - 1) nextIndex = 0\n return { previousIndex, nextIndex }\n }, [activeIndex, items.length])\n\n useEffect(() => {\n const { nextIndex, previousIndex } = getIndexes\n let indexes = [previousIndex, activeIndex, nextIndex]\n if (activeIndex !== 0 && activeIndex !== items.length - 1) {\n indexes = [...indexes].sort((a, b) => a - b)\n }\n setIndexPool(indexes)\n\n const timeouts: ReturnType<typeof setTimeout>[] = []\n cardRefs.current.forEach(({ cardIndex, ref }) => {\n if (cardIndex !== 1) {\n ref.classList.remove('animate-in')\n const t = setTimeout(() => ref.classList.add('animate-in'), 50)\n timeouts.push(t)\n }\n if (cardIndex === 1) {\n ref.classList.remove('scale-125')\n const t2 = setTimeout(() => {\n if (cardIndex === 1) ref.classList.add('scale-125')\n }, 100)\n timeouts.push(t2)\n }\n })\n return () => timeouts.forEach(clearTimeout)\n }, [activeIndex, getIndexes, items.length])\n\n const nextApp = () =>\n setActiveIndex((prev) => (prev + 1 === items.length ? 0 : prev + 1))\n\n const previousApp = () =>\n setActiveIndex((prev) => (prev - 1 === -1 ? items.length - 1 : prev - 1))\n\n return (\n <div className=\"flex items-center justify-center w-full h-full\">\n <div className=\"flex items-center gap-10\">\n <button\n type=\"button\"\n onClick={previousApp}\n aria-label=\"Previous\"\n className=\"cursor-pointer rounded-lg transition-all duration-300 hover:bg-ice-dark dark:hover:bg-independence rotate-180\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-10 w-10 dark:stroke-white\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n\n <div className=\"flex\">\n {indexPool.map((index, id) => {\n const item = items[index]\n if (!item) return null\n return id === 1 ? (\n <div\n key={id}\n ref={(ref) => {\n if (cardRefs.current.length < 3 && ref)\n cardRefs.current.push({ cardIndex: id, ref })\n }}\n className=\"transition-all duration-300 scale-125 z-10 shadow-2xl rounded-lg\"\n >\n <GridCard item={item} buttonText={buttonText} onOpen={onOpen} />\n </div>\n ) : (\n <div\n key={id}\n ref={(ref) => {\n if (cardRefs.current.length < 3 && ref)\n cardRefs.current.push({ cardIndex: id, ref })\n }}\n className=\"transition-all duration-300 shadow-2xl rounded-lg\"\n >\n <OpaqueGridCard item={item} isRight={id === 2} buttonText={buttonText} onOpen={onOpen} />\n </div>\n )\n })}\n </div>\n\n <button\n type=\"button\"\n onClick={nextApp}\n aria-label=\"Next\"\n className=\"cursor-pointer rounded-lg transition-all duration-300 hover:bg-ice-dark dark:hover:bg-independence\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-10 w-10 dark:stroke-white\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport CatalogGrid from './CatalogGrid'\nimport CatalogCarousel from './CatalogCarousel'\nimport { GridCardItem } from './GridCard'\n\nexport interface CatalogProps {\n /** 'grid' | 'carousel' */\n display?: 'grid' | 'carousel'\n items?: GridCardItem[]\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Switches between grid and carousel layouts for a list of application tiles.\n *\n * @example\n * <Catalog display=\"carousel\" items={apps} onOpen={({ to }) => navigate(to!)} />\n */\nexport default function Catalog({ display = 'grid', items = [], buttonText, onOpen }: CatalogProps) {\n return (\n <div className=\"w-full h-full\">\n {display === 'grid' ? (\n <CatalogGrid items={items} buttonText={buttonText} onOpen={onOpen} />\n ) : (\n <CatalogCarousel items={items} buttonText={buttonText} onOpen={onOpen} />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport Tooltip from './Tooltip'\n\nexport interface MenuBarItemProps {\n icon: React.ReactNode\n isActive: boolean\n title: string\n /** Called when the item is clicked (navigation or logout etc.) */\n onClick?: () => void\n}\n\n/**\n * Single item in the MenuBar sidebar.\n *\n * Decoupled from React Router and context — navigation is delegated to `onClick`.\n * The Tooltip is powered by Radix (same as the standalone Tooltip component).\n *\n * @example\n * <MenuBarItem\n * icon={<Icon.Dashboard />}\n * title=\"Dashboard\"\n * isActive={pathname === '/dashboard'}\n * onClick={() => navigate('/dashboard')}\n * />\n */\nexport default function MenuBarItem({ icon, isActive, title, onClick }: MenuBarItemProps) {\n return (\n <Tooltip title={title} placement=\"right\">\n <div\n role=\"button\"\n aria-label={title}\n aria-current={isActive ? 'page' : undefined}\n className={`transition duration-300 hover:bg-prussian-blue ${\n isActive ? 'bg-prussian-blue' : ''\n } rounded-lg p-2 cursor-pointer`}\n onClick={onClick}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && onClick?.()}\n >\n {icon}\n </div>\n </Tooltip>\n )\n}\n","import React from 'react'\nimport MenuBarItem, { MenuBarItemProps } from './MenuBarItem'\n\nexport interface MenuBarItemConfig extends MenuBarItemProps {\n key: string\n}\n\nexport interface MenuBarProps {\n items: MenuBarItemConfig[]\n}\n\n/**\n * Vertical icon sidebar (left edge of the app).\n *\n * Decoupled from React Router, useAuth, and useData.\n * The app composes the items array (with `onClick` handlers) and passes it in.\n *\n * @example\n * const items: MenuBarItemConfig[] = [\n * { key: 'dash', icon: <Icon.Dashboard />, title: 'Dashboard', isActive: pathname === '/dashboard', onClick: () => navigate('/dashboard') },\n * { key: 'logout', icon: <Icon.PowerOff />, title: 'Sign Out', isActive: false, onClick: logOut },\n * ]\n * <MenuBar items={items} />\n */\nexport default function MenuBar({ items }: MenuBarProps) {\n return (\n <nav\n aria-label=\"Main navigation\"\n className=\"w-16 calculated-height bg-independence rounded-tr-lg rounded-br-lg flex flex-col gap-2 items-center p-2 z-50\"\n >\n {items.map((item) => (\n <MenuBarItem\n key={item.key}\n icon={item.icon}\n title={item.title}\n isActive={item.isActive}\n onClick={item.onClick}\n />\n ))}\n </nav>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface ContextMenuActionItem {\n key: string | number\n value: React.ReactNode\n icon?: React.ReactNode\n onClick?: (path?: string, reportType?: string) => void\n path?: string\n reportType?: string\n children?: ContextMenuActionItem[]\n}\n\nexport interface ContextMenuPosition {\n x: number\n y: number\n}\n\nexport interface ContextMenuProps {\n items: ContextMenuActionItem[]\n position: ContextMenuPosition\n visible: boolean\n onClose: () => void\n}\n\n/**\n * Right-click context menu positioned at arbitrary screen coordinates.\n *\n * Decoupled from `useData()` — the app manages `visible`, `position`, and\n * `items` in its own state and passes them here.\n *\n * @example\n * const [ctx, setCtx] = useState({ visible: false, items: [], position: { x: 0, y: 0 } })\n *\n * <div onContextMenu={(e) => {\n * e.preventDefault()\n * setCtx({ visible: true, items: menuItems, position: { x: e.clientX, y: e.clientY } })\n * }}>...</div>\n *\n * <ContextMenu {...ctx} onClose={() => setCtx(c => ({ ...c, visible: false }))} />\n */\nexport default function ContextMenu({ items, position, visible, onClose }: ContextMenuProps) {\n const contextRef = useRef<HTMLDivElement>(null)\n const childMenuRef = useRef<HTMLDivElement>(null)\n\n const [hasArrowUp, setHasArrowUp] = useState(true)\n const [childArrowUp, setChildArrowUp] = useState(false)\n const [hoveredItem, setHoveredItem] = useState(-1)\n const [hoveredChild, setHoveredChild] = useState(-1)\n const [activeChildren, setActiveChildren] = useState<ContextMenuActionItem[]>([])\n\n useEffect(() => {\n const clickAway = ({ target }: MouseEvent) => {\n if (contextRef.current && !contextRef.current.contains(target as Node)) {\n if (childMenuRef.current) {\n childMenuRef.current.classList.add('opacity-0')\n childMenuRef.current.style.left = '0px'\n childMenuRef.current.style.top = '0px'\n }\n setActiveChildren([])\n onClose()\n }\n }\n window.addEventListener('click', clickAway)\n return () => window.removeEventListener('click', clickAway)\n }, [onClose])\n\n useEffect(() => {\n const current = contextRef.current\n const child = childMenuRef.current\n if (!current || !child) return\n\n const { height, width } = current.getBoundingClientRect()\n if (position.y + height >= window.innerHeight) {\n current.style.top = `${position.y - (height - 40)}px`\n setHasArrowUp(false)\n } else {\n current.style.top = `${position.y}px`\n setHasArrowUp(true)\n }\n current.style.left = `${position.x}px`\n child.style.width = `${width}px`\n child.classList.add('opacity-0')\n }, [position])\n\n const onItemClick = (e: React.MouseEvent, item: ContextMenuActionItem) => {\n if (item.onClick) {\n if (childMenuRef.current) {\n childMenuRef.current.classList.add('opacity-0')\n childMenuRef.current.style.left = '0px'\n childMenuRef.current.style.top = '0px'\n }\n setActiveChildren([])\n item.onClick(item.path, item.reportType)\n } else if (item.children?.length) {\n const targetBbox = (e.target as HTMLElement).getBoundingClientRect()\n const childHeight = childMenuRef.current?.getBoundingClientRect().height ?? 0\n const contextBbox = contextRef.current?.getBoundingClientRect() ?? { y: 0, width: 0, height: 0 }\n const contextWidth = contextBbox.width\n\n if (targetBbox.y + childHeight >= window.innerHeight) {\n setChildArrowUp(false)\n if (childMenuRef.current) childMenuRef.current.style.top = `${targetBbox.y - childHeight}px`\n } else {\n setChildArrowUp(true)\n if (childMenuRef.current)\n childMenuRef.current.style.top = `${targetBbox.y - contextBbox.y + targetBbox.height / 2 - 10}px`\n }\n setActiveChildren(item.children)\n if (childMenuRef.current) {\n childMenuRef.current.classList.remove('opacity-0')\n childMenuRef.current.style.left = `${Math.round(contextWidth + 10)}px`\n }\n }\n }\n\n if (!visible) return null\n\n return (\n <div\n ref={contextRef}\n className={`transition-all duration-150 absolute rounded-lg bg-ice text-prussian-blue z-30 flex ${\n hasArrowUp && hoveredItem === 0\n ? 'context-arrow-up context-arrow-hovered'\n : !hasArrowUp && hoveredItem === items.length - 1\n ? 'context-arrow-down context-arrow-hovered'\n : hasArrowUp\n ? 'context-arrow-up'\n : 'context-arrow-down'\n }`}\n >\n <ul className=\"z-50\">\n {items.map((item, index) => (\n <li\n key={item.key}\n onContextMenu={(e) => e.preventDefault()}\n onMouseEnter={() => setHoveredItem(index)}\n onMouseLeave={() => setHoveredItem(-1)}\n className={`flex items-center justify-between transition-all duration-300 p-2 cursor-pointer hover:bg-ice-dark ${\n index === 0 ? 'rounded-tl-lg rounded-tr-lg' : ''\n } ${index === items.length - 1 ? 'rounded-bl-lg rounded-br-lg' : ''}`}\n onClick={(e) => onItemClick(e, item)}\n >\n <div className=\"flex items-center gap-2 pointer-events-none\">\n {item.icon}\n {item.value}\n </div>\n <div className=\"pointer-events-none\">\n {item.children && (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n </div>\n </li>\n ))}\n </ul>\n\n {/* Sub-menu */}\n <div\n ref={childMenuRef}\n className={`transition-all duration-150 absolute rounded-lg bg-ice text-prussian-blue ${\n childArrowUp && hoveredChild === 0\n ? 'context-arrow-up context-arrow-hovered'\n : !childArrowUp && hoveredChild === activeChildren.length - 1\n ? 'context-arrow-down context-arrow-hovered'\n : childArrowUp\n ? 'context-arrow-up'\n : 'context-arrow-down'\n }`}\n >\n <ul>\n {activeChildren.map((item, index) => (\n <li\n key={index}\n className={`flex items-center gap-2 p-2 cursor-pointer transition-all duration-150 hover:bg-ice-dark ${\n index === 0 ? 'rounded-tl-lg rounded-tr-lg' : ''\n } ${index === activeChildren.length - 1 ? 'rounded-bl-lg rounded-br-lg' : ''}`}\n onClick={() => item.onClick?.(item.path, item.reportType)}\n onMouseEnter={() => setHoveredChild(index)}\n onMouseLeave={() => setHoveredChild(-1)}\n >\n {item.icon}\n {item.value}\n </li>\n ))}\n </ul>\n </div>\n </div>\n )\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport Button from '../inputs/Button'\n\nexport interface WizardStep {\n /** Ref to the DOM element to highlight */\n stepRef: React.RefObject<HTMLElement>\n description: React.ReactNode\n /** 'natural' | 'center' — controls tooltip position relative to target */\n positioning?: 'natural' | 'center'\n}\n\nexport interface WizardProps {\n children: React.ReactNode\n steps: WizardStep[]\n /** localStorage key used to remember dismissal (default: 'oxygen_wizard') */\n storageKey?: string\n}\n\n/**\n * Guided-tour overlay wizard.\n *\n * Highlights a DOM element via a border, then shows a floating tooltip\n * adjacent to it. Remembers dismissal via localStorage.\n *\n * @example\n * const step1Ref = useRef<HTMLDivElement>(null)\n * const steps = [\n * { stepRef: step1Ref, description: 'Click here to start.', positioning: 'natural' },\n * ]\n * <Wizard steps={steps}>\n * <div ref={step1Ref}>...</div>\n * </Wizard>\n */\nexport default function Wizard({ children, steps, storageKey = 'po_wizard' }: WizardProps) {\n const wizardRef = useRef<HTMLDivElement>(null)\n const [activeStep, setActiveStep] = useState(0)\n const [targetBbox, setTargetBbox] = useState<DOMRect | null>(null)\n\n const HIGHLIGHTED = useMemo(\n () => ['border', 'border-4', 'border-prussian-blue', 'pointer-events-none'] as string[],\n []\n )\n\n const closeWizard = useCallback(() => {\n steps[activeStep]?.stepRef.current?.classList.remove(...HIGHLIGHTED)\n if (wizardRef.current) wizardRef.current.style.display = 'none'\n }, [HIGHLIGHTED, steps, activeStep])\n\n useEffect(() => {\n const visited = JSON.parse(localStorage.getItem(storageKey) ?? 'false')\n if (visited) {\n closeWizard()\n return\n }\n const el = steps[activeStep]?.stepRef.current\n if (el) {\n setTargetBbox(el.getBoundingClientRect())\n el.classList.add(...HIGHLIGHTED)\n }\n }, [closeWizard, steps, activeStep, HIGHLIGHTED, storageKey])\n\n const onStepChange = () => {\n if (steps[activeStep + 1]) {\n steps[activeStep].stepRef.current?.classList.remove(...HIGHLIGHTED)\n const nextEl = steps[activeStep + 1].stepRef.current\n if (nextEl) setTargetBbox(nextEl.getBoundingClientRect())\n setActiveStep(activeStep + 1)\n } else {\n localStorage.setItem(storageKey, 'true')\n closeWizard()\n }\n }\n\n const step = steps[activeStep]\n const left = step && targetBbox\n ? step.positioning === 'natural'\n ? isNaN(targetBbox.width + 20) ? 0 : targetBbox.width + 20\n : isNaN(targetBbox.width / 2) ? 0 : targetBbox.width / 2\n : 'auto'\n const top = step && targetBbox\n ? step.positioning === 'natural'\n ? isNaN(targetBbox.y + 10) ? 0 : targetBbox.y + 10\n : isNaN(targetBbox.height / 2) ? 0 : targetBbox.height / 2\n : 'auto'\n\n return (\n <div className=\"h-full p-1 rounded-lg w-full\">\n <div className=\"absolute\" ref={wizardRef}>\n <div\n style={{ left, top }}\n className=\"absolute bg-white rounded-lg p-2 w-[220px] z-50 text-prussian-blue drop-shadow-md transition-all duration-300\"\n >\n {step?.description}\n <div className=\"flex justify-end\">\n <span className=\"flex h-3 w-3 relative left-14 top-4\">\n <span className=\"animate-ping absolute inline-flex h-3 w-3 rounded-full bg-dark-cornflower-blue opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-3 w-3 bg-dark-cornflower-blue\" />\n </span>\n <Button\n onClick={onStepChange}\n content={activeStep === steps.length - 1 ? 'Close' : 'Next'}\n style={{ width: 55, padding: '5px 10px', margin: '0' }}\n />\n </div>\n </div>\n </div>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface SearchInputProps {\n value?: any\n onChange?: React.ChangeEventHandler<HTMLInputElement>\n disabled?: boolean\n label?: React.ReactNode\n htmlFor?: string\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n layout?: string\n [key: string]: any\n}\n\n/**\n * Search text field with a magnifier icon on the right.\n */\nconst SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(function SearchInput(\n {\n value,\n onChange,\n disabled,\n label,\n htmlFor,\n placeholder,\n name,\n inputStyle,\n style,\n layout = 'vertical',\n },\n ref\n) {\n return (\n <div className=\"relative flex flex-col items-center justify-center\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n style={style ?? {}}\n >\n {label && (\n <label className=\"text-lg font-bold ml-1 max-content text-prussian-blue dark:text-white\" htmlFor={htmlFor}>\n {label}\n </label>\n )}\n <div className=\"bg-white flex items-center gap-1 rounded-lg focus:outline-oxford-blue-700-opaque pr-2\">\n <input\n ref={ref}\n disabled={disabled}\n value={value}\n onChange={onChange}\n type=\"text\"\n name={name}\n id={htmlFor}\n className=\"focus:outline-none pl-2 h-9 w-56 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed\"\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n {/* Search icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-6 h-6\">\n <path fillRule=\"evenodd\" d=\"M10.5 3.75a6.75 6.75 0 100 13.5 6.75 6.75 0 000-13.5zM2.25 10.5a8.25 8.25 0 1114.59 5.28l4.69 4.69a.75.75 0 11-1.06 1.06l-4.69-4.69A8.25 8.25 0 012.25 10.5z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n </div>\n </div>\n )\n})\n\nexport default SearchInput\n","export interface DropdownPillProps {\n value?: React.ReactNode\n hasSiblings?: boolean\n}\n\n/**\n * Pill chip used inside Dropdown to display selected values.\n */\nexport default function DropdownPill({ value, hasSiblings = false }: DropdownPillProps) {\n return (\n <div\n className={`bg-prussian-blue text-white text-sm text-ellipsis ${hasSiblings ? 'w-24' : 'w-max'} p-1 rounded-lg whitespace-nowrap overflow-hidden`}\n >\n {value}\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport SearchInput from './SearchInput'\nimport DropdownPill from './DropdownPill'\nimport COLORS from '../../utils/colors'\n\nexport interface DropdownItem {\n key: string | number\n label: React.ReactNode\n icon?: React.ReactNode\n}\n\nexport interface DropdownProps {\n isMultiselect?: boolean\n hasSearch?: boolean\n label?: React.ReactNode\n name?: string\n value?: any\n onChange?: (e: { target: { value: any; id?: string; name?: string } }) => void\n onBlur?: React.FocusEventHandler\n disabled?: boolean\n /** 'horizontal' | 'vertical' */\n layout?: string\n errorMessage?: React.ReactNode\n style?: React.CSSProperties\n htmlFor?: string\n items?: DropdownItem[]\n labelStyle?: React.CSSProperties\n placeholder?: string\n [key: string]: any\n}\n\n/**\n * Select / multi-select dropdown powered by Radix Popover.\n *\n * Radix handles focus-trap within the popover, keyboard dismiss (Escape),\n * and correct portal-based z-index stacking.\n *\n * Emits `{ target: { value, id, name } }` for form-compatibility.\n *\n * @example\n * // Single-select\n * <Dropdown label=\"Vessel\" items={vessels} value={form.vessel} onChange={handleChange} htmlFor=\"vessel\" />\n *\n * // Multi-select\n * <Dropdown isMultiselect label=\"Fuels\" items={fuels} value={form.fuels} onChange={handleChange} />\n */\nexport default function Dropdown({\n isMultiselect = false,\n hasSearch = true,\n label,\n name,\n value,\n onChange,\n disabled,\n layout = 'horizontal',\n errorMessage,\n style = {},\n htmlFor,\n items = [],\n labelStyle = {},\n placeholder,\n}: DropdownProps) {\n const [open, setOpen] = useState(false)\n const [selectedItems, setSelectedItems] = useState<(string | number)[]>([])\n const [hoveredItem, setHoveredItem] = useState<string | number | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n const [innerItems, setInnerItems] = useState<DropdownItem[]>([])\n\n useEffect(() => {\n setInnerItems(items)\n }, [items])\n\n useEffect(() => {\n if (isMultiselect && Array.isArray(value)) {\n setSelectedItems(value)\n }\n }, [isMultiselect, value])\n\n const selectItem = (key: string | number) => {\n if (isMultiselect) {\n const next = selectedItems.includes(key)\n ? selectedItems.filter((it) => it !== key)\n : [...selectedItems, key]\n setSelectedItems(next)\n onChange?.({ target: { value: next, id: htmlFor, name } })\n } else {\n setSelectedItems([key])\n onChange?.({ target: { value: key, id: htmlFor, name } })\n setOpen(false)\n }\n }\n\n const onSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const term = e.target.value\n setSearchTerm(term)\n setInnerItems(\n term.trim() === ''\n ? items\n : items.filter((it) =>\n String(it.label).toLowerCase().includes(term.toLowerCase())\n )\n )\n }\n\n const isSelected = (key: string | number) =>\n Array.isArray(value) ? value.includes(key) : value === key\n\n return (\n <div className=\"mt-2\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n >\n {label && (\n <label\n className=\"text-md font-bold ml-1 max-content select-none text-prussian-blue dark:text-white\"\n htmlFor={htmlFor}\n style={labelStyle}\n >\n {label}\n </label>\n )}\n\n <Popover.Root open={open && !disabled} onOpenChange={(o) => !disabled && setOpen(o)}>\n <Popover.Trigger asChild>\n <div\n id={htmlFor}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n style={style}\n className={`flex items-center justify-between relative h-9 rounded-lg cursor-pointer select-none ${disabled ? 'cursor-not-allowed bg-disabled' : 'bg-white'}`}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => e.key === 'Enter' && !disabled && setOpen(true)}\n >\n {/* Selected value(s) */}\n <div\n className={`h-7 pl-2 ${!style?.width ? 'min-w-[240px]' : ''} focus:outline-none text-prussian-blue flex items-center gap-1 overflow-hidden`}\n >\n {!value || (Array.isArray(value) && value.length === 0) ? (\n <span className=\"text-roman-silver text-sm\">{placeholder}</span>\n ) : Array.isArray(value) ? (\n <>\n {value.slice(0, 1).map((val) => (\n <DropdownPill\n key={String(val)}\n hasSiblings={value.length > 1}\n value={innerItems.find((it) => it.key === val)?.label}\n />\n ))}\n {value.length > 1 && <DropdownPill value={`+${value.length - 1} more`} />}\n </>\n ) : (\n <DropdownPill value={innerItems.find((it) => it.key === value)?.label} />\n )}\n </div>\n\n {/* Chevron */}\n <div className={`transition-transform duration-300 mr-2 ${open ? 'rotate-180' : 'rotate-0'}`}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: style?.width || 240 }}\n className=\"bg-ice rounded-lg shadow-md z-50 p-2 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\"\n onInteractOutside={() => setOpen(false)}\n >\n {hasSearch && (\n <div className=\"mb-2\">\n <SearchInput\n style={{ width: '100%' }}\n inputStyle={{ width: '100%' }}\n value={searchTerm}\n onChange={onSearchChange}\n placeholder=\"Search...\"\n />\n </div>\n )}\n <div role=\"listbox\" aria-multiselectable={isMultiselect} className=\"max-h-40 overflow-y-auto\">\n {innerItems.map((item, idx) => (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={isSelected(item.key)}\n aria-rowindex={idx}\n className={`flex items-center justify-between p-2 hover:bg-prussian-blue hover:text-white transition-all duration-150 text-sm text-prussian-blue rounded-lg cursor-pointer ${\n selectedItems.includes(item.key) ? 'bg-ice-dark' : ''\n }`}\n onClick={() => selectItem(item.key)}\n onMouseEnter={() => setHoveredItem(item.key)}\n onMouseLeave={() => setHoveredItem(null)}\n >\n <div className=\"flex items-center gap-2 text-xs\">\n {item.icon && <div>{item.icon}</div>}\n {item.label}\n </div>\n {isSelected(item.key) && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M4 10l4.5 4.5L16 6\"\n stroke={hoveredItem === item.key ? '#fff' : COLORS.PALETTE['prussian-blue']}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n ))}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport SearchInput from '../inputs/SearchInput'\nimport Dropdown from '../inputs/Dropdown'\nimport IconButton from './IconButton'\n\n/** ─────────────────── types ─────────────────── */\nexport interface TableColumn {\n key: string | number\n label: React.ReactNode\n keyBind: string\n component?: (cellValue: any, row: any) => React.ReactNode\n}\n\nexport interface PaginationOptions {\n enabled?: boolean\n perPage?: number\n withPicker?: boolean\n serverSide?: boolean\n /** Server-side: current 1-based page number */\n page?: number\n /** Server-side: total page count */\n maxPage?: number\n /** Server-side: total row count (used to calculate maxPage) */\n totalCount?: number\n pickerOptions?: Array<{ key: number; value: number; label: number }>\n onPageChange?: (page: number) => void\n onPerPageChange?: (perPage: number) => void\n}\n\nexport interface ExpandRowOptions {\n enabled?: boolean\n expandIcon?: React.ReactNode\n expandComponent?: (row: any) => React.ReactNode\n}\n\nexport interface TableProps {\n columns?: TableColumn[]\n rows?: any[]\n pagination?: PaginationOptions\n expandRow?: ExpandRowOptions\n hasSearch?: boolean\n footer?: React.ReactNode\n header?: React.ReactNode\n tableRef?: React.Ref<any>\n [key: string]: any\n}\n\n/** ─────────────────── defaults ─────────────────── */\nconst DEFAULT_PICKER: PaginationOptions['pickerOptions'] = [\n { key: 1, value: 5, label: 5 },\n { key: 2, value: 10, label: 10 },\n { key: 3, value: 15, label: 15 },\n { key: 4, value: 20, label: 20 },\n]\n\nconst DEFAULT_PAGINATION: PaginationOptions = {\n enabled: true,\n perPage: 15,\n withPicker: true,\n pickerOptions: DEFAULT_PICKER,\n}\n\nconst DEFAULT_EXPAND: ExpandRowOptions = {\n enabled: false,\n expandIcon: <></>,\n expandComponent: () => <></>,\n}\n\n/** ─────────────────── helpers ─────────────────── */\nfunction createDatasets(rows: any[], perPage: number | null): any[][] {\n if (!perPage) return [rows.slice()]\n const all: any[][] = []\n for (let i = 0; i < rows.length; i += perPage) {\n all.push(rows.slice(i, i + perPage))\n }\n return all\n}\n\n/** ─────────────────── sub-components ─────────────────── */\nfunction TableHeader({ columns }: { columns: TableColumn[] }) {\n return (\n <thead className=\"bg-surface-raised min-h-[50px] border-b border-b-border flex items-center\">\n <tr className=\"flex w-full items-center justify-center\">\n {columns.map((col) => (\n <th\n key={col.key}\n className=\"text-center w-full text-[13px] text-foreground\"\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n )\n}\n\nfunction TableBody({\n columns,\n rows,\n expandRow,\n}: {\n activePage?: number\n columns: TableColumn[]\n rows: any[]\n expandRow: ExpandRowOptions\n}) {\n const [visibleRows, setVisibleRows] = useState<Record<string, { visible: boolean }>>({})\n\n const toggleRow = (rowKey: string) => {\n setVisibleRows((prev) => ({\n ...prev,\n [rowKey]: { visible: !prev[rowKey]?.visible },\n }))\n }\n\n useEffect(() => {\n if (rows.length && Object.keys(visibleRows).length === 0) {\n const initial: Record<string, { visible: boolean }> = {}\n rows.forEach((row) => {\n initial[row.key] = { visible: false }\n })\n setVisibleRows(initial)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rows])\n\n return (\n <tbody className=\"w-full\">\n {rows.map((row, i) => (\n <React.Fragment key={row.key}>\n <tr\n className={`border-b border-b-border flex min-w-max hover:bg-surface-raised transition-all duration-150 ${\n i % 2 === 0\n ? 'bg-surface'\n : 'bg-surface-raised'\n }`}\n >\n {expandRow.enabled && (\n <td className=\"flex items-center\">\n <span\n onClick={() => toggleRow(row.key)}\n className={`p-2 cursor-pointer origin-center transition-all duration-200 ${\n visibleRows[row.key]?.visible ? 'rotate-180' : 'rotate-0'\n }`}\n >\n {expandRow.expandIcon ?? (\n /* PlusCircle */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"w-5 h-5 text-foreground-muted\">\n <path fillRule=\"evenodd\" d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25zM12.75 9a.75.75 0 00-1.5 0v2.25H9a.75.75 0 000 1.5h2.25V15a.75.75 0 001.5 0v-2.25H15a.75.75 0 000-1.5h-2.25V9z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </span>\n </td>\n )}\n {columns.map((col, index) => (\n <td\n key={index}\n className={`text-center min-h-[40px] w-full flex items-center justify-center p-1 border-border ${\n index !== columns.length - 1 ? 'border-r-2' : ''\n }`}\n >\n {'component' in col && col.component\n ? col.component(row[col.keyBind], row)\n : row[col.keyBind]}\n </td>\n ))}\n </tr>\n\n {expandRow.enabled && (\n <tr\n key={`extra-${i}`}\n className={`overflow-hidden w-full transition-all duration-300 ${\n visibleRows[row.key]?.visible ? 'max-h-[2000px]' : 'max-h-0'\n }`}\n >\n <td colSpan={columns.length} className=\"p-0 pb-1\">\n <div\n className={`overflow-hidden w-full transition-[max-height] duration-300 ${\n visibleRows[row.key]?.visible ? 'max-h-[2000px]' : 'max-h-0'\n }`}\n >\n {expandRow.expandComponent?.(row)}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n ))}\n </tbody>\n )\n}\n\nfunction Pagination({\n activePage,\n onPageChange,\n maxPage,\n options,\n onPerPageChange,\n serverSide = false,\n}: {\n activePage: number\n onPageChange: (page: number) => void\n maxPage: number\n options: PaginationOptions\n onPerPageChange: (perPage: number) => void\n serverSide?: boolean\n}) {\n const picker = options.pickerOptions ?? DEFAULT_PICKER\n const matchedOption = picker.find(\n (o) => o.label === options.perPage || o.value === options.perPage\n )\n const [perPageKey, setPerPageKey] = useState(() => matchedOption?.key ?? picker[0]?.key)\n const displayPerPageKey = serverSide ? matchedOption?.key ?? perPageKey : perPageKey\n\n useEffect(() => {\n if (serverSide && options.perPage != null) {\n const next = picker.find((o) => o.label === options.perPage || o.value === options.perPage)\n if (next) setPerPageKey(next.key)\n }\n }, [serverSide, options.perPage, picker])\n\n const navBtn = (icon: React.ReactNode, disabled: boolean, onClick: () => void) => (\n <IconButton disabled={disabled} onClick={onClick} icon={icon} />\n )\n\n const chevronRight = (color: string) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"h-5 w-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n\n const doubleChevronRight = (color: string) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"h-5 w-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13 5l7 7-7 7M5 5l7 7-7 7\" />\n </svg>\n )\n\n const disabledColor = 'var(--color-foreground-muted)'\n const enabledColor = 'var(--color-foreground)'\n\n return (\n <div className=\"flex gap-2 items-center justify-end pt-2\">\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{doubleChevronRight(activePage === 0 ? disabledColor : enabledColor)}</span>,\n activePage === 0,\n () => onPageChange(0)\n )}\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{chevronRight(activePage === 0 ? disabledColor : enabledColor)}</span>,\n activePage === 0,\n () => activePage > 0 && onPageChange(activePage - 1)\n )}\n <span className=\"bg-surface-raised rounded-lg ml-2 mr-2 shadow-sm p-2 w-10 text-center select-none text-foreground\">\n {activePage + 1}\n </span>\n {navBtn(\n chevronRight(activePage === maxPage ? disabledColor : enabledColor),\n activePage === maxPage,\n () => activePage < maxPage && onPageChange(activePage + 1)\n )}\n {navBtn(\n doubleChevronRight(activePage === maxPage ? disabledColor : enabledColor),\n activePage === maxPage,\n () => onPageChange(maxPage)\n )}\n {options.withPicker && (\n <Dropdown\n style={{ width: 80, position: 'relative', bottom: 4 }}\n hasSearch={false}\n items={picker}\n isMultiselect={false}\n value={displayPerPageKey}\n onChange={({ target: { value } }) => {\n const key = typeof value === 'string' && /^\\d+$/.test(value) ? Number(value) : value\n if (!serverSide) setPerPageKey(key)\n const opt = picker.find((o) => o.key === key)\n onPerPageChange(opt?.label ?? opt?.value ?? key)\n }}\n />\n )}\n </div>\n )\n}\n\n/** ─────────────────── main component ─────────────────── */\n\n/**\n * Data table with optional search, pagination, and expandable rows.\n *\n * Supports both client-side and server-side pagination.\n *\n * @example\n * <Table\n * columns={[{ key: 'name', label: 'Name', keyBind: 'name' }]}\n * rows={data}\n * pagination={{ enabled: true, perPage: 15 }}\n * />\n */\nexport default function Table({\n columns = [],\n rows = [],\n pagination = DEFAULT_PAGINATION,\n expandRow = DEFAULT_EXPAND,\n hasSearch = true,\n footer = null,\n header = null,\n}: TableProps) {\n const searchRef = useRef<HTMLInputElement>(null)\n const [searchTerm, setSearchTerm] = useState('')\n const [perPage, setPerPage] = useState(\n typeof pagination.perPage === 'number' ? pagination.perPage : 15\n )\n const [activePage, setActivePage] = useState(0)\n const [datasets, setDatasets] = useState<any[][]>([])\n\n const isServerSide = !!(pagination.enabled && pagination.serverSide)\n\n const MAX_PAGE = useMemo(() => {\n if (isServerSide && typeof pagination.maxPage === 'number') return Math.max(0, pagination.maxPage)\n if (isServerSide && typeof pagination.totalCount === 'number')\n return Math.max(0, Math.ceil(pagination.totalCount / perPage) - 1)\n return datasets.length ? datasets.length - 1 : 0\n }, [isServerSide, pagination.maxPage, pagination.totalCount, perPage, datasets.length])\n\n const currentPageRows = useMemo(() => {\n if (isServerSide) return rows\n return datasets.length ? datasets[activePage] ?? [] : []\n }, [isServerSide, rows, datasets, activePage])\n\n useEffect(() => {\n if (pagination.enabled && !isServerSide) setPerPage(pagination.perPage ?? 15)\n }, [pagination, isServerSide])\n\n useEffect(() => {\n if (isServerSide && typeof pagination.perPage === 'number') setPerPage(pagination.perPage)\n }, [isServerSide, pagination.perPage])\n\n useEffect(() => {\n if (isServerSide) return\n setDatasets(createDatasets(rows, pagination.enabled ? perPage : null))\n }, [rows, perPage, pagination, isServerSide])\n\n useEffect(() => {\n if (isServerSide && typeof pagination.page === 'number' && pagination.page >= 1)\n setActivePage(pagination.page - 1)\n }, [isServerSide, pagination.page])\n\n const onSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const term = e.target.value\n setSearchTerm(term)\n if (isServerSide) return\n const filtered = rows.filter((row) =>\n Object.values(row).some(\n (v) => !!v && String(v).toLowerCase().includes(term.toLowerCase())\n )\n )\n setDatasets(createDatasets(filtered, pagination.enabled ? perPage : null))\n setActivePage(0)\n }\n\n const onPaginationChange = (perPageValue: number) => {\n setPerPage(perPageValue)\n setActivePage(0)\n if (isServerSide) pagination.onPerPageChange?.(perPageValue)\n }\n\n const handlePageChange = (newPage: number) => {\n if (isServerSide) {\n pagination.onPageChange?.(newPage + 1)\n return\n }\n setActivePage(newPage)\n }\n\n return (\n <div className=\"w-full h-max rounded-lg\">\n <div className=\"flex items-center justify-between mb-2\">\n {hasSearch && (\n <SearchInput\n ref={searchRef}\n value={searchTerm}\n onChange={onSearchChange}\n placeholder=\"Search term...\"\n />\n )}\n {pagination.enabled && (\n <Pagination\n activePage={activePage}\n onPageChange={handlePageChange}\n maxPage={MAX_PAGE}\n onPerPageChange={onPaginationChange}\n options={pagination}\n serverSide={isServerSide}\n />\n )}\n </div>\n <div>{header}</div>\n {/* Horizontal scroll wrapper — enables swipe-scroll on narrow viewports */}\n <div className=\"overflow-x-auto rounded-lg\">\n <table className=\"w-full\">\n <TableHeader columns={columns} />\n <TableBody columns={columns} rows={currentPageRows} expandRow={expandRow} />\n </table>\n </div>\n <div>{footer}</div>\n </div>\n )\n}\n","import React, { useId } from 'react'\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\n\nexport interface ThemeSwitchProps {\n checked: boolean\n onChange: (e: { target: { checked: boolean } }) => void\n /** Optional accessible label (defaults to \"Toggle dark mode\") */\n label?: string\n}\n\n/**\n * Theme (dark-mode) toggle switch powered by Radix Switch.\n *\n * The thumb color indicates mode: green = light, slate = dark.\n * Layout (position, margin) is the parent's responsibility — this component\n * renders inline with no external margins.\n *\n * @example\n * <ThemeSwitch checked={isDark} onChange={({ target }) => setDark(target.checked)} />\n */\nexport default function ThemeSwitch({ checked, onChange, label = 'Toggle dark mode' }: ThemeSwitchProps) {\n const id = useId()\n\n return (\n <label htmlFor={id} className=\"flex items-center gap-2 cursor-pointer select-none\">\n <SwitchPrimitive.Root\n id={id}\n checked={checked}\n onCheckedChange={(c) => onChange({ target: { checked: c } })}\n aria-label={label}\n className={[\n 'relative inline-flex h-6 w-11 items-center rounded-full',\n 'transition-colors duration-200',\n 'bg-foreground-secondary data-[state=checked]:bg-accent',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' ')}\n >\n <SwitchPrimitive.Thumb\n className={[\n 'pointer-events-none block h-5 w-5 rounded-full shadow-sm',\n 'transition-transform duration-200',\n 'data-[state=checked]:translate-x-[22px]',\n 'data-[state=unchecked]:translate-x-[2px]',\n // Moon icon (dark mode indicator) when checked, sun when unchecked\n checked ? 'bg-oxford-blue-900' : 'bg-white',\n ].join(' ')}\n >\n {/* Micro icon inside thumb */}\n {checked ? (\n // Moon\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" className=\"w-3 h-3 m-1 text-manatee\" aria-hidden=\"true\">\n <path d=\"M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z\" />\n </svg>\n ) : (\n // Sun\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" className=\"w-3 h-3 m-1 text-usafa-blue\" aria-hidden=\"true\">\n <path d=\"M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707z\" />\n </svg>\n )}\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n </label>\n )\n}\n","import React from 'react'\n\nexport interface TopBarProps {\n /** Brand area — logo, wordmark, or app name. Rendered on the leading edge. */\n brand?: React.ReactNode\n /**\n * Centre content — primary navigation links, breadcrumb, or page title.\n * On mobile (< md breakpoint) this moves below the brand row.\n */\n center?: React.ReactNode\n /**\n * Trailing actions — theme toggle, user avatar, notification bell, etc.\n * Rendered on the trailing edge.\n */\n actions?: React.ReactNode\n /**\n * Height in pixels (default 56). Controls the `h-*` style directly so\n * child scroll-offset calculations can consume it as a CSS var.\n */\n height?: number\n /** Additional className on the root element */\n className?: string\n}\n\n/**\n * App-shell top navigation bar.\n *\n * Three named slots: brand (leading), center, actions (trailing).\n * All slots are optional — omit what you don't need.\n *\n * The component is sticky by default (`sticky top-0`) with `z-[100]`.\n * Height is exposed as `--topbar-height` CSS variable on the element so\n * layout children can reference it for scroll-offset or sticky positioning.\n *\n * Light/dark aware via Phase B semantic tokens.\n *\n * @example\n * <TopBar\n * brand={<Logo />}\n * center={<NavLinks />}\n * actions={\n * <>\n * <ThemeSwitch checked={isDark} onChange={toggleDark} />\n * <UserAvatar />\n * </>\n * }\n * />\n */\nexport default function TopBar({\n brand,\n center,\n actions,\n height = 56,\n className = '',\n}: TopBarProps) {\n return (\n <header\n className={[\n 'sticky top-0 z-[100]',\n 'flex items-center justify-between gap-4',\n 'border-b border-border bg-surface',\n 'px-4 md:px-6',\n className,\n ].join(' ')}\n style={{\n height,\n // Expose as CSS var so consumers can write:\n // padding-top: calc(var(--topbar-height) + 1rem)\n ['--topbar-height' as string]: `${height}px`,\n }}\n >\n {/* ── Brand ── */}\n {brand !== undefined ? (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {brand}\n </div>\n ) : (\n // Reserve leading space even when brand is null so center stays centred\n <div aria-hidden=\"true\" className=\"flex-shrink-0 w-0\" />\n )}\n\n {/* ── Centre ── */}\n {center !== undefined && (\n <div className=\"flex flex-1 items-center justify-center min-w-0\">\n {center}\n </div>\n )}\n\n {/* ── Actions ── */}\n {actions !== undefined && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions}\n </div>\n )}\n </header>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport Tooltip, { TooltipProvider } from './Tooltip'\n\n/** ─────────────────── types ─────────────────── */\n\nexport interface SidebarItem {\n key: string\n icon: React.ReactNode\n label: string\n isActive?: boolean\n onClick?: () => void\n /** Numeric badge shown on the icon */\n badge?: number\n}\n\nexport interface SidebarSection {\n key: string\n /** Section title — visible only when expanded */\n title?: string\n items: SidebarItem[]\n}\n\nexport interface SidebarProps {\n sections: SidebarSection[]\n isExpanded: boolean\n onToggle?: () => void\n /** Expanded sidebar width in px (default 220) */\n expandedWidth?: number\n /** Collapsed sidebar width in px (default 52) */\n collapsedWidth?: number\n /** Slot rendered at the bottom of the sidebar (theme switch, user avatar…) */\n footer?: React.ReactNode\n}\n\n/** ─────────────────── sub-components ─────────────────── */\n\nfunction NavItem({\n item,\n isExpanded,\n}: {\n item: SidebarItem\n isExpanded: boolean\n}) {\n const btn = (\n <button\n type=\"button\"\n onClick={item.onClick}\n className={[\n 'group relative flex w-full items-center gap-2.5 rounded-md',\n 'px-2.5 py-2 transition-colors duration-100',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-inset',\n item.isActive\n ? 'bg-accent/10 text-accent'\n : 'text-foreground-secondary hover:bg-surface-raised hover:text-foreground',\n ].join(' ')}\n >\n {/* Icon */}\n <span className=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\">\n {item.icon}\n {item.badge !== undefined && item.badge > 0 && (\n <span className=\"absolute -right-1 -top-1 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-status-error text-[9px] font-bold text-white leading-none\">\n {item.badge > 99 ? '99+' : item.badge}\n </span>\n )}\n </span>\n\n {/* Label — only visible when expanded */}\n {isExpanded && (\n <motion.span\n initial={false}\n animate={{ opacity: 1 }}\n className=\"truncate text-sm font-medium\"\n >\n {item.label}\n </motion.span>\n )}\n\n {/* Active indicator bar */}\n {item.isActive && (\n <span className=\"absolute inset-y-0 left-0 w-[3px] rounded-r-full bg-accent\" />\n )}\n </button>\n )\n\n if (isExpanded) return btn\n\n return (\n <Tooltip title={item.label} placement=\"right\" delayDuration={200}>\n {btn}\n </Tooltip>\n )\n}\n\n/** ─────────────────── main component ─────────────────── */\n\n/**\n * Collapsible application sidebar.\n *\n * When collapsed: icon-only with tooltips. When expanded: icon + label.\n * Width animates with an ease-out-expo curve. The parent (AppShell) is\n * responsible for shifting the main content by the sidebar width.\n *\n * @example\n * const [open, setOpen] = useState(true)\n * <Sidebar\n * sections={NAV_SECTIONS}\n * isExpanded={open}\n * onToggle={() => setOpen(o => !o)}\n * />\n */\nexport default function Sidebar({\n sections,\n isExpanded,\n onToggle,\n expandedWidth = 220,\n collapsedWidth = 52,\n footer,\n}: SidebarProps) {\n return (\n <TooltipProvider delayDuration={200}>\n <motion.aside\n initial={false}\n animate={{ width: isExpanded ? expandedWidth : collapsedWidth }}\n transition={{ type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] }}\n className=\"relative flex h-full flex-col border-r border-border bg-surface overflow-hidden flex-shrink-0\"\n >\n {/* ── Toggle button ── */}\n <div className={[\n 'flex h-14 flex-shrink-0 items-center border-b border-border',\n isExpanded ? 'justify-between px-3' : 'justify-center px-1.5',\n ].join(' ')}>\n {isExpanded && (\n <motion.span\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.08 }}\n className=\"text-xs font-semibold uppercase tracking-widest text-foreground-muted select-none\"\n >\n Menu\n </motion.span>\n )}\n <Tooltip title={isExpanded ? 'Collapse menu' : 'Expand menu'} placement=\"right\" delayDuration={500}>\n <button\n type=\"button\"\n onClick={onToggle}\n aria-label={isExpanded ? 'Collapse sidebar' : 'Expand sidebar'}\n className=\"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md text-foreground-muted hover:bg-surface-raised hover:text-foreground transition-colors duration-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <motion.svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-4 w-4\"\n animate={{ rotate: isExpanded ? 0 : 180 }}\n transition={{ type: 'tween', duration: 0.22 }}\n >\n <path d=\"M13 5l-5 5 5 5\" />\n </motion.svg>\n </button>\n </Tooltip>\n </div>\n\n {/* ── Nav items ── */}\n <nav className=\"flex-1 overflow-y-auto overflow-x-hidden py-2 px-1.5 space-y-0.5\">\n {sections.map((section, si) => (\n <div key={section.key} className={si > 0 ? 'pt-3' : ''}>\n {/* Section title — hidden when collapsed */}\n {section.title && isExpanded && (\n <motion.p\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.06 }}\n className=\"px-2.5 pb-1 text-[10px] font-semibold uppercase tracking-widest text-foreground-muted select-none\"\n >\n {section.title}\n </motion.p>\n )}\n {section.items.map((item) => (\n <NavItem key={item.key} item={item} isExpanded={isExpanded} />\n ))}\n </div>\n ))}\n </nav>\n\n {/* ── Footer slot ── */}\n {footer && (\n <div className={[\n 'flex flex-shrink-0 items-center border-t border-border py-2',\n isExpanded ? 'px-3 gap-2' : 'justify-center px-1.5',\n ].join(' ')}>\n {footer}\n </div>\n )}\n </motion.aside>\n </TooltipProvider>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport Sidebar from './Sidebar'\nimport type { SidebarSection, SidebarProps } from './Sidebar'\n\nexport interface AppShellProps {\n /**\n * Top navigation bar.\n * Typically `<TopBar brand={...} actions={...} />`.\n * On mobile, a hamburger button is injected to the left of this slot when\n * `sidebarSections` is non-empty. The TopBar should leave some leading space\n * (or use its `center` / `actions` props) to avoid overlap.\n */\n topBar?: React.ReactNode\n\n /** Sidebar navigation sections */\n sidebarSections?: SidebarSection[]\n\n /** Expanded width of the sidebar in px (default 220) */\n sidebarExpandedWidth?: SidebarProps['expandedWidth']\n\n /** Collapsed width of the sidebar in px (default 52) */\n sidebarCollapsedWidth?: SidebarProps['collapsedWidth']\n\n /** Start expanded (default false) */\n sidebarDefaultExpanded?: boolean\n\n /** Slot rendered at the bottom of the sidebar */\n sidebarFooter?: SidebarProps['footer']\n\n /** Main page content */\n children?: React.ReactNode\n\n /** Root element className */\n className?: string\n}\n\n/**\n * Full-page application layout skeleton.\n *\n * Composes a sticky TopBar + collapsible Sidebar + scrollable content area.\n *\n * **Responsive behaviour:**\n * - **≥ md (768 px):** Sidebar renders inline, collapsible via its own toggle.\n * - **< md (mobile):** Sidebar becomes a fixed overlay drawer. A hamburger\n * button appears to the left of the TopBar slot to open it. Tapping the\n * backdrop or the sidebar's own toggle closes it.\n *\n * @example\n * <AppShell\n * topBar={<TopBar brand={<Logo />} actions={<ThemeSwitch ... />} />}\n * sidebarSections={NAV_SECTIONS}\n * >\n * <PageContent />\n * </AppShell>\n */\nexport default function AppShell({\n topBar,\n sidebarSections = [],\n sidebarExpandedWidth = 220,\n sidebarCollapsedWidth = 52,\n sidebarDefaultExpanded = false,\n sidebarFooter,\n children,\n className = '',\n}: AppShellProps) {\n const [expanded, setExpanded] = useState(sidebarDefaultExpanded)\n const [isMobile, setIsMobile] = useState(false)\n const [mobileOpen, setMobileOpen] = useState(false)\n\n // Track mobile breakpoint\n useEffect(() => {\n const mq = window.matchMedia('(max-width: 767px)')\n const update = (e: MediaQueryList | MediaQueryListEvent) => setIsMobile(e.matches)\n update(mq)\n mq.addEventListener('change', update as (e: MediaQueryListEvent) => void)\n return () => mq.removeEventListener('change', update as (e: MediaQueryListEvent) => void)\n }, [])\n\n // Auto-close mobile sidebar on resize to desktop\n useEffect(() => {\n if (!isMobile) setMobileOpen(false)\n }, [isMobile])\n\n const hasSidebar = sidebarSections.length > 0\n\n return (\n <div className={`flex flex-col h-screen bg-background ${className}`}>\n\n {/* ── TopBar row ── */}\n {topBar && (\n <div className=\"flex-shrink-0 flex items-stretch z-topbar\">\n {/* Mobile hamburger — injected to the left of the TopBar on small screens */}\n {hasSidebar && (\n <button\n type=\"button\"\n className={[\n 'md:hidden flex-shrink-0 self-stretch flex items-center justify-center w-14',\n 'border-r border-border',\n 'text-foreground-secondary hover:bg-surface-raised hover:text-foreground',\n 'transition-colors duration-100',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent',\n ].join(' ')}\n onClick={() => setMobileOpen((o) => !o)}\n aria-label={mobileOpen ? 'Close navigation' : 'Open navigation'}\n aria-expanded={mobileOpen}\n >\n {mobileOpen ? (\n /* X icon */\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n ) : (\n /* Hamburger icon */\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" aria-hidden=\"true\">\n <path d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )}\n </button>\n )}\n {/* TopBar fills remaining width */}\n <div className=\"flex-1 min-w-0\">\n {topBar}\n </div>\n </div>\n )}\n\n {/* ── Body row: Sidebar + Content ── */}\n <div className=\"flex flex-1 overflow-hidden\">\n\n {/* Desktop inline sidebar */}\n {hasSidebar && !isMobile && (\n <Sidebar\n sections={sidebarSections}\n isExpanded={expanded}\n onToggle={() => setExpanded((e) => !e)}\n expandedWidth={sidebarExpandedWidth}\n collapsedWidth={sidebarCollapsedWidth}\n footer={sidebarFooter}\n />\n )}\n\n {/* Mobile sidebar overlay (portal-less fixed stack) */}\n {hasSidebar && isMobile && (\n <>\n {/* Backdrop */}\n <AnimatePresence>\n {mobileOpen && (\n <motion.div\n className=\"fixed inset-0 bg-black/40 z-overlay md:hidden\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n onClick={() => setMobileOpen(false)}\n aria-hidden=\"true\"\n />\n )}\n </AnimatePresence>\n\n {/* Sidebar panel */}\n <AnimatePresence>\n {mobileOpen && (\n <motion.div\n className=\"fixed inset-y-0 left-0 z-modal md:hidden\"\n initial={{ x: '-100%' }}\n animate={{ x: 0 }}\n exit={{ x: '-100%' }}\n transition={{\n type: 'tween',\n duration: 0.26,\n ease: [0.16, 1, 0.3, 1], // ease-out-expo\n }}\n >\n <Sidebar\n sections={sidebarSections}\n isExpanded={true}\n onToggle={() => setMobileOpen(false)}\n expandedWidth={sidebarExpandedWidth}\n collapsedWidth={sidebarCollapsedWidth}\n footer={sidebarFooter}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </>\n )}\n\n {/* Main content */}\n <main className=\"flex-1 overflow-y-auto overflow-x-hidden\">\n <div className=\"h-full p-6\">\n {children}\n </div>\n </main>\n </div>\n </div>\n )\n}\n\n// Re-export SidebarSection for consumer convenience\nexport type { SidebarSection, SidebarItem } from './Sidebar'\n","import React, { useEffect, useMemo, useRef } from 'react'\n\n// ─── Theme config types ───────────────────────────────────────────────────────\n\nexport interface ThemeColors {\n background?: string\n surface?: string\n 'surface-raised'?: string\n border?: string\n 'border-strong'?: string\n foreground?: string\n 'foreground-secondary'?: string\n 'foreground-muted'?: string\n accent?: string\n 'accent-hover'?: string\n 'accent-foreground'?: string\n error?: string\n warning?: string\n success?: string\n info?: string\n}\n\nexport interface ThemeRadius {\n sm?: string | number\n md?: string | number\n lg?: string | number\n xl?: string | number\n '2xl'?: string | number\n full?: string | number\n}\n\nexport interface ThemeShadows {\n sm?: string\n md?: string\n lg?: string\n xl?: string\n}\n\nexport interface ThemeTypography {\n /** e.g. '\"Geist\", sans-serif' */\n fontFamily?: string\n fontSizeXs?: string\n fontSizeSm?: string\n fontSizeBase?: string\n fontSizeLg?: string\n fontSizeXl?: string\n fontSize2xl?: string\n fontSize3xl?: string\n fontWeightNormal?: number | string\n fontWeightMedium?: number | string\n fontWeightSemibold?: number | string\n fontWeightBold?: number | string\n lineHeightTight?: number | string\n lineHeightSnug?: number | string\n lineHeightNormal?: number | string\n lineHeightRelaxed?: number | string\n}\n\nexport interface ThemeDensity {\n /** Height of xs control (icon buttons, tiny chips). Default: 24px */\n controlXs?: string | number\n /** Height of sm control (small inputs/buttons). Default: 28px */\n controlSm?: string | number\n /** Height of md control (default inputs/buttons). Default: 36px */\n controlMd?: string | number\n /** Height of lg control (large touch targets). Default: 44px */\n controlLg?: string | number\n /** TopBar height. Default: 56px */\n topbar?: string | number\n}\n\nexport interface ThemeMotion {\n durationFast?: string\n durationNormal?: string\n durationSlow?: string\n durationGentle?: string\n}\n\n/**\n * Partial theme override configuration.\n * Every field is optional — only the keys you provide are overridden.\n */\nexport interface ThemeConfig {\n colors?: ThemeColors\n radius?: ThemeRadius\n shadows?: ThemeShadows\n typography?: ThemeTypography\n density?: ThemeDensity\n motion?: ThemeMotion\n}\n\nexport interface ThemeProviderProps {\n /**\n * Token overrides applied in both light and dark mode (on top of the defaults).\n * For dark-specific overrides see `darkTheme`.\n */\n theme?: ThemeConfig\n\n /**\n * Additional token overrides applied only when the wrapper element carries\n * the `.dark` class (i.e. when `colorScheme=\"dark\"` or when a parent sets `.dark`).\n * Injected via a scoped `<style>` tag — no inline-style limitations.\n */\n darkTheme?: ThemeConfig\n\n /**\n * Managed color scheme.\n * - `'light'` — removes `.dark` class from the wrapper\n * - `'dark'` — adds `.dark` class to the wrapper\n * - `'system'` — follows `prefers-color-scheme` media query\n * - `'auto'` — do nothing; inherit from an ancestor (default)\n */\n colorScheme?: 'light' | 'dark' | 'system' | 'auto'\n\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction px(v: string | number): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\nfunction str(v: string | number | undefined): string | undefined {\n return v == null ? undefined : String(v)\n}\n\nfunction toCssVars(theme?: ThemeConfig): Record<string, string> {\n if (!theme) return {}\n const out: Record<string, string> = {}\n\n if (theme.colors) {\n for (const [k, v] of Object.entries(theme.colors)) {\n if (v != null) out[`--color-${k}`] = v\n }\n }\n if (theme.radius) {\n for (const [k, v] of Object.entries(theme.radius)) {\n if (v != null) out[`--radius-${k}`] = px(v)\n }\n }\n if (theme.shadows) {\n for (const [k, v] of Object.entries(theme.shadows)) {\n if (v != null) out[`--shadow-${k}`] = v\n }\n }\n if (theme.typography) {\n const t = theme.typography\n const map: [string, string | number | undefined][] = [\n ['--font-family-sans', t.fontFamily],\n ['--font-size-xs', t.fontSizeXs],\n ['--font-size-sm', t.fontSizeSm],\n ['--font-size-base', t.fontSizeBase],\n ['--font-size-lg', t.fontSizeLg],\n ['--font-size-xl', t.fontSizeXl],\n ['--font-size-2xl', t.fontSize2xl],\n ['--font-size-3xl', t.fontSize3xl],\n ['--font-weight-normal', t.fontWeightNormal],\n ['--font-weight-medium', t.fontWeightMedium],\n ['--font-weight-semibold', t.fontWeightSemibold],\n ['--font-weight-bold', t.fontWeightBold],\n ['--line-height-tight', t.lineHeightTight],\n ['--line-height-snug', t.lineHeightSnug],\n ['--line-height-normal', t.lineHeightNormal],\n ['--line-height-relaxed', t.lineHeightRelaxed],\n ]\n for (const [cssVar, val] of map) {\n const s = str(val)\n if (s != null) out[cssVar] = s\n }\n }\n if (theme.density) {\n const d = theme.density\n const map: [string, string | number | undefined][] = [\n ['--height-control-xs', d.controlXs],\n ['--height-control-sm', d.controlSm],\n ['--height-control-md', d.controlMd],\n ['--height-control-lg', d.controlLg],\n ['--height-topbar', d.topbar],\n ]\n for (const [cssVar, val] of map) {\n if (val != null) out[cssVar] = px(val)\n }\n }\n if (theme.motion) {\n const m = theme.motion\n const map: [string, string | undefined][] = [\n ['--duration-fast', m.durationFast],\n ['--duration-normal', m.durationNormal],\n ['--duration-slow', m.durationSlow],\n ['--duration-gentle', m.durationGentle],\n ]\n for (const [cssVar, val] of map) {\n if (val != null) out[cssVar] = val\n }\n }\n\n return out\n}\n\nfunction varsToStyleString(vars: Record<string, string>): string {\n return Object.entries(vars).map(([k, v]) => `${k}: ${v};`).join(' ')\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Scoped theme provider.\n *\n * Wraps children in a `<div>` that carries CSS custom-property overrides\n * as inline styles. A scoped `<style>` tag handles dark-mode overrides.\n *\n * @example Basic brand color swap\n * <ThemeProvider theme={{ colors: { accent: '#e63946', 'accent-hover': '#c1121f' } }}>\n * <App />\n * </ThemeProvider>\n *\n * @example Compact density + custom font\n * <ThemeProvider\n * theme={{\n * density: { controlMd: 30, controlLg: 38, topbar: 48 },\n * typography: { fontFamily: '\"Geist\", sans-serif' },\n * }}\n * >\n * <Dashboard />\n * </ThemeProvider>\n *\n * @example Managed dark mode\n * <ThemeProvider\n * colorScheme=\"dark\"\n * theme={{ colors: { accent: '#60a5fa' } }}\n * darkTheme={{ colors: { accent: '#93c5fd' } }}\n * >\n * <App />\n * </ThemeProvider>\n */\nexport default function ThemeProvider({\n theme,\n darkTheme,\n colorScheme = 'auto',\n children,\n className = '',\n style,\n}: ThemeProviderProps) {\n const id = React.useId().replace(/:/g, '')\n const scopeClass = `geo-th-${id}`\n\n const divRef = useRef<HTMLDivElement>(null)\n\n // ── Managed color scheme ─────────────────────────────────────────────────\n useEffect(() => {\n const el = divRef.current\n if (!el) return\n\n if (colorScheme === 'auto') return\n\n if (colorScheme === 'system') {\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const apply = (e: MediaQueryListEvent | MediaQueryList) => {\n el.classList.toggle('dark', e.matches)\n }\n apply(mq)\n mq.addEventListener('change', apply)\n return () => mq.removeEventListener('change', apply)\n }\n\n el.classList.toggle('dark', colorScheme === 'dark')\n }, [colorScheme])\n\n // ── Inline CSS vars (light + always-on overrides) ────────────────────────\n const lightVars = useMemo(() => toCssVars(theme), [theme])\n\n // ── Scoped dark-mode override via injected <style> ───────────────────────\n const darkVarStr = useMemo(() => {\n if (!darkTheme) return ''\n const dvars = toCssVars(darkTheme)\n if (!Object.keys(dvars).length) return ''\n return `.${scopeClass}.dark { ${varsToStyleString(dvars)} }`\n // scopeClass is stable (derived from useId); only darkTheme matters\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [darkTheme])\n\n return (\n <>\n {darkVarStr && (\n <style dangerouslySetInnerHTML={{ __html: darkVarStr }} />\n )}\n <div\n ref={divRef}\n className={`${scopeClass} ${className}`.trim()}\n style={{ ...(lightVars as React.CSSProperties), ...style }}\n >\n {children}\n </div>\n </>\n )\n}\n","import React from 'react'\n\n/** ─────────────────── base ─────────────────── */\n\ninterface SkeletonBaseProps {\n className?: string\n /** Override inline styles */\n style?: React.CSSProperties\n}\n\n// Shared shimmer classes — the gradient sweeps across the element on repeat\nconst SHIMMER = [\n 'animate-shimmer rounded-sm',\n 'bg-[length:400%_100%]',\n 'bg-gradient-to-r',\n 'from-border via-border-strong/40 to-border',\n].join(' ')\n\n/** ─────────────────── SkeletonBox ─────────────────── */\n\nexport interface SkeletonBoxProps extends SkeletonBaseProps {\n width?: number | string\n height?: number | string\n /** Override border-radius (defaults to token --radius-md) */\n radius?: number | string\n}\n\n/**\n * Generic rectangular loading placeholder.\n * Use for images, cards, headers, or any block element.\n *\n * @example\n * <SkeletonBox width={240} height={160} />\n * <SkeletonBox width=\"100%\" height={48} radius=\"var(--radius-lg)\" />\n */\nexport function SkeletonBox({ width, height = 16, radius, className = '', style }: SkeletonBoxProps) {\n return (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`block ${SHIMMER} ${className}`}\n style={{\n width: width ?? '100%',\n height,\n borderRadius: radius ?? 'var(--radius-md)',\n ...style,\n }}\n />\n )\n}\n\n/** ─────────────────── SkeletonText ─────────────────── */\n\nexport interface SkeletonTextProps extends SkeletonBaseProps {\n /** Number of lines (default 3) */\n lines?: number\n /** Width of the last (shortest) line as a percentage (default 60) */\n lastLineWidth?: number\n /** Line height in px (default 14) */\n lineHeight?: number\n /** Gap between lines in px (default 8) */\n gap?: number\n}\n\n/**\n * Multi-line text loading placeholder.\n * Last line is shorter to mimic real paragraph layout.\n *\n * @example\n * <SkeletonText lines={4} lastLineWidth={45} />\n */\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = 60,\n lineHeight = 14,\n gap = 8,\n className = '',\n style,\n}: SkeletonTextProps) {\n return (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`flex flex-col ${className}`}\n style={{ gap, ...style }}\n >\n {Array.from({ length: lines }).map((_, i) => {\n const isLast = i === lines - 1\n const width = isLast && lines > 1 ? `${lastLineWidth}%` : '100%'\n return (\n <span\n key={i}\n className={`block ${SHIMMER}`}\n style={{ height: lineHeight, width, borderRadius: 'var(--radius-sm)' }}\n />\n )\n })}\n </div>\n )\n}\n\n/** ─────────────────── SkeletonCircle ─────────────────── */\n\nexport interface SkeletonCircleProps extends SkeletonBaseProps {\n /** Diameter in px (default 40) */\n size?: number\n}\n\n/**\n * Circular loading placeholder — avatars, icons, status indicators.\n *\n * @example\n * <SkeletonCircle size={48} />\n */\nexport function SkeletonCircle({ size = 40, className = '', style }: SkeletonCircleProps) {\n return (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`block flex-shrink-0 ${SHIMMER} ${className}`}\n style={{\n width: size,\n height: size,\n borderRadius: '50%',\n ...style,\n }}\n />\n )\n}\n\n/** ─────────────────── SkeletonCard ─────────────────── */\n\nexport interface SkeletonCardProps extends SkeletonBaseProps {\n /** Include a circular avatar in the header (default true) */\n hasAvatar?: boolean\n /** Number of text lines in the body (default 3) */\n lines?: number\n}\n\n/**\n * Composite card skeleton — avatar + heading + body text + action strip.\n * Use as a drop-in while real card data loads.\n *\n * @example\n * <div className=\"grid grid-cols-3 gap-4\">\n * {loading && Array.from({ length: 3 }).map((_, i) => <SkeletonCard key={i} />)}\n * </div>\n */\nexport function SkeletonCard({ hasAvatar = true, lines = 3, className = '', style }: SkeletonCardProps) {\n return (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`rounded-lg border border-border bg-surface p-4 ${className}`}\n style={style}\n >\n {/* Header row */}\n <div className=\"flex items-center gap-3 mb-4\">\n {hasAvatar && <SkeletonCircle size={36} />}\n <div className=\"flex-1 flex flex-col gap-2\">\n <SkeletonBox height={12} width=\"55%\" />\n <SkeletonBox height={10} width=\"35%\" />\n </div>\n </div>\n\n {/* Body text */}\n <SkeletonText lines={lines} lastLineWidth={55} />\n\n {/* Action strip */}\n <div className=\"mt-4 flex gap-2\">\n <SkeletonBox height={28} width={72} />\n <SkeletonBox height={28} width={56} />\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface TextInputProps {\n value?: any\n onChange?: React.ChangeEventHandler<HTMLInputElement>\n disabled?: boolean\n label?: React.ReactNode\n htmlFor?: string\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n /** 'horizontal' | 'vertical' */\n layout?: string\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n id?: string\n [key: string]: any\n}\n\n/**\n * Standard text input with label and validation message.\n */\nexport default function TextInput({\n value,\n onChange,\n disabled,\n label,\n htmlFor,\n placeholder,\n name,\n inputStyle,\n style,\n layout,\n onBlur,\n errorMessage,\n labelColor,\n}: TextInputProps) {\n return (\n <div className=\"relative flex flex-col items-center justify-center\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n style={style ?? {}}\n >\n <label\n style={{ color: labelColor || undefined }}\n className={`text-md font-bold ml-1 max-content ${!labelColor && 'text-prussian-blue dark:text-white'}`}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n <input\n autoComplete=\"off\"\n disabled={disabled}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n type=\"text\"\n name={name}\n id={htmlFor}\n className={`${errorMessage !== undefined ? 'border border-error' : ''} focus:outline-oxford-blue-700-opaque p-2 h-9 w-60 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed transition-all`}\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">\n {errorMessage}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface NumberInputProps {\n step?: number\n value?: any\n onChange?: (e: { target: { value: number; id?: string; name?: string } }) => void\n label?: React.ReactNode\n htmlFor?: string\n name?: string\n disabled?: boolean\n /** 'horizontal' | 'vertical' */\n layout?: string\n errorMessage?: React.ReactNode\n inputStyle?: React.CSSProperties\n labelStyle?: React.CSSProperties\n placeholder?: string\n style?: React.CSSProperties\n min?: number\n max?: number\n readOnly?: boolean\n [key: string]: any\n}\n\n/**\n * Number input with increment / decrement controls.\n */\nexport default function NumberInput({\n step = 1,\n value,\n onChange,\n label,\n htmlFor,\n name,\n disabled,\n layout,\n errorMessage,\n inputStyle,\n labelStyle,\n placeholder,\n style = {},\n min,\n max,\n readOnly = false,\n}: NumberInputProps) {\n const onIncrement = () => {\n let newValue = value ? parseFloat(value) + step : 0 + step\n if (max !== undefined && newValue > max) return\n onChange?.({ target: { value: newValue, id: htmlFor, name } })\n }\n\n const onDecrement = () => {\n let newValue = value ? parseFloat(value) - step : 0 - step\n if (min !== undefined && newValue < min) return\n onChange?.({ target: { value: newValue, id: htmlFor, name } })\n }\n\n return (\n <div>\n <div className=\"flex items-center justify-between pr-1 pl-1\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n >\n <label\n className=\"text-md font-bold ml-1 w-60 select-none text-prussian-blue dark:text-white\"\n style={labelStyle}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n <div\n style={style}\n className={`${disabled ? 'bg-disabled' : 'bg-white'} rounded-lg flex items-center pr-1 pl-2 w-max`}\n >\n <input\n min={min}\n max={max}\n autoComplete=\"off\"\n disabled={disabled}\n name={name}\n id={htmlFor}\n step={step}\n value={value}\n onChange={onChange as any}\n type=\"number\"\n className=\"focus:outline-0 focus-visible:outline-0 h-9 w-60 text-prussian-blue disabled:bg-disabled disabled:cursor-not-allowed transition-all\"\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n readOnly={readOnly}\n />\n <div className=\"flex flex-col\">\n <span\n onClick={onIncrement}\n className=\"rotate-180 cursor-pointer transition-all duration-300 hover:bg-ice rounded-sm\"\n >\n {/* ChevronDown up */}\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-3 w-3\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </span>\n <span\n onClick={onDecrement}\n className=\"cursor-pointer transition-all duration-300 hover:bg-ice rounded-sm\"\n >\n {/* ChevronDown down */}\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-3 w-3\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div className=\"text-center text-error min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface PasswordProps {\n value?: any\n onChange?: React.ChangeEventHandler<HTMLInputElement>\n disabled?: boolean\n label?: React.ReactNode\n htmlFor?: string\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n layout?: string\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n iconColor?: string\n [key: string]: any\n}\n\n/**\n * Password input with show/hide toggle.\n */\nexport default function Password({\n value,\n onChange,\n disabled,\n label,\n htmlFor,\n placeholder,\n name,\n inputStyle,\n style,\n layout,\n onBlur,\n errorMessage,\n labelColor,\n iconColor,\n}: PasswordProps) {\n const [passwordVisible, setPasswordVisible] = useState(false)\n const color = iconColor ?? COLORS.PALETTE['prussian-blue']\n\n return (\n <div className=\"relative flex flex-col items-center justify-center\" style={style ?? {}}>\n <div className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}>\n <label\n style={{ color: labelColor || undefined }}\n className={`text-md font-bold ml-1 max-content ${!labelColor && 'text-prussian-blue dark:text-white'}`}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n <div className=\"flex items-center gap-1\">\n <input\n autoComplete=\"off\"\n disabled={disabled}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n type={passwordVisible ? 'text' : 'password'}\n name={name}\n id={htmlFor}\n className={`${errorMessage !== undefined ? 'border border-error' : ''} focus:outline-oxford-blue-700-opaque p-2 h-9 w-52 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed transition-all`}\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n <button\n type=\"button\"\n className=\"cursor-pointer p-1\"\n onClick={() => setPasswordVisible(!passwordVisible)}\n aria-label={passwordVisible ? 'Hide password' : 'Show password'}\n >\n {passwordVisible ? (\n /* EyeSlash */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className=\"w-6 h-6\">\n <path d=\"M3.53 2.47a.75.75 0 00-1.06 1.06l18 18a.75.75 0 101.06-1.06l-18-18zM22.676 12.553a11.249 11.249 0 01-2.631 4.31l-3.099-3.099a5.25 5.25 0 00-6.71-6.71L7.759 4.577a11.217 11.217 0 014.242-.827c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113z\" />\n <path d=\"M15.75 12c0 .18-.013.357-.037.53l-4.244-4.243A3.75 3.75 0 0115.75 12zM12.53 15.713l-4.243-4.244a3.75 3.75 0 004.243 4.243z\" />\n <path d=\"M6.75 12c0-.619.107-1.213.304-1.764l-3.1-3.1a11.25 11.25 0 00-2.63 4.31c-.12.362-.12.752 0 1.114 1.489 4.467 5.704 7.69 10.675 7.69 1.5 0 2.933-.294 4.242-.827l-2.477-2.477A5.25 5.25 0 016.75 12z\" />\n </svg>\n ) : (\n /* Eye */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className=\"w-6 h-6\">\n <path d=\"M12 15a3 3 0 100-6 3 3 0 000 6z\" />\n <path fillRule=\"evenodd\" d=\"M1.323 11.447C2.811 6.976 7.028 3.75 12.001 3.75c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113-1.487 4.471-5.705 7.697-10.677 7.697-4.97 0-9.186-3.223-10.675-7.69a1.762 1.762 0 010-1.113zM17.25 12a5.25 5.25 0 11-10.5 0 5.25 5.25 0 0110.5 0z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nexport interface CheckboxProps {\n /** Controlled checked state */\n checked?: boolean\n onChange?: (e: { target: { checked: boolean; id?: string; name?: string } }) => void\n label?: React.ReactNode\n name?: string\n /** `id` for the hidden input and the `<label htmlFor>` link */\n htmlFor?: string\n errorMessage?: React.ReactNode\n disabled?: boolean\n /** @deprecated Use `checked` */\n value?: boolean\n}\n\n/**\n * Accessible checkbox powered by Radix Checkbox.\n *\n * Radix handles keyboard activation, focus ring, and `role=\"checkbox\"` ARIA.\n * The check mark pops in with a spring animation on first check.\n *\n * @example\n * <Checkbox\n * htmlFor=\"agree\"\n * label=\"I agree to the terms\"\n * checked={form.agree}\n * onChange={({ target }) => setField('agree', target.checked)}\n * />\n */\nexport default function Checkbox({\n checked,\n value, // legacy alias\n onChange,\n label,\n name,\n htmlFor,\n errorMessage,\n disabled = false,\n}: CheckboxProps) {\n // Support legacy `value` prop transparently\n const isChecked = checked ?? value ?? false\n\n return (\n <div className=\"flex flex-col gap-1\">\n <label\n htmlFor={htmlFor}\n className={[\n 'inline-flex items-center gap-2.5',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n ].join(' ')}\n >\n <CheckboxPrimitive.Root\n id={htmlFor}\n name={name}\n checked={isChecked}\n disabled={disabled}\n onCheckedChange={(c) =>\n onChange?.({ target: { checked: !!c, id: htmlFor, name } })\n }\n className={[\n // Box\n 'relative flex h-[18px] w-[18px] flex-shrink-0 items-center justify-center',\n 'rounded-sm border transition-colors duration-150',\n // Unchecked\n 'border-border-strong bg-surface',\n // Checked\n 'data-[state=checked]:bg-accent data-[state=checked]:border-accent',\n // Focus\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-1',\n // Disabled\n 'disabled:cursor-not-allowed',\n ].join(' ')}\n aria-label={typeof label === 'string' ? label : undefined}\n >\n <CheckboxPrimitive.Indicator\n className=\"flex items-center justify-center data-[state=checked]:animate-check-pop\"\n >\n {/* Check mark */}\n <svg\n width=\"11\"\n height=\"9\"\n viewBox=\"0 0 11 9\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M1 4.5L4 7.5L10 1\"\n stroke=\"white\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n {label && (\n <span className=\"text-sm text-foreground-secondary select-none leading-snug\">\n {label}\n </span>\n )}\n </label>\n\n {errorMessage && (\n <span className=\"text-xs text-status-error pl-[26px]\">{errorMessage}</span>\n )}\n </div>\n )\n}\n","import React, { useId } from 'react'\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\n\nexport interface SwitchInputProps {\n checked?: boolean\n onChange?: (e: { target: { checked: boolean } }) => void\n checkedIcon?: React.ReactNode\n uncheckedIcon?: React.ReactNode\n [key: string]: any\n}\n\n/**\n * Form switch (on/off toggle) powered by Radix Switch.\n *\n * Radix handles keyboard activation, focus ring, and `role=\"switch\"` ARIA.\n * Accepts optional icon slots for the thumb in checked/unchecked states.\n *\n * Emits `{ target: { checked } }` for compatibility with existing handlers.\n *\n * @example\n * <Switch\n * checked={form.enabled}\n * onChange={({ target }) => setField('enabled', target.checked)}\n * />\n */\nexport default function Switch({\n checked = false,\n onChange,\n checkedIcon,\n uncheckedIcon,\n}: SwitchInputProps) {\n const id = useId()\n\n return (\n <div>\n <label htmlFor={id} className=\"flex items-center cursor-pointer mr-12 select-none\">\n <SwitchPrimitive.Root\n id={id}\n checked={checked}\n onCheckedChange={(c) => onChange?.({ target: { checked: c } })}\n className=\"relative inline-flex h-6 w-14 items-center rounded-full bg-prussian-blue dark:bg-white transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-usafa-blue\"\n >\n <SwitchPrimitive.Thumb\n className=\"pointer-events-none inline-flex h-8 w-8 items-center justify-center rounded-full bg-independence dark:bg-prussian-blue shadow transition-transform duration-200 data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-[-4px]\"\n >\n {checkedIcon && uncheckedIcon\n ? checked\n ? checkedIcon\n : uncheckedIcon\n : null}\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n </label>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport COLORS from '../../utils/colors'\n\nexport interface AutoCompleteItem {\n key: string\n value: string\n label: string\n icon?: React.ReactNode\n}\n\nexport interface AutoCompleteProps {\n disabled?: boolean\n label?: React.ReactNode\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n /** 'horizontal' | 'vertical' */\n layout?: string\n items?: AutoCompleteItem[]\n onItemClick?: (value: string) => void\n /** Custom \"empty\" message */\n emptyText?: string\n [key: string]: any\n}\n\n/**\n * Search-as-you-type autocomplete powered by Radix Popover.\n *\n * The popover opens when the input is focused and closes when an item is\n * selected or the user clicks away. Radix handles portal-based z-stacking.\n *\n * @example\n * <AutoComplete\n * label=\"Vessel\"\n * items={vessels.map(v => ({ key: v.imo, value: v.imo, label: v.name }))}\n * onItemClick={(imo) => setVessel(imo)}\n * />\n */\nexport default function AutoComplete({\n disabled,\n label,\n placeholder,\n name,\n inputStyle,\n style,\n layout = 'vertical',\n items = [],\n onItemClick,\n emptyText = 'No results found',\n}: AutoCompleteProps) {\n const [term, setTerm] = useState('')\n const [open, setOpen] = useState(false)\n\n const foundItems = term.trim()\n ? items.filter(\n ({ key, label }) =>\n label.toLowerCase().includes(term.toLowerCase()) ||\n key.toLowerCase().includes(term.toLowerCase())\n )\n : []\n\n const handleSelect = (item: AutoCompleteItem) => {\n setTerm(`${item.label} (${item.value})`)\n onItemClick?.(item.value)\n setOpen(false)\n }\n\n return (\n <div className=\"relative flex flex-col items-center justify-center\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n style={style ?? {}}\n >\n {label && (\n <label className=\"text-lg font-bold ml-1 max-content text-prussian-blue dark:text-white\">\n {label}\n </label>\n )}\n\n <Popover.Root open={open && !disabled} onOpenChange={(o) => !disabled && setOpen(o)}>\n <Popover.Anchor asChild>\n <div className=\"bg-white flex items-center gap-1 rounded-lg pr-2\">\n <input\n disabled={disabled}\n value={term}\n onChange={(e) => {\n setTerm(e.target.value)\n setOpen(true)\n }}\n onFocus={() => setOpen(true)}\n type=\"text\"\n name={name}\n className=\"focus:outline-none pl-2 h-9 w-56 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed\"\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n autoComplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-autocomplete=\"list\"\n />\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-5 h-5 flex-shrink-0\">\n <path fillRule=\"evenodd\" d=\"M10.5 3.75a6.75 6.75 0 100 13.5 6.75 6.75 0 000-13.5zM2.25 10.5a8.25 8.25 0 1114.59 5.28l4.69 4.69a.75.75 0 11-1.06 1.06l-4.69-4.69A8.25 8.25 0 012.25 10.5z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n </Popover.Anchor>\n\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className=\"w-64 bg-ice dark:bg-midnight-green-eagle-900 rounded-lg mt-1 shadow-md z-50 overflow-y-auto max-h-36 animate-in fade-in-0 zoom-in-95\"\n >\n {foundItems.length === 0 ? (\n <div className=\"h-full w-full flex flex-col items-center justify-center py-4 text-sm text-prussian-blue dark:text-white\">\n {emptyText}\n </div>\n ) : (\n <div role=\"listbox\">\n {foundItems.map((item) => (\n <div\n key={item.key}\n role=\"option\"\n className=\"text-sm flex items-center gap-2 p-2 transition-all duration-150 hover:bg-ice-dark dark:hover:bg-prussian-blue cursor-pointer text-prussian-blue dark:text-white\"\n onClick={() => handleSelect(item)}\n >\n {item.icon}\n <span>\n {item.label} ({item.value})\n </span>\n </div>\n ))}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport DropdownPill from './DropdownPill'\nimport COLORS from '../../utils/colors'\n\nexport interface TreeSelectItem {\n key: string | number\n label: React.ReactNode\n icon?: React.ReactNode\n}\n\nexport interface TreeSelectProps {\n hasSearch?: boolean\n label?: React.ReactNode\n name?: string\n value?: any\n onChange?: (e: { target: { value: any; id?: string; name?: string } }) => void\n onBlur?: React.FocusEventHandler\n disabled?: boolean\n /** 'horizontal' | 'vertical' */\n layout?: string\n errorMessage?: React.ReactNode\n style?: React.CSSProperties\n htmlFor?: string\n items?: TreeSelectItem[]\n}\n\n/**\n * Single-value select with a flat list, powered by Radix Popover.\n * Functionally similar to Dropdown (single-select only).\n *\n * @example\n * <TreeSelect label=\"Fleet\" items={fleets} value={form.fleet} onChange={handleChange} htmlFor=\"fleet\" />\n */\nexport default function TreeSelect({\n label,\n name,\n value,\n onChange,\n disabled,\n layout = 'horizontal',\n errorMessage,\n style = {},\n htmlFor,\n items = [],\n}: TreeSelectProps) {\n const [open, setOpen] = useState(false)\n const [hoveredItem, setHoveredItem] = useState<string | number | null>(null)\n const [innerItems, setInnerItems] = useState<TreeSelectItem[]>([])\n\n useEffect(() => {\n setInnerItems(items)\n }, [items])\n\n const selectItem = (key: string | number) => {\n onChange?.({ target: { value: key, id: htmlFor, name } })\n setOpen(false)\n }\n\n return (\n <div className=\"mt-2\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n >\n {label && (\n <label\n className=\"text-md font-bold ml-1 max-content select-none text-prussian-blue dark:text-white\"\n htmlFor={htmlFor}\n >\n {label}\n </label>\n )}\n\n <Popover.Root open={open && !disabled} onOpenChange={(o) => !disabled && setOpen(o)}>\n <Popover.Trigger asChild>\n <div\n id={htmlFor}\n style={style}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={`flex items-center justify-between relative h-9 rounded-lg p-2 cursor-pointer ${disabled ? 'cursor-not-allowed bg-disabled' : 'bg-white'}`}\n tabIndex={disabled ? -1 : 0}\n >\n {/* Value display */}\n <div className={`h-7 ${!style?.width ? 'min-w-[240px]' : ''} focus:outline-none text-prussian-blue flex items-center gap-1`}>\n {Array.isArray(value) ? (\n <>\n {value.slice(0, 1).map((val, id) => (\n <DropdownPill\n key={id}\n hasSiblings={value.length > 1}\n value={innerItems.find((it) => it.key === val)?.label}\n />\n ))}\n {value.length > 1 && <DropdownPill value={`+${value.length - 1} more`} />}\n </>\n ) : value != null ? (\n <DropdownPill value={innerItems.find((it) => it.key === value)?.label} />\n ) : null}\n </div>\n\n {/* Chevron */}\n <div className={`transition-transform duration-300 ml-2 ${open ? 'rotate-180' : 'rotate-0'}`}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: style?.width || 240 }}\n className=\"bg-ice rounded-lg shadow-md z-50 p-2 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\"\n >\n <div role=\"listbox\" className=\"max-h-40 overflow-y-auto\">\n {innerItems.map((item, idx) => (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={value === item.key}\n aria-rowindex={idx}\n className={`flex items-center justify-between p-2 hover:bg-prussian-blue hover:text-white transition-all duration-150 text-sm text-prussian-blue rounded-lg cursor-pointer`}\n onClick={() => selectItem(item.key)}\n onMouseEnter={() => setHoveredItem(item.key)}\n onMouseLeave={() => setHoveredItem(null)}\n >\n <div className=\"flex items-center gap-2 text-xs\">\n {item.icon && <div>{item.icon}</div>}\n {item.label}\n </div>\n {value === item.key && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M4 10l4.5 4.5L16 6\"\n stroke={hoveredItem === item.key ? '#fff' : COLORS.PALETTE['prussian-blue']}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n ))}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface FileInputProps {\n allowMultiple?: boolean\n onChange?: (e: { target: { files: File[]; name?: string; id?: string; value?: string } }) => void\n name?: string\n /** Accepted MIME types / extensions */\n accept?: string\n [key: string]: any\n}\n\n/**\n * Drag-and-drop / click file input.\n *\n * Decoupled from ThemeContext — uses CSS `dark:` classes.\n *\n * @example\n * <FileInput\n * name=\"xlsxUpload\"\n * accept=\".xlsx\"\n * onChange={(e) => setFile(e.target.files[0])}\n * />\n */\nexport default function FileInput({\n allowMultiple = false,\n onChange,\n name,\n accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n}: FileInputProps) {\n const fileInput = useRef<HTMLInputElement>(null)\n const [files, setFiles] = useState<File[]>([])\n\n const openPicker = () => {\n fileInput.current?.dispatchEvent(new MouseEvent('click', { bubbles: false }))\n }\n\n const handleFiles = (list: File[]) => {\n setFiles(list)\n onChange?.({ target: { files: list } })\n }\n\n const onDrop = (e: React.DragEvent) => {\n e.preventDefault()\n const fileList: File[] = []\n if (e.dataTransfer.items) {\n for (let i = 0; i < e.dataTransfer.items.length; i++) {\n if (e.dataTransfer.items[i].kind === 'file') {\n const f = e.dataTransfer.items[i].getAsFile()\n if (f) fileList.push(f)\n }\n }\n } else {\n for (let i = 0; i < e.dataTransfer.files.length; i++) {\n fileList.push(e.dataTransfer.files[i])\n }\n }\n handleFiles(fileList)\n }\n\n const localOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(Array.from(e.target.files ?? []))\n }\n\n const removeFile = (e: React.MouseEvent) => {\n e.stopPropagation()\n setFiles([])\n onChange?.({ target: { files: [], name, id: name, value: '' } })\n if (fileInput.current) fileInput.current.value = ''\n }\n\n return (\n <div\n onClick={openPicker}\n className=\"border-2 hover:border-prussian-blue border-ice-dark w-full h-full rounded-md transition-all duration-300 border-dashed dark:border-independence hover:dark:border-ice-dark cursor-pointer\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={onDrop}\n >\n <input\n id={name}\n name={name}\n onChange={localOnChange}\n ref={fileInput}\n hidden\n type=\"file\"\n accept={accept}\n multiple={allowMultiple}\n />\n\n {files.length === 0 ? (\n <div className=\"flex flex-col h-full items-center justify-center gap-2\">\n {/* Upload icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-16 h-16 dark:fill-white\">\n <path fillRule=\"evenodd\" d=\"M11.47 2.47a.75.75 0 011.06 0l4.5 4.5a.75.75 0 01-1.06 1.06l-3.22-3.22V16.5a.75.75 0 01-1.5 0V4.81L8.03 8.03a.75.75 0 01-1.06-1.06l4.5-4.5zM3 15.75a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z\" clipRule=\"evenodd\" />\n </svg>\n <div className=\"text-prussian-blue dark:text-white text-sm\">Click or Drop a file</div>\n </div>\n ) : (\n <div className=\"flex gap-3 items-center justify-center w-full h-full\">\n {files.map((file, id) => (\n <div\n key={`${id}${file.name}`}\n className=\"text-xs flex flex-col items-center w-20 h-24 text-center bg-ice-dark p-4 dark:bg-independence rounded-md relative\"\n >\n <button\n type=\"button\"\n onClick={removeFile}\n className=\"bg-error rounded-full w-4 h-4 absolute right-[-5px] top-[-5px] cursor-pointer flex items-center justify-center\"\n aria-label=\"Remove file\"\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"#fff\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n {/* File icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-10 h-10 dark:fill-white\">\n <path fillRule=\"evenodd\" d=\"M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0016.5 9h-1.875a1.875 1.875 0 01-1.875-1.875V5.25A3.75 3.75 0 009 1.5H5.625z\" clipRule=\"evenodd\" />\n <path d=\"M12.971 1.816A5.23 5.23 0 0114.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 013.434 1.279 9.768 9.768 0 00-6.963-6.963z\" />\n </svg>\n <span className=\"text-ellipsis whitespace-nowrap overflow-hidden w-full text-prussian-blue dark:text-white\">\n {file.name}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport Button from './Button'\nimport COLORS from '../../utils/colors'\n\n/** ─────────────────── helpers ─────────────────── */\nconst MONTHS: Record<number, string> = {\n 1: 'January', 2: 'February', 3: 'March', 4: 'April',\n 5: 'May', 6: 'June', 7: 'July', 8: 'August',\n 9: 'September', 10: 'October', 11: 'November', 12: 'December',\n}\nconst DAYS: Record<number, string> = { 0: 'Sun', 1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri', 6: 'Sat' }\n\nfunction formatDate(date: Date): string {\n const fmt = new Intl.DateTimeFormat('en-GB', { year: 'numeric', month: 'numeric', day: 'numeric' })\n const parts = fmt.formatToParts(date)\n const d = parts.find((x) => x.type === 'day')!.value\n const m = parts.find((x) => x.type === 'month')!.value\n const y = parts.find((x) => x.type === 'year')!.value\n return `${y}-${m}-${d}`\n}\n\nfunction getMonthDays(year: number, month: number): Date[] {\n const days: Date[] = []\n for (let i = 1; i <= 31; i++) {\n const d = new Date(year, month - 1, i)\n if (d.getMonth() + 1 > month) break\n days.push(d)\n }\n return days\n}\n\nconst ChevronRight = ({ color = COLORS.PALETTE['prussian-blue'] }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n)\n\nconst DoubleChevronRight = ({ color = COLORS.PALETTE['prussian-blue'] }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13 5l7 7-7 7M5 5l7 7-7 7\" />\n </svg>\n)\n\nconst ChevronDown = ({ color = COLORS.PALETTE['prussian-blue'] }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n)\n\n/** ─────────────────── DatePicker ─────────────────── */\nexport interface DatePickerProps {\n value: Date\n onChange: (e: { target: { value: Date; id?: string; name?: string } }) => void\n layout?: 'horizontal' | 'vertical'\n label?: React.ReactNode\n htmlFor?: string\n name?: string\n style?: React.CSSProperties\n errorMessage?: React.ReactNode\n disableBefore?: Date | string\n disableAfter?: Date | string\n disabled?: boolean\n}\n\n/**\n * Custom calendar date picker.\n *\n * @example\n * <DatePicker.DatePicker\n * label=\"Report date\"\n * value={form.date}\n * onChange={({ target }) => setField('date', target.value)}\n * disableAfter={new Date()}\n * />\n */\nfunction DatePickerBase({\n value,\n onChange,\n layout,\n label,\n htmlFor,\n name,\n style = {},\n errorMessage,\n disableBefore,\n disableAfter,\n disabled,\n}: DatePickerProps) {\n const pickerRef = useRef<HTMLDivElement>(null)\n const calendarRef = useRef<HTMLDivElement>(null)\n const [isExpanded, setExpanded] = useState(false)\n const [isCloseToBottom, setCloseToBottom] = useState(false)\n const [currentYear, setCurrentYear] = useState(value.getFullYear())\n const [currentMonth, setCurrentMonth] = useState(value.getMonth() + 1)\n\n const toggle = () => { if (!disabled) setExpanded((p) => !p) }\n\n const toNextMonth = () => {\n if (currentMonth + 1 > 12) { setCurrentMonth(1); setCurrentYear((y) => y + 1) }\n else setCurrentMonth((m) => m + 1)\n }\n const toPrevMonth = () => {\n if (currentMonth - 1 === 0) { setCurrentMonth(12); setCurrentYear((y) => y - 1) }\n else setCurrentMonth((m) => m - 1)\n }\n\n const isToday = (d: Date) => {\n const t = new Date()\n return t.getDate() === d.getDate() && t.getMonth() === d.getMonth() && t.getFullYear() === d.getFullYear()\n }\n const isSelected = (d: Date) =>\n value.getDate() === d.getDate() && value.getMonth() === d.getMonth() && value.getFullYear() === d.getFullYear()\n\n const isDateDisabled = (d: Date) => {\n if (disableBefore && d.getTime() < new Date(disableBefore).getTime()) return true\n if (disableAfter && d.getTime() > new Date(disableAfter).getTime()) return true\n return false\n }\n\n const onDateClick = (d: Date) => {\n const next = new Date(formatDate(d))\n onChange({ target: { value: next, id: htmlFor, name } })\n setExpanded(false)\n setCurrentYear(d.getFullYear())\n setCurrentMonth(d.getMonth() + 1)\n }\n\n const renderCalendar = () => {\n const days = getMonthDays(currentYear, currentMonth)\n const firstDay = days[0].getDay()\n const cols: Date[][] = [[], [], [], [], [], [], []]\n days.forEach((d) => cols[d.getDay()].push(d))\n let ordered = [...cols]\n if (firstDay > 0) {\n ordered = [...ordered.splice(firstDay), ...ordered]\n }\n return ordered\n }\n\n useEffect(() => {\n const clickAway = (e: MouseEvent) => {\n if (\n pickerRef.current && !pickerRef.current.contains(e.target as Node) &&\n calendarRef.current && !calendarRef.current.contains(e.target as Node)\n ) setExpanded(false)\n }\n document.addEventListener('mousedown', clickAway)\n return () => document.removeEventListener('mousedown', clickAway)\n }, [])\n\n useEffect(() => {\n const bbox = pickerRef.current?.getBoundingClientRect()\n if (bbox && (bbox.y > window.innerHeight - 220 || bbox.bottom > window.innerHeight - 400)) {\n setCloseToBottom(true)\n } else setCloseToBottom(false)\n }, [])\n\n return (\n <div className=\"w-full\">\n <div className={`flex relative ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}>\n {label && (\n <label className=\"text-md font-bold ml-1 max-content text-prussian-blue dark:text-white\">\n {label}\n </label>\n )}\n <div\n style={style}\n ref={pickerRef}\n className={`flex items-center justify-between relative h-9 ${disabled ? 'bg-disabled cursor-not-allowed' : 'bg-white cursor-pointer'} rounded-lg p-2`}\n >\n <div\n onClick={toggle}\n className={`h-7 focus:outline-none text-prussian-blue ${disabled ? 'cursor-not-allowed' : 'cursor-pointer'} ${!style.width ? 'min-w-[240px]' : ''} flex items-center gap-1`}\n >\n {formatDate(value)}\n </div>\n <div\n onClick={toggle}\n className={`transition-all duration-300 ml-2 ${isExpanded ? 'rotate-180' : 'rotate-0 w-4 h-4'}`}\n >\n <ChevronDown />\n </div>\n </div>\n\n <div\n ref={calendarRef}\n className={`w-[280px] bg-ice absolute ${isCloseToBottom ? 'bottom-[40px]' : 'top-[60px]'} z-10 rounded-lg shadow-md transition-all duration-150 ${isExpanded ? 'h-max scale-100' : 'scale-0 pointer-events-none'}`}\n >\n {isExpanded && (\n <div className=\"pt-3\">\n {/* Month/year navigation */}\n <div className=\"flex items-center mx-auto w-max\">\n <span onClick={() => setCurrentYear((y) => y - 1)} className=\"cursor-pointer rotate-180 p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <DoubleChevronRight />\n </span>\n <span onClick={toPrevMonth} className=\"cursor-pointer rotate-180 p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <ChevronRight />\n </span>\n <span className=\"font-bold text-prussian-blue select-none w-[130px] text-center\">\n {currentYear} {MONTHS[currentMonth]}\n </span>\n <span onClick={toNextMonth} className=\"cursor-pointer p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <ChevronRight />\n </span>\n <span onClick={() => setCurrentYear((y) => y + 1)} className=\"cursor-pointer p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <DoubleChevronRight />\n </span>\n </div>\n\n {/* Calendar grid */}\n <div className=\"flex gap-3 p-2\">\n {renderCalendar().map((weekDay, index) => (\n <div key={index} className=\"flex flex-col items-center gap-2\">\n <div className=\"text-center font-bold text-sm text-prussian-blue\">\n {weekDay[0] ? DAYS[weekDay[0].getDay()] : ''}\n </div>\n {weekDay.map((day) => (\n <div\n key={day.getDate()}\n onClick={() => !isDateDisabled(day) && onDateClick(day)}\n className={`cursor-pointer flex items-center justify-center text-prussian-blue rounded-md w-6 h-6 transition-all duration-300\n ${isToday(day) ? 'border border-prussian-blue' : ''}\n ${isSelected(day) ? 'bg-prussian-blue text-white' : ''}\n ${!isSelected(day) ? 'hover:bg-ice-dark' : ''}\n ${isDateDisabled(day) ? 'bg-ice-dark text-roman-silver cursor-not-allowed pointer-events-none' : ''}`}\n >\n {day.getDate()}\n </div>\n ))}\n </div>\n ))}\n </div>\n\n {/* Today shortcut */}\n <div className=\"pb-2 pr-2 flex items-center justify-end\">\n <Button\n onClick={() => onDateClick(new Date())}\n content=\"Today\"\n style={{ width: 'max-content', padding: '0px 5px', margin: '0' }}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n\n/** ─────────────────── TemporalPicker (year/number scroll) ─────────────────── */\nexport interface TemporalPickerProps {\n value: number\n onChange: (e: { target: { value: number } }) => void\n type?: 'year'\n upperLimit?: number\n lowerLimit?: number\n errorMessage?: React.ReactNode\n label?: React.ReactNode\n layout?: string\n style?: React.CSSProperties\n}\n\nfunction TemporalPickerBase({\n value,\n onChange,\n lowerLimit = 2000,\n upperLimit = new Date().getFullYear(),\n errorMessage,\n label,\n layout,\n style = {},\n}: TemporalPickerProps) {\n const pickerRef = useRef<HTMLDivElement>(null)\n const calendarRef = useRef<HTMLDivElement>(null)\n const valueRefs = useRef<{ value: number; ref: HTMLDivElement }[]>([])\n const [isExpanded, setExpanded] = useState(false)\n const [isCloseToBottom, setCloseToBottom] = useState(false)\n\n const innerValues = useMemo(() => {\n const vals: number[] = []\n for (let i = lowerLimit; i <= upperLimit; i++) vals.push(i)\n return vals\n }, [lowerLimit, upperLimit])\n\n useEffect(() => {\n const clickAway = (e: MouseEvent) => {\n if (\n pickerRef.current && !pickerRef.current.contains(e.target as Node) &&\n calendarRef.current && !calendarRef.current.contains(e.target as Node)\n ) setExpanded(false)\n }\n document.addEventListener('mousedown', clickAway)\n return () => document.removeEventListener('mousedown', clickAway)\n }, [])\n\n useEffect(() => {\n const bbox = pickerRef.current?.getBoundingClientRect()\n if (bbox && bbox.y > window.innerHeight - 220) setCloseToBottom(true)\n else setCloseToBottom(false)\n }, [])\n\n useEffect(() => {\n if (!isExpanded) return\n const t = setTimeout(() => {\n const node = valueRefs.current.find((n) => n.value === value)\n node?.ref.scrollIntoView({ block: 'end', inline: 'nearest', behavior: 'smooth' })\n }, 150)\n return () => clearTimeout(t)\n }, [isExpanded, value])\n\n const navigate = (delta: number) => {\n const next = value + delta\n if (next < lowerLimit || next > upperLimit) return\n onChange({ target: { value: next } })\n const node = valueRefs.current.find((n) => n.value === next)\n node?.ref.scrollIntoView({ block: 'end', inline: 'nearest', behavior: 'smooth' })\n }\n\n return (\n <div className=\"mt-2\">\n <div className={`flex relative ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}>\n {label && <label className=\"text-md font-bold ml-1 max-content text-prussian-blue dark:text-white\">{label}</label>}\n <div\n style={style}\n ref={pickerRef}\n className=\"flex items-center justify-between relative h-9 bg-white rounded-lg p-2 cursor-pointer\"\n >\n <div\n onClick={() => setExpanded((p) => !p)}\n className={`h-7 ${!style.width ? 'min-w-[240px]' : ''} focus:outline-none text-prussian-blue cursor-pointer flex items-center gap-1`}\n >\n {innerValues.includes(value) ? value : 'N/A'}\n </div>\n <div onClick={() => setExpanded((p) => !p)} className={`transition-all duration-300 ml-2 ${isExpanded ? 'rotate-180' : 'rotate-0 w-4 h-4'}`}>\n <ChevronDown />\n </div>\n </div>\n\n <div\n style={{ width: style.width }}\n ref={calendarRef}\n className={`${!style.width ? 'w-[280px]' : ''} bg-ice absolute z-10 ${isCloseToBottom ? 'bottom-[40px]' : 'top-10'} rounded-lg shadow-md transition-all duration-150 right-0 overflow-hidden ${isExpanded ? 'h-max scale-100' : 'scale-0 pointer-events-none'}`}\n >\n <div onClick={() => navigate(-1)} className=\"flex items-center justify-center rotate-180 transition-all duration-300 hover:bg-ice-dark cursor-pointer rounded-br-lg rounded-bl-lg\">\n <ChevronDown />\n </div>\n <div className=\"h-8 overflow-hidden\">\n {innerValues.map((val) => (\n <div\n key={val}\n ref={(ref) => {\n if (!valueRefs.current.find((n) => n.value === val) && ref)\n valueRefs.current.push({ value: val, ref })\n }}\n className=\"font-bold text-center text-lg\"\n >\n {val}\n </div>\n ))}\n </div>\n <div onClick={() => navigate(1)} className=\"flex items-center justify-center transition-all hover:bg-ice-dark cursor-pointer rounded-br-lg rounded-bl-lg\">\n <ChevronDown />\n </div>\n </div>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n\n/** ─────────────────── Namespace export ─────────────────── */\n\n/**\n * Temporal date/time picker namespace.\n *\n * @example\n * import Temporal from '@geomak/ui'\n *\n * <Temporal.DatePicker value={date} onChange={handleChange} label=\"Date\" />\n * <Temporal.TemporalPicker value={year} type=\"year\" lowerLimit={2018} upperLimit={2026} onChange={handleChange} />\n */\nconst Temporal = {} as {\n DatePicker: typeof DatePickerBase\n TemporalPicker: typeof TemporalPickerBase\n}\n\nTemporal.DatePicker = DatePickerBase\nTemporal.TemporalPicker = TemporalPickerBase\n\nexport default Temporal\n"]}
1
+ {"version":3,"sources":["../src/icons/icons.tsx","../src/components/core/IconButton.tsx","../src/components/inputs/Button.tsx","../src/components/core/Modal.tsx","../src/components/core/Drawer.tsx","../src/components/core/Tooltip.tsx","../src/components/core/Tabs.tsx","../src/components/core/Tree.tsx","../src/components/core/ToggleButton.tsx","../src/components/core/Notification.tsx","../src/components/core/LoadingSpinner.tsx","../src/components/core/FadingBase.tsx","../src/components/core/List.tsx","../src/components/core/ScalableContainer.tsx","../src/components/core/GridCard.tsx","../src/components/core/OpaqueGridCard.tsx","../src/components/core/CatalogGrid.tsx","../src/components/core/CatalogCarousel.tsx","../src/components/core/Catalog.tsx","../src/components/core/MenuBarItem.tsx","../src/components/core/MenuBar.tsx","../src/components/core/ContextMenu.tsx","../src/components/core/Wizard.tsx","../src/components/inputs/SearchInput.tsx","../src/components/inputs/DropdownPill.tsx","../src/components/inputs/Dropdown.tsx","../src/components/core/Table.tsx","../src/components/core/Switch.tsx","../src/components/core/TopBar.tsx","../src/components/core/Sidebar.tsx","../src/components/core/AppShell.tsx","../src/components/core/ThemeProvider.tsx","../src/components/core/Skeleton.tsx","../src/components/inputs/TextInput.tsx","../src/components/inputs/NumberInput.tsx","../src/components/inputs/Password.tsx","../src/components/inputs/Checkbox.tsx","../src/components/inputs/Switch.tsx","../src/components/inputs/AutoComplete.tsx","../src/components/inputs/TreeSelect.tsx","../src/components/inputs/FileInput.tsx","../src/components/inputs/DatePicker.tsx"],"names":["jsx","jsxs","Fragment","useMemo","useReducedMotion","Dialog","AnimatePresence","motion","Dialog2","TooltipPrimitive","useState","useEffect","TabsPrimitive","Accordion","ToggleGroup","createContext","Toast","useContext","useRef","List","colors_default","useCallback","React","SearchInput","Popover","useId","SwitchPrimitive","vars","CheckboxPrimitive","SwitchPrimitive2","label","Popover2","Popover3","ChevronRight","DoubleChevronRight","ChevronDown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAM,IAAA,GAAO,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAO,qBAC3BA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAM,KAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,SAAA,EAChH,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,kLAAA,EAAmL,CAAA,EAC5O,CAAA;AAGJ,IAAM,GAAA,GAAM,CAAC,EAAE,KAAA,GAAQ,QAAA,EAAS,qBAC5BA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAM,KAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,SAAA,EAChH,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,mMAAA,EAAoM,CAAA,EAC7P,CAAA;AAGJ,IAAM,WAAA,GAAc,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,IAAA,GAAO,EAAA,EAAG,qBAC7CA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAClE,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAS,SAAA,EAAU,QAAA,EAAS,SAAA,EAAU,CAAA,EAAE,g9BAAA,EAAi9B,IAAA,EAAM,OAAO,CAAA,EAChhC,CAAA;AAGJ,IAAM,KAAA,GAAQ,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,CAAA,EAAE,qBACtCA,cAAA,CAAC,SAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,SAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA,EAAA,EAAK,IAAI,MAAM,IAAI,CAAA,CAAA,EACnI,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,eAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gJAA+I,CAAA,EACxM,CAAA;AAGJ,IAAM,OAAA,GAAU,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,IAAA,GAAO,CAAA,EAAE,qBACxCA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,SAAQ,WAAA,EAAY,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,CAAA,EAAA,EAAK,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,aAAA,CAAA,EACnG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAS,SAAA,EAAU,CAAA,EAAE,0XAAA,EAA2X,QAAA,EAAS,WAAU,CAAA,EAC7a,CAAA;AAGJ,IAAM,aAAA,GAAgB,CAAC,EAAE,KAAA,GAAQ,QAAQ,OAAA,GAAU,KAAA,EAAO,IAAA,GAAO,CAAA,uBAC7DA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,SAAQ,WAAA,EAAY,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,KAAK,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,WAAW,cAAc,CAAA,CAAA,EAChI,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,UAAS,SAAA,EAAU,CAAA,EAAE,0XAAA,EAA2X,QAAA,EAAS,WAAU,CAAA,EAC7a,CAAA;AAGJ,IAAM,GAAA,GAAM,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,CAAA,uBAClCC,eAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,OAAA,EAAQ,aAAY,IAAA,EAAM,KAAA,EAAO,WAAW,CAAA,EAAA,EAAK,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EACnG,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,iCAAA,EAAkC,CAAA;AAAA,iCACzC,MAAA,EAAA,EAAK,QAAA,EAAS,WAAU,CAAA,EAAE,yPAAA,EAA0P,UAAS,SAAA,EAAU;AAAA,CAAA,EAC5S,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,CAAA,uBACvCC,eAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,OAAA,EAAQ,aAAY,IAAA,EAAM,KAAA,EAAO,WAAW,CAAA,EAAA,EAAK,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EACnG,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,sPAAA,EAAuP,CAAA;AAAA,kBAC/PA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4HAAA,EAA6H,CAAA;AAAA,kBACrIA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qMAAA,EAAsM;AAAA,CAAA,EAClN,CAAA;AAGJ,IAAM,UAAA,GAAa,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,YAAY,SAAA,EAAU,qBACxDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,SAAQ,WAAA,EAAY,IAAA,EAAM,KAAA,EAAO,SAAA,EACrE,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAS,SAAA,EAAU,CAAA,EAAE,mKAAA,EAAoK,QAAA,EAAS,SAAA,EAAU,CAAA,EACtN,CAAA;AAGJ,IAAM,KAAA,GAAQ,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACnDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gBAAe,CAAA,EACxE,CAAA;AAGJ,IAAM,SAAA,GAAY,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,EAAA,EAAG,qBAC3CA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAClE,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,sHAAA,EAAuH,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAY,QAAA,EAAS,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,SAAQ,CAAA,EACpN,CAAA;AAGJ,IAAM,YAAY,CAAC,EAAE,QAAQ,MAAA,EAAQ,IAAA,GAAO,IAAG,qBAC3CC,eAAA,CAAC,SAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,OAAM,4BAAA,EAClE,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,GAAA,EAAA,EAAE,UAAS,qBAAA,EACR,QAAA,kBAAAA,cAAA,CAAC,UAAK,CAAA,EAAE,k+GAAA,EAAm+G,IAAA,EAAM,KAAA,EAAO,CAAA,EAC5/G,CAAA;AAAA,kBACAA,cAAA,CAAC,MAAA,EAAA,EACG,QAAA,kBAAAA,cAAA,CAAC,UAAA,EAAA,EAAS,IAAG,eAAA,EAAgB,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,IAAA,EAAM,KAAA,EAAO,GAAE,CAAA,EAC7E;AAAA,CAAA,EACJ,CAAA;AAGJ,IAAM,WAAA,GAAc,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,IAAA,GAAO,EAAA,EAAG,qBAC7CA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAClE,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,k8BAAA,EAAm8B,IAAA,EAAM,KAAA,EAAO,CAAA,EAC59B,CAAA;AAGJ,IAAM,MAAM,CAAC,EAAE,QAAQ,MAAA,EAAQ,IAAA,GAAO,IAAG,qBACrCC,eAAA,CAAC,SAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,OAAM,4BAAA,EAClE,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,GAAA,EAAA,EAAE,UAAS,qBAAA,EACR,QAAA,kBAAAA,cAAA,CAAC,UAAK,CAAA,EAAE,2lCAAA,EAA4lC,IAAA,EAAM,KAAA,EAAO,CAAA,EACrnC,CAAA;AAAA,kBACAA,cAAA,CAAC,MAAA,EAAA,EACG,QAAA,kBAAAA,cAAA,CAAC,UAAA,EAAA,EAAS,IAAG,eAAA,EAAgB,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,SAAQ,MAAA,EAAO,IAAA,EAAK,IAAA,EAAM,KAAA,EAAO,GAAE,CAAA,EAChF;AAAA,CAAA,EACJ,CAAA;AAGJ,IAAM,eAAe,CAAC,EAAE,QAAQ,MAAA,EAAQ,IAAA,GAAO,IAAG,qBAC9CC,eAAA,CAAC,SAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,OAAM,4BAAA,EAClE,QAAA,EAAA;AAAA,kBAAAA,eAAA,CAAC,UAAK,EAAA,EAAG,eAAA,EAAgB,KAAA,EAAO,EAAE,UAAU,OAAA,EAAQ,EAAG,SAAA,EAAU,gBAAA,EAAiB,GAAE,GAAA,EAAI,CAAA,EAAE,KAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAC5G,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mKAAA,EAAoK,MAAA,EAAO,OAAA,EAAQ,aAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA;AAAA,oBAC1PA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6CAAA,EAA8C,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ,CAAA;AAAA,oBACjJA,cAAA,CAAC,UAAK,CAAA,EAAE,4BAAA,EAA6B,QAAQ,KAAA,EAAO,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ;AAAA,GAAA,EAChG,CAAA;AAAA,kBACAA,cAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,qBAAA,EAAsB,QAAA,kBAAAA,cAAA,CAAC,UAAK,CAAA,EAAE,iBAAA,EAAkB,IAAA,EAAM,KAAA,EAAO,CAAA,EAAE;AAAA,CAAA,EAC3E,CAAA;AAGJ,IAAM,aAAa,CAAC,EAAE,QAAQ,MAAA,EAAQ,IAAA,GAAO,IAAG,qBAC5CC,eAAA,CAAC,SAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,OAAM,4BAAA,EAClE,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,GAAA,EAAA,EAAE,UAAS,qBAAA,EACR,QAAA,kBAAAA,cAAA,CAAC,UAAK,CAAA,EAAE,27GAAA,EAA47G,IAAA,EAAM,KAAA,EAAO,CAAA,EACr9G,CAAA;AAAA,kBACAA,cAAA,CAAC,MAAA,EAAA,EACG,QAAA,kBAAAA,cAAA,CAAC,UAAA,EAAA,EAAS,IAAG,eAAA,EAAgB,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,IAAA,EAAM,KAAA,EAAO,GAAE,CAAA,EAC7E;AAAA,CAAA,EACJ,CAAA;AAGJ,IAAM,YAAA,GAAe,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,EAAA,EAAG,qBAC9CA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAClE,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,sMAAA,EAAuM,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAY,QAAA,EAAS,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,SAAQ,CAAA,EACpS,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,CAAA,EAAE,qBACzCA,cAAA,CAAC,SAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,SAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA,EAAA,EAAK,IAAI,MAAM,IAAI,CAAA,CAAA,EACnI,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,eAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,wCAAuC,CAAA,EAChG,CAAA;AAGJ,IAAM,WAAA,GAAc,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACzDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,+BAA8B,CAAA,EACvF,CAAA;AAGJ,IAAM,YAAA,GAAe,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAC1DA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,6BAA4B,CAAA,EACrF,CAAA;AAGJ,IAAM,OAAA,GAAU,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,CAAA,EAAE,qBACxCA,cAAA,CAAC,SAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,SAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA,EAAA,EAAK,IAAI,MAAM,IAAI,CAAA,CAAA,EACnI,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,eAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,yBAAwB,CAAA,EACjF,CAAA;AAGJ,IAAM,MAAA,GAAS,CAAC,EAAE,KAAA,GAAQ,QAAQ,IAAA,GAAO,CAAA,EAAE,qBACvCA,cAAA,CAAC,SAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,SAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA,EAAA,EAAK,IAAI,MAAM,IAAI,CAAA,CAAA,EACnI,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,eAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,8EAA6E,CAAA,EACtI,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,yNAAwN,CAAA,EACjR,CAAA;AAGJ,IAAM,KAAA,GAAQ,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACnDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,iDAAgD,CAAA,EACzG,CAAA;AAGJ,IAAM,UAAA,GAAa,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACxDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,2OAA0O,CAAA,EACnS,CAAA;AAGJ,IAAM,aAAA,GAAgB,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAC3DA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,oNAAmN,CAAA,EAC5Q,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gcAA+b,CAAA,EACxf,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,QAAQ,SAAA,GAAY,SAAA,uBAC5CC,eAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,IAAA,EAAK,QAAO,OAAA,EAAQ,WAAA,EAAY,aAAa,GAAA,EAAK,MAAA,EAAQ,OAAO,SAAA,EACrG,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,UAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,GAAE,qCAAA,EAAsC,CAAA;AAAA,iCAC1F,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,GAAE,uCAAA,EAAwC;AAAA,CAAA,EACjG,CAAA;AAGJ,IAAM,cAAA,GAAiB,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAC5DA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,0JAAyJ,CAAA,EAClN,CAAA;AAGJ,IAAM,MAAA,GAAS,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACpDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,6NAA4N,CAAA,EACrR,CAAA;AAGJ,IAAM,UAAA,GAAa,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACxDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,woBAAuoB,CAAA,EAChsB,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,glBAA+kB,CAAA,EACxoB,CAAA;AAGJ,IAAM,IAAA,GAAO,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAClDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,k9BAAi9B,CAAA,EAC1gC,CAAA;AAGJ,IAAM,GAAA,GAAM,CAAC,EAAE,KAAA,GAAQ,QAAQ,SAAA,GAAY,SAAA,uBACvCC,eAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,IAAA,EAAK,QAAO,OAAA,EAAQ,WAAA,EAAY,aAAa,GAAA,EAAK,MAAA,EAAQ,OAAO,SAAA,EACrG,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,UAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,GAAE,yiCAAA,EAA0iC,CAAA;AAAA,iCAC9lC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,GAAE,kCAAA,EAAmC;AAAA,CAAA,EAC5F,CAAA;AAGJ,IAAM,SAAA,GAAY,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACvDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,qtCAAotC,CAAA,EAC7wC,CAAA;AAGJ,IAAM,IAAA,GAAO,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAClDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,yWAAwW,CAAA,EACja,CAAA;AAGJ,IAAM,MAAA,GAAS,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACpDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,wBAAuB,CAAA,EAChF,CAAA;AAGJ,IAAM,OAAO,CAAC,EAAE,QAAQ,MAAA,EAAQ,IAAA,GAAO,GAAE,qBACrCC,eAAA,CAAC,SAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,WAAU,IAAA,EAAK,MAAA,EAAO,OAAM,4BAAA,EAChE,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,GAAA,EAAA,EAAE,UAAS,oBAAA,EACR,QAAA,kBAAAA,cAAA,CAAC,UAAK,CAAA,EAAE,u2GAAA,EAAw2G,IAAA,EAAM,KAAA,EAAO,CAAA,EACj4G,CAAA;AAAA,kBACAA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,kBAAAA,cAAA,CAAC,UAAA,EAAA,EAAS,IAAG,cAAA,EAAe,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,KAAI,MAAA,EAAO,GAAA,EAAI,IAAA,EAAK,OAAA,EAAQ,GAAE,CAAA,EAAW;AAAA,CAAA,EAC3F,CAAA;AAGJ,IAAM,WAAW,CAAC,EAAE,QAAQ,MAAA,EAAQ,IAAA,GAAO,GAAE,qBACzCC,eAAA,CAAC,SAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,WAAU,IAAA,EAAK,MAAA,EAAO,OAAM,4BAAA,EAChE,QAAA,EAAA;AAAA,kBAAAD,cAAA,CAAC,GAAA,EAAA,EAAE,UAAS,oBAAA,EACR,QAAA,kBAAAA,cAAA,CAAC,UAAK,CAAA,EAAE,0XAAA,EAA2X,IAAA,EAAM,KAAA,EAAO,CAAA,EACpZ,CAAA;AAAA,kBACAA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,kBAAAA,cAAA,CAAC,UAAA,EAAA,EAAS,IAAG,cAAA,EAAe,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,KAAI,MAAA,EAAO,GAAA,EAAI,IAAA,EAAK,OAAA,EAAQ,GAAE,CAAA,EAAW;AAAA,CAAA,EAC3F,CAAA;AAGJ,IAAM,kBAAA,GAAqB,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAChEA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,oDAAmD,CAAA,EAC5G,CAAA;AAGJ,IAAM,UAAA,GAAa,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACxDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,kDAAiD,CAAA,EAC1G,CAAA;AAGJ,IAAM,IAAA,GAAO,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAClDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,sJAAqJ,CAAA,EAC9M,CAAA;AAGJ,IAAM,OAAA,GAAU,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACrDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,oLAAmL,CAAA,EAC5O,CAAA;AAGJ,IAAM,SAAA,GAAY,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACvDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,6NAA4N,CAAA,EACrR,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,oIAAmI,CAAA,EAC5L,CAAA;AAGJ,IAAM,KAAA,GAAQ,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACnDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gNAA+M,CAAA,EACxQ,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,4GAA2G,CAAA,EACpK,CAAA;AAGJ,IAAM,MAAA,GAAS,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACpDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,yJAAwJ,CAAA,EACjN,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,yIAAwI,CAAA,EACjM,CAAA;AAGJ,IAAM,WAAA,GAAc,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACzDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,kNAAiN,CAAA,EAC1Q,CAAA;AAGJ,IAAM,OAAA,GAAU,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACrDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,uEAAsE,CAAA,EAC/H,CAAA;AAGJ,IAAM,IAAA,GAAO,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAClDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,+HAA8H,CAAA,EACvL,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,2RAA0R,CAAA,EACnV,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,yPAAwP,CAAA,EACjT,CAAA;AAGJ,IAAM,MAAA,GAAS,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACpDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,iJAAgJ,CAAA,EACzM,CAAA;AAGJ,IAAM,QAAA,GAAW,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACtDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,4RAA2R,CAAA,EACpV,CAAA;AAGJ,IAAM,MAAA,GAAS,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACpDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,2ZAA0Z,CAAA,EACnd,CAAA;AAGJ,IAAM,SAAA,GAAY,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACvDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,2JAA0J,CAAA,EACnN,CAAA;AAGJ,IAAM,IAAA,GAAO,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,IAAA,GAAO,EAAA,EAAG,qBACtCA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAClE,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAS,SAAA,EAAU,QAAA,EAAS,SAAA,EAAU,CAAA,EAAE,gqBAAA,EAAiqB,IAAA,EAAM,OAAO,CAAA,EAChuB,CAAA;AAGJ,IAAM,WAAA,GAAc,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBACzDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,yWAAwW,CAAA,EACja,CAAA;AAGJ,IAAM,IAAA,GAAO,CAAC,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAA,GAAY,SAAA,EAAU,qBAClDA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,WAAA,EAAa,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EACrG,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,oXAAmX,CAAA,EAC5a,CAAA;AAGJ,IAAM,IAAA,GAAO,sBAAMA,cAAA,CAAAE,mBAAA,EAAA,EAAE,CAAA;AAErB,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,CAAK,kBAAA,GAAqB,kBAAA;AAC1B,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,CAAK,KAAA,GAAQ,SAAA;AACb,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,CAAK,KAAA,GAAQ,SAAA;AACb,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,CAAK,IAAA,GAAO,QAAA;AACZ,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAK,IAAA,GAAO,QAAA;AACZ,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,CAAK,WAAA,GAAc,WAAA;AAEnB,IAAO,aAAA,GAAQ;ACxbA,SAAR,UAAA,CAA4B;AAAA,EAC/B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,UAAA,GAAa,QAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV;AACJ,CAAA,EAAoB;AAChB,EAAA,MAAM,WAAA,GAAcC,eAAQ,MAAM;AAC9B,IAAA,IAAI,SAAS,SAAA,EAAW;AACpB,MAAA,OAAO,iFAAA;AAAA,IACX;AACA,IAAA,IAAI,SAAS,UAAA,EAAY;AACrB,MAAA,OAAO,+EAAA;AAAA,IACX;AACA,IAAA,OAAO,EAAA;AAAA,EACX,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,uBACIH,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAM,UAAA;AAAA,MACN,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,OAAA;AAAA,MACA,WAAW,CAAA,EAAG,IAAA,KAAS,OAAO,KAAA,GAAQ,KAAK,qDAAqD,WAAW,CAAA,0EAAA,CAAA;AAAA,MAE1G,oBAAU,WAAA,GAAc;AAAA;AAAA,GAC7B;AAER;AC7BA,IAAM,eAAA,GAAuE;AAAA,EACzE,OAAA,EAAS;AAAA,IACL,sBAAA;AAAA,IACA,uBAAA;AAAA,IACA,kBAAA;AAAA,IACA,6EAAA;AAAA,IACA;AAAA,GACJ,CAAE,KAAK,GAAG,CAAA;AAAA,EAEV,SAAA,EAAW;AAAA,IACP,iDAAA;AAAA,IACA,kCAAA;AAAA,IACA,0CAAA;AAAA,IACA,qFAAA;AAAA,IACA;AAAA,GACJ,CAAE,KAAK,GAAG,CAAA;AAAA,EAEV,KAAA,EAAO;AAAA,IACH,0CAAA;AAAA,IACA,kEAAA;AAAA,IACA,gDAAA;AAAA,IACA,wDAAA;AAAA,IACA;AAAA,GACJ,CAAE,KAAK,GAAG,CAAA;AAAA,EAEV,MAAA,EAAQ;AAAA,IACJ,4BAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,iDAAA;AAAA,IACA;AAAA,GACJ,CAAE,KAAK,GAAG;AACd,CAAA;AAEA,IAAM,YAAA,GAAiE;AAAA,EACnE,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAae,SAAR,MAAA,CAAwB;AAAA,EAC3B,OAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,QAAA;AAAA,EACb,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACJ,CAAA,EAAgB;AACZ,EAAA,uBACIC,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,OAAA;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,IAAA,EAAM,UAAA;AAAA,MACN,KAAA;AAAA,MACA,SAAA,EAAW;AAAA;AAAA,QAEP,qDAAA;AAAA,QACA,yDAAA;AAAA,QACA,mBAAA;AAAA,QACA,aAAa,IAAI,CAAA;AAAA,QACjB,gBAAgB,OAAO;AAAA,OAC3B,CAAE,KAAK,GAAG,CAAA;AAAA,MAET,QAAA,EAAA;AAAA,QAAA,OAAA,mBACGD,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,cAAA;AAAA,YACL,SAAA,EAAU,oCAAA;AAAA,YACV,aAAA,EAAY,MAAA;AAAA,YAEZ,QAAA,kBAAAA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACG,QAAA,EAAS,SAAA;AAAA,gBACT,QAAA,EAAS,SAAA;AAAA,gBACT,CAAA,EAAE;AAAA;AAAA;AACN;AAAA,SACJ,GACA,IAAA,mBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EAAgB,aAAA,EAAY,MAAA,EAAQ,QAAA,EAAA,IAAA,EAAK,CAAA,GACzD,IAAA;AAAA,QACH;AAAA;AAAA;AAAA,GACL;AAER;ACpFe,SAAR,KAAA,CAAuB;AAAA,EAC1B,IAAA,GAAO,CAAC,GAAA,EAAK,GAAG,CAAA;AAAA,EAChB,MAAA,GAAS,KAAA;AAAA,EACT,OAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,UAAA,GAAa,QAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ,KAAA;AAAA,EACA;AACJ,CAAA,EAAe;AACX,EAAA,MAAM,UAAUI,6BAAA,EAAiB;AAEjC,EAAA,uBACIJ,eAAQK,iBAAA,CAAA,IAAA,EAAP,EAAY,MAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS;AAAE,IAAA,IAAI,CAAC,MAAM,OAAA,IAAU;AAAA,EAAE,GACxE,QAAA,kBAAAJ,eAAAA,CAAQI,iBAAA,CAAA,MAAA,EAAP,EAAc,YAAU,IAAA,EAErB,QAAA,EAAA;AAAA,oBAAAL,cAAAA,CAACM,gCACI,QAAA,EAAA,MAAA,oBACGN,eAAQK,iBAAA,CAAA,OAAA,EAAP,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAL,cAAAA;AAAA,MAACO,mBAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACG,SAAA,EAAU,qCAAA;AAAA,QACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACnB,YAAY,EAAE,QAAA,EAAU,UAAU,CAAA,GAAI,IAAA,EAAM,MAAM,SAAA;AAAU;AAAA,OAEpE,CAAA,EAER,CAAA;AAAA,oBAGAP,cAAAA,CAACM,4BAAA,EAAA,EACI,QAAA,EAAA,MAAA,oBACGN,eAAQK,iBAAA,CAAA,OAAA,EAAP,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAJ,eAAAA;AAAA,MAACM,mBAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACG,SAAA,EAAU,oJAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACH,QAAA,EAAU,KAAK,CAAC,CAAA;AAAA,UAChB,CAAA,EAAG,MAAA;AAAA,UACH,CAAA,EAAG;AAAA,SACP;AAAA,QACA,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,OAAA,GAAU,IAAI,IAAA,EAAK;AAAA,QACjD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,QAChC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,OAAA,GAAU,IAAI,IAAA,EAAK;AAAA,QAC9C,UAAA,EACI,OAAA,GACM,EAAE,QAAA,EAAU,GAAE,GACd;AAAA,UACI,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,EAAA;AAAA,UACT,SAAA,EAAW,GAAA;AAAA,UACX,QAAA,EAAU;AAAA,SACd;AAAA,QAIV,QAAA,EAAA;AAAA,0BAAAN,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kFAAA,EACX,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAQK,iBAAA,CAAA,KAAA,EAAP,EAAa,SAAA,EAAU,0DACnB,QAAA,EAAA,KAAA,EACL,CAAA;AAAA,4BACAL,cAAAA,CAAQK,iBAAA,CAAA,KAAA,EAAP,EAAa,OAAA,EAAO,MACjB,QAAA,kBAAAL,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACG,YAAA,EAAW,OAAA;AAAA,gBACX,SAAA,EAAU,0NAAA;AAAA,gBAEV,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACjD,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,ygBAAA,EAA0gB,IAAA,EAAK,gBAAe,QAAA,EAAS,SAAA,EAAU,QAAA,EAAS,SAAA,EAAU,CAAA,EAChlB;AAAA;AAAA,aACJ,EACJ;AAAA,WAAA,EACJ,CAAA;AAAA,0BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,2BAAA,EAA8B,YAAY,EAAA,GAAK,MAAM,CAAA,CAAA,EAChE,QAAA,EAAA,MAAA,IAAU,QAAA,EACf,CAAA;AAAA,UAGC,SAAA,oBACGC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oFAAA,EACX,QAAA,EAAA;AAAA,4BAAAD,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACG,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAG;AAAA,gBACnB,OAAA,EAAS,UAAA;AAAA,gBACT,OAAA,EAAS;AAAA;AAAA,aACb;AAAA,4BACAA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACG,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAG;AAAA,gBACnB,OAAA,EAAS,MAAA;AAAA,gBACT,OAAA,EAAS;AAAA;AAAA;AACb,WAAA,EACJ;AAAA;AAAA;AAAA,OAGZ,CAAA,EAER;AAAA,GAAA,EACJ,CAAA,EACJ,CAAA;AAER;ACzGe,SAAR,MAAA,CAAwB;AAAA,EAC3B,MAAA,GAAS,KAAA;AAAA,EACT,OAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,SAAA,GAAY,OAAA;AAAA,EACZ,KAAA,GAAQ,GAAA;AAAA,EACR,MAAA,GAAS,IAAA;AAAA,EACT,UAAA,GAAa,QAAA;AAAA,EACb,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAA,EAAgB;AACZ,EAAA,MAAM,UAAUI,6BAAAA,EAAiB;AACjC,EAAA,MAAM,UAAU,SAAA,KAAc,OAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,UAAU,MAAA,GAAS,OAAA;AAEnC,EAAA,uBACIJ,eAAQQ,iBAAA,CAAA,IAAA,EAAP,EAAY,MAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS;AAAE,IAAA,IAAI,CAAC,MAAM,OAAA,IAAU;AAAA,EAAE,GACxE,QAAA,kBAAAP,eAAAA,CAAQO,iBAAA,CAAA,MAAA,EAAP,EAAc,YAAU,IAAA,EAErB,QAAA,EAAA;AAAA,oBAAAR,cAAAA,CAACM,4BAAAA,EAAA,EACI,QAAA,EAAA,MAAA,oBACGN,eAAQQ,iBAAA,CAAA,OAAA,EAAP,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAR,cAAAA;AAAA,MAACO,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACG,SAAA,EAAU,qCAAA;AAAA,QACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACnB,YAAY,EAAE,QAAA,EAAU,UAAU,CAAA,GAAI,GAAA,EAAK,MAAM,SAAA;AAAU;AAAA,OAEnE,CAAA,EAER,CAAA;AAAA,oBAGAP,cAAAA,CAACM,4BAAAA,EAAA,EACI,QAAA,EAAA,MAAA,oBACGN,cAAAA,CAAQQ,iBAAA,CAAA,OAAA,EAAP,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAP,eAAAA;AAAA,MAACM,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACG,SAAA,EAAW,CAAA,qBAAA,EAAwB,OAAA,GAAU,SAAA,GAAY,QAAQ,CAAA,8DAAA,CAAA;AAAA,QACjE,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,wBAAA,EAA2B,KAAK,CAAA,GAAA,CAAA,EAAM;AAAA,QACtD,OAAA,EAAS,EAAE,CAAA,EAAG,OAAA,GAAU,IAAI,OAAA,EAAS,OAAA,EAAS,OAAA,GAAU,CAAA,GAAI,CAAA,EAAE;AAAA,QAC9D,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QAC5B,IAAA,EAAM,EAAE,CAAA,EAAG,OAAA,GAAU,IAAI,OAAA,EAAS,OAAA,EAAS,OAAA,GAAU,CAAA,GAAI,CAAA,EAAE;AAAA,QAC3D,UAAA,EACI,OAAA,GACM,EAAE,QAAA,EAAU,GAAE,GACd;AAAA,UACI,CAAA,EAAG;AAAA,YACC,IAAA,EAAM,OAAA;AAAA,YACN,QAAA,EAAU,IAAA;AAAA,YACV,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,KAAK,CAAC;AAAA;AAAA,WAC1B;AAAA,UACA,OAAA,EAAS,EAAE,QAAA,EAAU,CAAA;AAAE,SAC3B;AAAA,QAIV,QAAA,EAAA;AAAA,0BAAAN,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,oFAAoF,OAAA,GAAU,kBAAA,GAAqB,EAAE,CAAA,CAAA,EACjI,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAQQ,iBAAA,CAAA,KAAA,EAAP,EAAa,SAAA,EAAU,0DACnB,QAAA,EAAA,KAAA,EACL,CAAA;AAAA,4BACAR,cAAAA,CAAQQ,iBAAA,CAAA,KAAA,EAAP,EAAa,OAAA,EAAO,MACjB,QAAA,kBAAAR,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACG,YAAA,EAAW,cAAA;AAAA,gBACX,SAAA,EAAU,0NAAA;AAAA,gBAEV,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACjD,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,ygBAAA,EAA0gB,IAAA,EAAK,gBAAe,QAAA,EAAS,SAAA,EAAU,QAAA,EAAS,SAAA,EAAU,CAAA,EAChlB;AAAA;AAAA,aACJ,EACJ;AAAA,WAAA,EACJ,CAAA;AAAA,0BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACV,oBAAU,QAAA,EACf,CAAA;AAAA,UAGC,SAAA,oBACGC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,CAAA,uEAAA,EAA0E,OAAA,GAAU,eAAA,GAAkB,aAAa,CAAA,CAAA,EAC/H,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,EAAE,KAAA,EAAO,IAAG,EAAG,OAAA,EAAS,UAAA,EAAY,OAAA,EAAS,QAAA,EAAU,CAAA;AAAA,4BACtEA,cAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAG,EAAG,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM;AAAA,WAAA,EAClE;AAAA;AAAA;AAAA,OAGZ,CAAA,EAER;AAAA,GAAA,EACJ,CAAA,EACJ,CAAA;AAER;AC9GA,IAAM,SAAA,GAAoE;AAAA,EACtE,GAAA,EAAQ,kDAAA;AAAA,EACR,MAAA,EAAQ,qDAAA;AAAA,EACR,IAAA,EAAQ,mDAAA;AAAA,EACR,KAAA,EAAQ;AACZ,CAAA;AAiBe,SAAR,OAAA,CAAyB;AAAA,EAC5B,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,aAAA,GAAgB,GAAA;AAAA,EAChB,UAAA,GAAa;AACjB,CAAA,EAAiB;AACb,EAAA,uBACIA,eAAkBS,2BAAA,CAAA,QAAA,EAAjB,EAA0B,eACvB,QAAA,kBAAAR,eAAAA,CAAkBQ,kCAAjB,EACG,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAkBS,2BAAA,CAAA,OAAA,EAAjB,EAAyB,OAAA,EAAO,IAAA,EAC7B,QAAA,kBAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAS,CAAA,EAC5C,CAAA;AAAA,oBAEAA,cAAAA,CAAkBS,2BAAA,CAAA,MAAA,EAAjB,EACG,QAAA,kBAAAR,eAAAA;AAAA,MAAkBQ,2BAAA,CAAA,OAAA;AAAA,MAAjB;AAAA,QACG,IAAA,EAAM,SAAA;AAAA,QACN,UAAA;AAAA,QACA,SAAA,EAAW;AAAA;AAAA,UAEP,4DAAA;AAAA;AAAA,UAEA,+BAAA;AAAA,UACA,kCAAA;AAAA;AAAA,UAEA,sBAAA;AAAA;AAAA,UAEA,yCAAA;AAAA;AAAA,UAEA,UAAU,SAAS;AAAA,SACvB,CAAE,KAAK,GAAG,CAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,0BACDT,cAAAA;AAAA,YAAkBS,2BAAA,CAAA,KAAA;AAAA,YAAjB;AAAA,cACG,KAAA,EAAO,EAAA;AAAA,cACP,MAAA,EAAQ,CAAA;AAAA,cACR,SAAA,EAAU;AAAA;AAAA;AACd;AAAA;AAAA,KACJ,EACJ;AAAA,GAAA,EACJ,CAAA,EACJ,CAAA;AAER;AAGO,IAAM,eAAA,GAAmCA,2BAAA,CAAA;AChDjC,SAAR,IAAA,CAAsB;AAAA,EACzB,OAAO,EAAC;AAAA,EACR,WAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA,GAAe,IAAA;AAAA,EACf;AACJ,CAAA,EAAc;AACV,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAA,CAAiB,MAAM,gBAAA,IAAoB,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,IAAO,EAAE,CAAA;AAGvF,EAAAC,gBAAA,CAAU,MAAM;AACZ,IAAA,IAAI,gBAAA,WAA2B,gBAAgB,CAAA;AAAA,EACnD,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAGrB,EAAAA,gBAAA,CAAU,MAAM;AACZ,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;AAC/C,IAAA,IAAI,CAAC,MAAA,EAAQ;AAET,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,EAAE,GAAG,CAAA;AAAA,IACtC;AAAA,EACJ,CAAA,EAAG,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA;AAEhB,EAAA,MAAM,iBAAA,GAAoB,CAAC,QAAA,KAAqB;AAC5C,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;AAC7C,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,QAAQ,CAAA;AAChD,IAAA,WAAA,GAAc,MAAM,IAAI,CAAA;AACxB,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AACxB,IAAA,MAAM,MAAM,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;AACjD,IAAA,IAAI,MAAM,CAAA,EAAG,iBAAA,CAAkB,KAAK,GAAA,GAAM,CAAC,EAAE,GAAG,CAAA;AAAA,EACpD,CAAA;AAEA,EAAA,MAAM,YAAY,MAAM;AACpB,IAAA,MAAM,MAAM,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;AACjD,IAAA,IAAI,GAAA,GAAM,KAAK,MAAA,GAAS,CAAA,oBAAqB,IAAA,CAAK,GAAA,GAAM,CAAC,CAAA,CAAE,GAAG,CAAA;AAAA,EAClE,CAAA;AAEA,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,uBACIV,eAAAA;AAAA,IAAeW,wBAAA,CAAA,IAAA;AAAA,IAAd;AAAA,MACG,KAAA;AAAA,MACA,aAAA,EAAe,iBAAA;AAAA,MACf,SAAA,EAAU,uCAAA;AAAA,MAGV,QAAA,EAAA;AAAA,wBAAAX,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uHAAA,EAEX,QAAA,EAAA;AAAA,0BAAAD,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,aAAA;AAAA,cACT,YAAA,EAAW,cAAA;AAAA,cACX,SAAA,EAAU,6NAAA;AAAA,cAEV,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAa,CAAA,EAAG,WAAU,SAAA,EACjF,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,cAAA,EAAe,CAAA,EACxE;AAAA;AAAA,WACJ;AAAA,0BAGAA,cAAAA;AAAA,YAAeY,wBAAA,CAAA,IAAA;AAAA,YAAd;AAAA,cACG,YAAA,EAAW,MAAA;AAAA,cACX,SAAA,EAAU,kIAAA;AAAA,cAET,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACPX,eAAAA;AAAA,gBAAeW,wBAAA,CAAA,OAAA;AAAA,gBAAd;AAAA,kBAEG,OAAO,GAAA,CAAI,GAAA;AAAA,kBACX,SAAA,EAAU,ikBAAA;AAAA,kBAMV,QAAA,EAAA;AAAA,oCAAAZ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,cAAI,KAAA,EAAM,CAAA;AAAA,oBAC7C,gCACGA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACG,IAAA,EAAK,QAAA;AAAA,wBACL,YAAA,EAAY,CAAA,MAAA,EAAS,GAAA,CAAI,KAAK,CAAA,CAAA;AAAA,wBAC9B,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,0BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,0BAAA,UAAA,GAAa,IAAI,GAAG,CAAA;AAAA,wBACxB,CAAA;AAAA,wBACA,SAAA,EAAU,iEAAA;AAAA,wBAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACjD,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,OAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EACxH;AAAA;AAAA;AACJ;AAAA,iBAAA;AAAA,gBAtBC,GAAA,CAAI;AAAA,eAyBhB;AAAA;AAAA,WACL;AAAA,0BAGAA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,SAAA;AAAA,cACT,YAAA,EAAW,UAAA;AAAA,cACX,SAAA,EAAU,kNAAA;AAAA,cAEV,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAa,CAAA,EAAG,WAAU,SAAA,EACjF,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,cAAA,EAAe,CAAA,EACxE;AAAA;AAAA;AACJ,SAAA,EACJ,CAAA;AAAA,wBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sFAAA,EACV,QAAA,EAAA,MAAA;AAAA;AAAA,UAEG,IAAA,CACK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,KAAK,CAAA,CAC7B,GAAA,CAAI,CAAC,CAAA,qBACFA,eAAeY,wBAAA,CAAA,OAAA,EAAd,EAAkC,KAAA,EAAO,CAAA,CAAE,GAAA,EAAK,SAAA,EAAU,oCACtD,QAAA,EAAA,CAAA,CAAE,OAAA,EAAA,EADqB,CAAA,CAAE,GAE9B,CACH;AAAA;AAAA;AAAA,UAGL,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,qBACNZ,cAAAA,CAAeY,wBAAA,CAAA,OAAA,EAAd,EAAkC,KAAA,EAAO,CAAA,CAAE,GAAA,EAAK,SAAA,EAAU,oCAAmC,UAAA,EAAU,IAAA,EACpG,QAAA,kBAAAZ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,cAAA,EAAiB,CAAA,CAAE,QAAQ,KAAA,GAAQ,OAAA,GAAU,QAAQ,CAAA,CAAA,EAChE,QAAA,EAAA,CAAA,CAAE,OAAA,EACP,CAAA,EAAA,EAHwB,CAAA,CAAE,GAI9B,CACH;AAAA,SAAA,EAET;AAAA;AAAA;AAAA,GACJ;AAER;ACpJA,IAAM,QAAA,GAAW,CAAC,IAAA,KACd,OAAA,CAAQ,KAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAWrD,SAAS,YAAA,CAAa;AAAA,EAClB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,KAAA,GAAQ;AACZ,CAAA,EAAc;AACV,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,EAAG;AACjB,IAAA,uBACIC,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,6NAAA;AAAA,QACV,KAAA,EAAO,EAAE,WAAA,EAAa,KAAA,GAAQ,KAAK,CAAA,EAAE;AAAA,QACrC,OAAA,EAAS,MACL,WAAA,CAAY;AAAA,UACR,QAAA,EAAU,KAAA;AAAA,UACV,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,MAAM,IAAA,CAAK,QAAA;AAAA,UACX,aAAa,IAAA,CAAK;AAAA,SACrB,CAAA;AAAA,QAIL,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iHAAA,EAAkH,CAAA;AAAA,0BAClIA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8FAAA,EACX,eAAK,KAAA,EACV;AAAA;AAAA;AAAA,KACJ;AAAA,EAER;AAEA,EAAA,MAAM,WAAA,GACF,gBAAA,IAAoB,mBAAA,CAAoB,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GACnD,CAAC,IAAA,CAAK,GAAG,CAAA,GACT,EAAC;AAEX,EAAA,uBACIA,cAAAA;AAAA,IAAWa,oBAAA,CAAA,IAAA;AAAA,IAAV;AAAA,MACG,IAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc,WAAA;AAAA,MACd,KAAA,EAAO,EAAE,WAAA,EAAa,KAAA,GAAQ,EAAA,EAAG;AAAA,MAEjC,QAAA,kBAAAZ,gBAAWY,oBAAA,CAAA,IAAA,EAAV,EAAe,OAAO,IAAA,CAAK,GAAA,EAAK,WAAU,aAAA,EACvC,QAAA,EAAA;AAAA,wBAAAZ,eAAAA,CAAWY,oBAAA,CAAA,OAAA,EAAV,EAAkB,SAAA,EAAU,+MAAA,EAEzB,QAAA,EAAA;AAAA,0BAAAb,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAa,GAAA;AAAA,cACb,SAAA,EAAU,yJAAA;AAAA,cAEV,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACG,aAAA,EAAc,OAAA;AAAA,kBACd,cAAA,EAAe,OAAA;AAAA,kBACf,CAAA,EAAE;AAAA;AAAA;AACN;AAAA,WACJ;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAU,mDAAA;AAAA,cACV,OAAA,EAAS,MACL,WAAA,CAAY;AAAA,gBACR,QAAA,EAAU,IAAA;AAAA,gBACV,KAAK,IAAA,CAAK,GAAA;AAAA,gBACV,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,MAAM,IAAA,CAAK,QAAA;AAAA,gBACX,aAAa,IAAA,CAAK;AAAA,eACrB,CAAA;AAAA,cAGJ,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACV,SAAA,EACJ,CAAA;AAAA,wBAEAA,cAAAA,CAAWa,oBAAA,CAAA,OAAA,EAAV,EAAkB,SAAA,EAAU,qGACzB,QAAA,kBAAAb,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACV,QAAA,EAAA,IAAA,CAAK,QAAA,CAAU,GAAA,CAAI,CAAC,0BACjBA,cAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YAEG,IAAA,EAAM,KAAA;AAAA,YACN,WAAA;AAAA,YACA,gBAAA;AAAA,YACA,mBAAA;AAAA,YACA,OAAO,KAAA,GAAQ;AAAA,WAAA;AAAA,UALV,KAAA,CAAM;AAAA,SAOlB,GACL,CAAA,EACJ;AAAA,OAAA,EACJ;AAAA;AAAA,GACJ;AAER;AAkBe,SAAR,IAAA,CAAsB;AAAA,EACzB,KAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA,GAAmB,KAAA;AAAA,EACnB,sBAAsB;AAC1B,CAAA,EAAc;AACV,EAAA,uBACIA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACV,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACRA,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MAEG,IAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KAAA;AAAA,IAJK,IAAA,CAAK;AAAA,GAMjB,CAAA,EACL,CAAA;AAER;ACzIe,SAAR,YAAA,CAA8B,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAsB;AACpF,EAAA,uBACIA,cAAAA;AAAA,IAAac,sBAAA,CAAA,IAAA;AAAA,IAAZ;AAAA,MACG,IAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,aAAA,EAAe,CAAC,GAAA,KAAQ;AAEpB,QAAA,IAAI,GAAA,WAAc,GAAG,CAAA;AAAA,MACzB,CAAA;AAAA,MACA,SAAA,EAAU,mBAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,0BACdd,cAAAA;AAAA,QAAac,sBAAA,CAAA,IAAA;AAAA,QAAZ;AAAA,UAEG,OAAO,IAAA,CAAK,GAAA;AAAA,UACZ,cAAY,OAAO,IAAA,CAAK,UAAU,QAAA,GAAW,IAAA,CAAK,QAAQ,IAAA,CAAK,GAAA;AAAA,UAC/D,SAAA,EAAW;AAAA,YACP,UAAU,CAAA,IAAK,uCAAA;AAAA,YACf,KAAA,KAAU,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,2DAAA;AAAA,YAC9B,gDAAA;AAAA,YACA,uEAAA;AAAA,YACA,oEAAA;AAAA,YACA;AAAA,WACJ,CACK,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,UAEZ,QAAA,EAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,SAAA;AAAA,QAdd,IAAA,CAAK;AAAA,OAgBjB;AAAA;AAAA,GACL;AAER;AClCA,IAAM,sBAAsBC,oBAAA,CAAwC;AAAA,EAChE,MAAO,MAAM,MAAA;AAAA,EACb,OAAO,MAAM;AACjB,CAAC,CAAA;AAGD,IAAM,OAAA,GAA4C;AAAA,EAC9C,IAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,mBAAA;AAAA,EACT,OAAA,EAAS,mBAAA;AAAA,EACT,MAAA,EAAS;AACb,CAAA;AAGA,IAAM,gBAAA,GAAyD;AAAA,EAC3D,WAAA,EAAiB,wDAAA;AAAA,EACjB,UAAA,EAAiB,0DAAA;AAAA,EACjB,YAAA,EAAiB,4EAAA;AAAA,EACjB,cAAA,EAAiB,0DAAA;AAAA,EACjB,aAAA,EAAiB,4DAAA;AAAA,EACjB,eAAA,EAAiB;AACrB,CAAA;AAGA,SAAS,gBAAA,CAAiB,KAA2B,OAAA,EAAyB;AAC1E,EAAA,IAAI,OAAA,EAAS,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AACvD,EAAA,MAAM,KAAA,GAAS,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA;AACnC,EAAA,MAAM,IAAA,GAAS,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA;AAClC,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,UAAA,CAAW,QAAQ,CAAA;AACtC,EAAA,OAAO;AAAA,IACH,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,KAAA,GAAQ,EAAA,GAAK,IAAA,GAAO,GAAA,GAAM,CAAA;AAAA,IAC7B,CAAA,EAAG,MAAA,GAAU,MAAA,GAAS,EAAA,GAAK,GAAA,GAAO,CAAA;AAAA,IAClC,KAAA,EAAO,SAAS,IAAA,GAAO;AAAA,GAC3B;AACJ;AAEA,SAAS,QAAA,CAAS,EAAE,IAAA,EAAK,EAA+B;AACpD,EAAA,IAAI,SAAS,SAAA,EAAW;AACpB,IAAA,uBACIf,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,aAAA,EAAY,MAAA,EACzJ,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB,CAAA,EACtC,CAAA;AAAA,EAER;AACA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACjB,IAAA,uBACIC,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,eAAY,MAAA,EACzJ,QAAA,EAAA;AAAA,sBAAAD,eAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,sBAAEA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,sBAAEA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,GAAA,EAAI;AAAA,KAAA,EACpH,CAAA;AAAA,EAER;AACA,EAAA,IAAI,SAAS,SAAA,EAAW;AACpB,IAAA,uBACIC,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,eAAY,MAAA,EACzJ,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qFAAA,EAAsF,CAAA;AAAA,sBAC9FA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,sBAAEA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA,KAAA,EACpF,CAAA;AAAA,EAER;AACA,EAAA,uBACIC,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,eAAY,MAAA,EACzJ,QAAA,EAAA;AAAA,oBAAAD,eAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAAEA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBAAEA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACrH,CAAA;AAER;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACtB,CAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA;AACJ,CAAA,EAKG;AACC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIU,gBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAW,gBAAA,CAAiB,GAAA,EAAK,OAAO,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAW,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,EAAE,QAAA,IAAY,GAAA;AAG/B,EAAA,MAAM,eAAe,CAAC,OAAA,IAAW,QAAA,CAAS,QAAQ,KAAK,QAAA,GAAW,CAAA;AAElE,EAAA,uBACIV,cAAAA;AAAA,IAACO,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACG,MAAA,EAAM,IAAA;AAAA,MACN,OAAA;AAAA,MACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AAAA,MAC5C,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,SAAS,CAAA,EAAE;AAAA,MAC/B,UAAA,EACI,OAAA,GACM,EAAE,QAAA,EAAU,GAAE,GACd;AAAA,QACI,OAAA,EAAS,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,QAC1B,CAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,QAClE,CAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,QAClE,KAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,QAClE,MAAA,EAAS,EAAE,QAAA,EAAU,IAAA;AAAK,OAC9B;AAAA,MAEV,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,MACnC,YAAA,EAAc,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,MAEpC,QAAA,kBAAAN,eAAAA;AAAA,QAAOe,gBAAA,CAAA,IAAA;AAAA,QAAN;AAAA,UACG,IAAA,EAAI,IAAA;AAAA,UACJ,QAAA;AAAA,UACA,YAAA,EAAc,CAAC,CAAA,KAAM;AAAE,YAAA,IAAI,CAAC,CAAA,EAAG,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA;AAAA,UAAE,CAAA;AAAA,UAC7C,SAAA,EAAW;AAAA,YACP,gDAAA;AAAA,YACA,SAAS,SAAA,GAAY,EAAA;AAAA,YACrB,oBAAA;AAAA,YACA,OAAA,CAAQ,CAAA,CAAE,IAAA,IAAQ,MAAM;AAAA,WAC5B,CAAE,KAAK,GAAG,CAAA;AAAA,UAGV,QAAA,EAAA;AAAA,4BAAAf,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACX,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACZ,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,MAAA,EAAQ,CAAA,EACtC,CAAA;AAAA,8BAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACX,QAAA,EAAA;AAAA,gCAAAD,eAAOgB,gBAAA,CAAA,KAAA,EAAN,EAAY,SAAA,EAAU,+CAAA,EAClB,YAAE,KAAA,EACP,CAAA;AAAA,gBACC,CAAA,CAAE,+BACChB,cAAAA,CAAOgB,8BAAN,EAAkB,SAAA,EAAU,8CAAA,EACxB,QAAA,EAAA,CAAA,CAAE,WAAA,EACP;AAAA,eAAA,EAER,CAAA;AAAA,8BAEAhB,eAAOgB,gBAAA,CAAA,MAAA,EAAN,EAAa,SAAO,IAAA,EAAC,OAAA,EAAQ,SAC1B,QAAA,kBAAAhB,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,YAAA,EAAW,OAAA;AAAA,kBACX,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA;AAAA,kBAC3B,SAAA,EAAU,sLAAA;AAAA,kBAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAY,QACpE,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kBAAA,EAAmB,MAAA,EAAO,gBAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,CAAA,EAC7F;AAAA;AAAA,eACJ,EACJ;AAAA,aAAA,EACJ,CAAA;AAAA,YAQC,gCACGA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDACX,QAAA,kBAAAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,SAAA,EAAU,sDAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACH,SAAA,EAAW,yBAAyB,QAAQ,CAAA,kBAAA,CAAA;AAAA,kBAC5C,kBAAA,EAAoB,UAAU,QAAA,GAAW;AAAA;AAC7C;AAAA,aACJ,EACJ;AAAA;AAAA;AAAA;AAER;AAAA,GACJ;AAER;AAcO,SAAS,oBAAA,CAAqB;AAAA,EACjC,QAAA;AAAA,EACA,QAAA,GAAW;AACf,CAAA,EAGG;AACC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIU,eAAAA,CAA8B,EAAE,CAAA;AAC1E,EAAA,MAAM,UAAUN,6BAAAA,EAAiB;AAEjC,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAAiC;AAC3C,IAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS;AAAA,MACvB,GAAG,IAAA;AAAA,MACH,EAAE,QAAA,EAAU,GAAA,EAAM,GAAG,OAAA,EAAS,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,MAAA,EAAO;AAAE,KAChE,CAAA;AAAA,EACL,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,EAAA,KAAe;AAC1B,IAAA,gBAAA,CAAiB,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAC,CAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,uBACIJ,cAAAA,CAAC,mBAAA,CAAoB,QAAA,EAApB,EAA6B,OAAO,EAAE,IAAA,EAAM,KAAA,EAAM,EAC/C,QAAA,kBAAAC,eAAAA,CAAOe,2BAAN,EAAe,cAAA,EACZ,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,GAAI,OAAA,GAC7B,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,GAAK,MAAA,GAAU,IAAA,EAEtC,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBAEDhB,cAAAA;AAAA,MAAOgB,gBAAA,CAAA,QAAA;AAAA,MAAN;AAAA,QACG,OAAA,EAAO,IAAA;AAAA,QACP,SAAA,EAAW;AAAA,UACP,iBAAiB,QAAQ,CAAA;AAAA,UACzB;AAAA,SACJ,CAAE,KAAK,GAAG,CAAA;AAAA,QAEV,QAAA,kBAAAhB,cAAAA,CAAC,IAAA,EAAA,EACG,QAAA,kBAAAA,cAAAA,CAACM,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACrB,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,sBAChBN,cAAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YAEG,CAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,KAAA;AAAA,YACT;AAAA,WAAA;AAAA,UAJK,CAAA,CAAE;AAAA,SAMd,GACL,CAAA,EACJ;AAAA;AAAA;AACJ,GAAA,EACJ,CAAA,EACJ,CAAA;AAER;AAGO,SAAS,eAAA,GAAkB;AAC9B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIiB,iBAAA,CAAW,mBAAmB,CAAA;AAC/C,EAAA,OAAO;AAAA,IACH,IAAA,EAAS,CAAC,KAAA,KAA6C,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,IACzF,OAAA,EAAS,CAAC,KAAA,KAA6C,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,IACzF,OAAA,EAAS,CAAC,KAAA,KAA6C,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,IACzF,MAAA,EAAS,CAAC,KAAA,KAA6C,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAW,GAAG,KAAA,EAAO;AAAA,GAC7F;AACJ;ACvQe,SAAR,cAAA,CAAgC,EAAE,MAAA,EAAO,EAAwB;AACpE,EAAA,MAAM,aAAad,cAAAA,CAAoC,MAAM,EAAC,EAAG,EAAE,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA;AAE/B,EAAAQ,iBAAU,MAAM;AACZ,IAAA,MAAM,WAA4C,EAAC;AACnD,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,OAAA,CAAQ,MAAA,EAAQ;AACtC,MAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAA,EAAK,KAAA,KAAU;AAC/B,QAAA,MAAM,CAAA,GAAI,WAAW,MAAM;AACvB,UAAA,GAAA,EAAK,SAAA,CAAU,IAAI,eAAe,CAAA;AAAA,QACtC,CAAA,EAAG,QAAQ,GAAG,CAAA;AACd,QAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,MACnB,CAAC,CAAA;AAAA,IACL;AACA,IAAA,OAAO,MAAM,QAAA,CAAS,OAAA,CAAQ,YAAY,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,UAAA,EAAY,OAAA,CAAQ,MAAM,CAAC,CAAA;AAE/B,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mIAAA,EAAoI,CAAA;AAAA,oBACnJA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACV,kBAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBAClBA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QAEG,SAAA,EAAU,aAAA;AAAA,QACV,GAAA,EAAK,CAAC,GAAA,KAAQ;AACV,UAAA,UAAA,CAAW,KAAK,CAAA,GAAI,GAAA;AAAA,QACxB,CAAA;AAAA,QAEC,QAAA,EAAA;AAAA,OAAA;AAAA,MANI;AAAA,KAQZ,CAAA,EACL;AAAA,GAAA,EACJ,CAAA;AAER;ACzBe,SAAR,UAAA,CAA4B;AAAA,EAC/B,SAAA,GAAY,EAAA;AAAA,EACZ,SAAA,GAAY,KAAA;AAAA,EACZ;AACJ,CAAA,EAAoB;AAChB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIU,gBAAS,SAAS,CAAA;AAC1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAWQ,cAA6C,IAAI,CAAA;AAElE,EAAAP,iBAAU,MAAM;AACZ,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,MAAM,KAAA,GAAQ,qBAAA,CAAsB,MAAM,UAAA,CAAW,IAAI,CAAC,CAAA;AAC1D,MAAA,OAAO,MAAM,qBAAqB,KAAK,CAAA;AAAA,IAC3C,CAAA,MAAO;AACH,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,QAAA,CAAS,UAAU,UAAA,CAAW,MAAM,eAAA,CAAgB,KAAK,GAAG,GAAG,CAAA;AAC/D,MAAA,OAAO,MAAM;AACT,QAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AAAA,MACvD,CAAA;AAAA,IACJ;AAAA,EACJ,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,IAAI,CAAC,cAAc,OAAO,IAAA;AAE1B,EAAA,uBACIX,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,CAAA,wEAAA,EAA2E,OAAA,GAAU,aAAA,GAAgB,WAAW,CAAA,CAAA;AAAA,MAE3H,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,CAAA,uDAAA,EAA0D,SAAS,IAC9E,QAAA,EACL;AAAA;AAAA,GACJ;AAER;AClCe,SAARmB,KAAAA,CAAsB,EAAE,KAAA,EAAO,WAAA,EAAa,WAAU,EAAc;AACvE,EAAA,uBACInB,eAAC,KAAA,EAAA,EAAI,IAAA,EAAK,WACL,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACRA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEG,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAe,cAAc,IAAA,CAAK,GAAA;AAAA,MAClC,WAAW,CAAA,kJAAA,EACP,SAAA,KAAc,IAAA,CAAK,GAAA,GAAM,qCAAqC,EAClE,CAAA,CAAA;AAAA,MACA,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,MAE9B,QAAA,EAAA,IAAA,CAAK;AAAA,KAAA;AAAA,IARD,IAAA,CAAK;AAAA,GAUjB,CAAA,EACL,CAAA;AAER;ACrBe,SAAR,iBAAA,CAAmC;AAAA,EACtC,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,EAA2B;AACvB,EAAA,MAAM,YAAA,GAAekB,cAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAIR,gBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,gBAAS,EAAE,CAAA;AAEnD,EAAA,MAAM,UAAU,MAAM;AAClB,IAAA,MAAM,OAAO,CAAC,QAAA;AACd,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,UAAA,CAAW,MAAM;AACb,MAAA,YAAA,CAAa,OAAA,EAAS,cAAA,CAAe,EAAE,QAAA,EAAU,UAAU,CAAA;AAC3D,MAAA,IAAI,kBAAA,EAAoB;AACpB,QAAA,eAAA,CAAgB,IAAA,GAAO,qBAAqB,EAAE,CAAA;AAAA,MAClD;AAAA,IACJ,GAAG,GAAG,CAAA;AAAA,EACV,CAAA;AAEA,EAAA,uBACIT,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,WAAW,MAAA,GAAS,KAAA;AAAA,QAC3B,MAAA,EAAQ,WAAW,MAAA,GAAS;AAAA,OAChC;AAAA,MACA,SAAA,EAAU,sGAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACX,QAAA,kBAAAA,cAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,OAAA,EAAQ,KAAA,EAAO,QAAA,GAAW,UAAA,GAAa,UACtD,QAAA,kBAAAA,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACG,OAAA;AAAA,YACA,IAAA,EACI,QAAA;AAAA;AAAA,8BAEIA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,8BAA6B,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,SAAA,EAAU,WAC9E,QAAA,kBAAAA,cAAAA,CAAC,UAAK,QAAA,EAAS,SAAA,EAAU,GAAE,gjBAAA,EAAijB,QAAA,EAAS,WAAU,CAAA,EACnmB;AAAA;AAAA;AAAA,8BAGAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,8BAA6B,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,SAAA,EAAU,WAC9E,QAAA,kBAAAA,cAAAA,CAAC,UAAK,QAAA,EAAS,SAAA,EAAU,GAAE,wgBAAA,EAAygB,QAAA,EAAS,WAAU,CAAA,EAC3jB;AAAA;AAAA;AAAA,WAIhB,CAAA,EACJ,CAAA;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAe,QAAA,EAAS;AAAA;AAAA;AAAA,GAC5C;AAER;ACzCe,SAAR,SAA0B,EAAE,IAAA,EAAM,UAAA,GAAa,kBAAA,EAAoB,QAAO,EAAkB;AAC/F,EAAA,uBACIC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sHAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,wEAAA,EACX,0BAAAA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA,EACpB,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACV,QAAA,EAAA,OAAO,KAAK,KAAA,KAAU,QAAA,mBACnBA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAK,IAAA,CAAK,KAAA,EAAO,KAAI,iBAAA,EAAkB,CAAA,GAE5C,KAAK,KAAA,EAEb,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACX,0BAAAA,cAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY,CAAA,EACzB,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EACG,QAAA,kBAAAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,QAAA,EAAU,CAAC,IAAA,CAAK,OAAA;AAAA,QAChB,OAAO,EAAE,KAAA,EAAO,eAAe,OAAA,EAAS,OAAA,EAAS,QAAQ,GAAA,EAAI;AAAA,QAC7D,OAAA,EAAS,UAAA;AAAA,QACT,OAAA,EAAS,MAAM,MAAA,GAAS,IAAI;AAAA;AAAA,KAChC,EACJ;AAAA,GAAA,EACJ,CAAA;AAER;ACvCe,SAAR,cAAA,CAAgC;AAAA,EACnC,IAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,UAAA,GAAa,kBAAA;AAAA,EACb;AACJ,CAAA,EAAwB;AACpB,EAAA,uBACIC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,CAAA,8DAAA,EACP,CAAC,OAAA,GACK,kEACA,iEACV,CAAA,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,CAAA,EACP,CAAC,OAAA,GACK,8EACA,yEACV,CAAA,mFAAA,CAAA;AAAA,YAEA,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA;AAAA,SACpB;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACV,QAAA,EAAA,OAAO,KAAK,KAAA,KAAU,QAAA,mBACnBA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAK,IAAA,CAAK,KAAA,EAAO,KAAI,iBAAA,EAAkB,CAAA,GAE5C,KAAK,KAAA,EAEb,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,CAAA,EACP,CAAC,OAAA,GACK,8EACA,yEACV,CAAA,yEAAA,CAAA;AAAA,YAEA,QAAA,kBAAAA,cAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY;AAAA;AAAA,SACzB;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EACG,QAAA,kBAAAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,KAAA,EAAO,aAAA;AAAA,cACP,OAAA,EAAS,OAAA;AAAA,cACT,MAAA,EAAQ,GAAA;AAAA,cACR,UAAA,EAAY,CAAC,OAAA,GACP,mEAAA,GACA,oEAAA;AAAA,cACN,aAAA,EAAe,MAAA;AAAA,cACf,UAAA,EAAY;AAAA,aAChB;AAAA,YACA,yBACIA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,SAAA,EACI,CAAC,OAAA,GACK,sCAAA,GACA,qCAAA;AAAA,gBAGT,QAAA,EAAA;AAAA;AAAA,aACL;AAAA,YAEJ,OAAA,EAAS,MAAM,MAAA,GAAS,IAAI;AAAA;AAAA,SAChC,EACJ;AAAA;AAAA;AAAA,GACJ;AAER;AC3Ee,SAAR,WAAA,CAA6B,EAAE,KAAA,EAAO,UAAA,EAAY,QAAO,EAAqB;AACjF,EAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sBAAA,EACV,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,IAAA,qBACRA,cAAAA,CAAC,YAAwB,IAAA,EAAY,UAAA,EAAwB,UAA9C,IAAA,CAAK,GAAyD,CAChF,CAAA,EACL,CAAA;AAER;ACJe,SAAR,eAAA,CAAiC,EAAE,KAAA,EAAO,UAAA,EAAY,QAAO,EAAyB;AACzF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIU,gBAAS,CAAC,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAAA,CAAmB,EAAE,CAAA;AACvD,EAAA,MAAM,QAAA,GAAWQ,aAAAA,CAAqD,EAAE,CAAA;AAExE,EAAA,MAAM,UAAA,GAAaf,eAAQ,MAAM;AAC7B,IAAA,IAAI,YAAY,WAAA,GAAc,CAAA;AAC9B,IAAA,IAAI,gBAAgB,WAAA,GAAc,CAAA;AAClC,IAAA,IAAI,WAAA,KAAgB,CAAA,EAAG,aAAA,GAAgB,KAAA,CAAM,MAAA,GAAS,CAAA;AACtD,IAAA,IAAI,WAAA,KAAgB,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,SAAA,GAAY,CAAA;AAClD,IAAA,OAAO,EAAE,eAAe,SAAA,EAAU;AAAA,EACtC,CAAA,EAAG,CAAC,WAAA,EAAa,KAAA,CAAM,MAAM,CAAC,CAAA;AAE9B,EAAAQ,iBAAU,MAAM;AACZ,IAAA,MAAM,EAAE,SAAA,EAAW,aAAA,EAAc,GAAI,UAAA;AACrC,IAAA,IAAI,OAAA,GAAU,CAAC,aAAA,EAAe,WAAA,EAAa,SAAS,CAAA;AACpD,IAAA,IAAI,WAAA,KAAgB,CAAA,IAAK,WAAA,KAAgB,KAAA,CAAM,SAAS,CAAA,EAAG;AACvD,MAAA,OAAA,GAAU,CAAC,GAAG,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,YAAA,CAAa,OAAO,CAAA;AAEpB,IAAA,MAAM,WAA4C,EAAC;AACnD,IAAA,QAAA,CAAS,QAAQ,OAAA,CAAQ,CAAC,EAAE,SAAA,EAAW,KAAI,KAAM;AAC7C,MAAA,IAAI,cAAc,CAAA,EAAG;AACjB,QAAA,GAAA,CAAI,SAAA,CAAU,OAAO,YAAY,CAAA;AACjC,QAAA,MAAM,CAAA,GAAI,WAAW,MAAM,GAAA,CAAI,UAAU,GAAA,CAAI,YAAY,GAAG,EAAE,CAAA;AAC9D,QAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,MACnB;AACA,MAAA,IAAI,cAAc,CAAA,EAAG;AACjB,QAAA,GAAA,CAAI,SAAA,CAAU,OAAO,WAAW,CAAA;AAChC,QAAA,MAAM,EAAA,GAAK,WAAW,MAAM;AACxB,UAAA,IAAI,SAAA,KAAc,CAAA,EAAG,GAAA,CAAI,SAAA,CAAU,IAAI,WAAW,CAAA;AAAA,QACtD,GAAG,GAAG,CAAA;AACN,QAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAAA,MACpB;AAAA,IACJ,CAAC,CAAA;AACD,IAAA,OAAO,MAAM,QAAA,CAAS,OAAA,CAAQ,YAAY,CAAA;AAAA,EAC9C,GAAG,CAAC,WAAA,EAAa,UAAA,EAAY,KAAA,CAAM,MAAM,CAAC,CAAA;AAE1C,EAAA,MAAM,OAAA,GAAU,MACZ,cAAA,CAAe,CAAC,IAAA,KAAU,IAAA,GAAO,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,IAAA,GAAO,CAAE,CAAA;AAEvE,EAAA,MAAM,WAAA,GAAc,MAChB,cAAA,CAAe,CAAC,IAAA,KAAU,IAAA,GAAO,CAAA,KAAM,EAAA,GAAK,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,IAAA,GAAO,CAAE,CAAA;AAE5E,EAAA,uBACIX,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDACX,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,WAAA;AAAA,QACT,YAAA,EAAW,UAAA;AAAA,QACX,SAAA,EAAU,+GAAA;AAAA,QAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAQoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,aAAa,CAAA,EAAG,SAAA,EAAU,6BAAA,EACpG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,cAAA,EAAe,CAAA,EACxE;AAAA;AAAA,KACJ;AAAA,oBAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QACV,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,EAAO,EAAA,KAAO;AAC1B,MAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,EAAA,KAAO,oBACVA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEG,GAAA,EAAK,CAAC,GAAA,KAAQ;AACV,YAAA,IAAI,QAAA,CAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,GAAA;AAC/B,cAAA,QAAA,CAAS,QAAQ,IAAA,CAAK,EAAE,SAAA,EAAW,EAAA,EAAI,KAAK,CAAA;AAAA,UACpD,CAAA;AAAA,UACA,SAAA,EAAU,kEAAA;AAAA,UAEV,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAY,YAAwB,MAAA,EAAgB;AAAA,SAAA;AAAA,QAPzD;AAAA,0BAUTA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEG,GAAA,EAAK,CAAC,GAAA,KAAQ;AACV,YAAA,IAAI,QAAA,CAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,GAAA;AAC/B,cAAA,QAAA,CAAS,QAAQ,IAAA,CAAK,EAAE,SAAA,EAAW,EAAA,EAAI,KAAK,CAAA;AAAA,UACpD,CAAA;AAAA,UACA,SAAA,EAAU,mDAAA;AAAA,UAEV,QAAA,kBAAAA,eAAC,cAAA,EAAA,EAAe,IAAA,EAAY,SAAS,EAAA,KAAO,CAAA,EAAG,YAAwB,MAAA,EAAgB;AAAA,SAAA;AAAA,QAPlF;AAAA,OAQT;AAAA,IAER,CAAC,CAAA,EACL,CAAA;AAAA,oBAEAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,OAAA;AAAA,QACT,YAAA,EAAW,MAAA;AAAA,QACX,SAAA,EAAU,oGAAA;AAAA,QAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAQoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,aAAa,CAAA,EAAG,SAAA,EAAU,6BAAA,EACpG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,cAAA,EAAe,CAAA,EACxE;AAAA;AAAA;AACJ,GAAA,EACJ,CAAA,EACJ,CAAA;AAER;ACnGe,SAAR,OAAA,CAAyB,EAAE,OAAA,GAAU,MAAA,EAAQ,QAAQ,EAAC,EAAG,UAAA,EAAY,MAAA,EAAO,EAAiB;AAChG,EAAA,uBACIA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACV,QAAA,EAAA,OAAA,KAAY,MAAA,mBACTA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAc,UAAA,EAAwB,MAAA,EAAgB,oBAEnEA,cAAAA,CAAC,mBAAgB,KAAA,EAAc,UAAA,EAAwB,QAAgB,CAAA,EAE/E,CAAA;AAER;ACJe,SAAR,YAA6B,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,SAAQ,EAAqB;AACtF,EAAA,uBACIA,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAc,SAAA,EAAU,SAC7B,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,MAClC,SAAA,EAAW,CAAA,+CAAA,EACP,QAAA,GAAW,kBAAA,GAAqB,EACpC,CAAA,8BAAA,CAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU,CAAA;AAAA,MACV,WAAW,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,KAAQ,WAAW,OAAA,IAAU;AAAA,MAEhD,QAAA,EAAA;AAAA;AAAA,GACL,EACJ,CAAA;AAER;ACnBe,SAAR,OAAA,CAAyB,EAAE,KAAA,EAAM,EAAiB;AACrD,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,YAAA,EAAW,iBAAA;AAAA,MACX,SAAA,EAAU,8GAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACRA,cAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UAEG,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,SAAS,IAAA,CAAK;AAAA,SAAA;AAAA,QAJT,IAAA,CAAK;AAAA,OAMjB;AAAA;AAAA,GACL;AAER;ACAe,SAAR,YAA6B,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,SAAQ,EAAqB;AACzF,EAAA,MAAM,UAAA,GAAakB,cAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAeA,cAAuB,IAAI,CAAA;AAEhD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIR,gBAAS,IAAI,CAAA;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,gBAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,gBAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,gBAAS,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAAA,CAAkC,EAAE,CAAA;AAEhF,EAAAC,iBAAU,MAAM;AACZ,IAAA,MAAM,SAAA,GAAY,CAAC,EAAE,MAAA,EAAO,KAAkB;AAC1C,MAAA,IAAI,WAAW,OAAA,IAAW,CAAC,WAAW,OAAA,CAAQ,QAAA,CAAS,MAAc,CAAA,EAAG;AACpE,QAAA,IAAI,aAAa,OAAA,EAAS;AACtB,UAAA,YAAA,CAAa,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,WAAW,CAAA;AAC9C,UAAA,YAAA,CAAa,OAAA,CAAQ,MAAM,IAAA,GAAO,KAAA;AAClC,UAAA,YAAA,CAAa,OAAA,CAAQ,MAAM,GAAA,GAAM,KAAA;AAAA,QACrC;AACA,QAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,QAAA,OAAA,EAAQ;AAAA,MACZ;AAAA,IACJ,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,SAAS,CAAA;AAC1C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,SAAS,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAA,iBAAU,MAAM;AACZ,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,MAAM,QAAQ,YAAA,CAAa,OAAA;AAC3B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,KAAA,EAAO;AAExB,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,QAAQ,qBAAA,EAAsB;AACxD,IAAA,IAAI,QAAA,CAAS,CAAA,GAAI,MAAA,IAAU,MAAA,CAAO,WAAA,EAAa;AAC3C,MAAA,OAAA,CAAQ,MAAM,GAAA,GAAM,CAAA,EAAG,QAAA,CAAS,CAAA,IAAK,SAAS,EAAA,CAAG,CAAA,EAAA,CAAA;AACjD,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACvB,CAAA,MAAO;AACH,MAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA,EAAA,CAAA;AACjC,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACtB;AACA,IAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA,EAAA,CAAA;AAClC,IAAA,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAC5B,IAAA,KAAA,CAAM,SAAA,CAAU,IAAI,WAAW,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAqB,IAAA,KAAgC;AACtE,IAAA,IAAI,KAAK,OAAA,EAAS;AACd,MAAA,IAAI,aAAa,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,WAAW,CAAA;AAC9C,QAAA,YAAA,CAAa,OAAA,CAAQ,MAAM,IAAA,GAAO,KAAA;AAClC,QAAA,YAAA,CAAa,OAAA,CAAQ,MAAM,GAAA,GAAM,KAAA;AAAA,MACrC;AACA,MAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AAAA,IAC3C,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,EAAU,MAAA,EAAQ;AAC9B,MAAA,MAAM,UAAA,GAAc,CAAA,CAAE,MAAA,CAAuB,qBAAA,EAAsB;AACnE,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,EAAS,qBAAA,GAAwB,MAAA,IAAU,CAAA;AAC5E,MAAA,MAAM,WAAA,GAAc,UAAA,CAAW,OAAA,EAAS,qBAAA,EAAsB,IAAK,EAAE,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,CAAa,CAAA;AAC/F,MAAA,MAAM,eAAe,WAAA,CAAY,KAAA;AAEjC,MAAA,IAAI,UAAA,CAAW,CAAA,GAAI,WAAA,IAAe,MAAA,CAAO,WAAA,EAAa;AAClD,QAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,QAAA,IAAI,YAAA,CAAa,SAAS,YAAA,CAAa,OAAA,CAAQ,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,CAAW,CAAA,GAAI,WAAW,CAAA,EAAA,CAAA;AAAA,MAC5F,CAAA,MAAO;AACH,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,IAAI,YAAA,CAAa,OAAA;AACb,UAAA,YAAA,CAAa,OAAA,CAAQ,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,UAAA,CAAW,CAAA,GAAI,WAAA,CAAY,CAAA,GAAI,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,EAAA,CAAA;AAAA,MACrG;AACA,MAAA,iBAAA,CAAkB,KAAK,QAAQ,CAAA;AAC/B,MAAA,IAAI,aAAa,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,OAAA,CAAQ,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA;AACjD,QAAA,YAAA,CAAa,OAAA,CAAQ,MAAM,IAAA,GAAO,CAAA,EAAG,KAAK,KAAA,CAAM,YAAA,GAAe,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,MACtE;AAAA,IACJ;AAAA,EACJ,CAAA;AAEA,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,uBACIV,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW,CAAA,oFAAA,EACP,UAAA,IAAc,WAAA,KAAgB,IACxB,wCAAA,GACA,CAAC,UAAA,IAAc,WAAA,KAAgB,MAAM,MAAA,GAAS,CAAA,GAC9C,0CAAA,GACA,UAAA,GACA,qBACA,oBACV,CAAA,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,QAAG,SAAA,EAAU,MAAA,EACT,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBACdC,eAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEG,aAAA,EAAe,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,YACvC,YAAA,EAAc,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,YACxC,YAAA,EAAc,MAAM,cAAA,CAAe,EAAE,CAAA;AAAA,YACrC,SAAA,EAAW,CAAA,mGAAA,EACP,KAAA,KAAU,CAAA,GAAI,6BAAA,GAAgC,EAClD,CAAA,CAAA,EAAI,KAAA,KAAU,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,6BAAA,GAAgC,EAAE,CAAA,CAAA;AAAA,YACnE,OAAA,EAAS,CAAC,CAAA,KAAM,WAAA,CAAY,GAAG,IAAI,CAAA;AAAA,YAEnC,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACV,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,IAAA;AAAA,gBACL,IAAA,CAAK;AAAA,eAAA,EACV,CAAA;AAAA,8BACAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBACV,QAAA,EAAA,IAAA,CAAK,QAAA,oBACFA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAQoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,SAAA,EAAU,WACpG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,cAAA,EAAe,GACxE,CAAA,EAER;AAAA;AAAA,WAAA;AAAA,UAnBK,IAAA,CAAK;AAAA,SAqBjB,CAAA,EACL,CAAA;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,GAAA,EAAK,YAAA;AAAA,YACL,SAAA,EAAW,CAAA,0EAAA,EACP,YAAA,IAAgB,YAAA,KAAiB,IAC3B,wCAAA,GACA,CAAC,YAAA,IAAgB,YAAA,KAAiB,eAAe,MAAA,GAAS,CAAA,GAC1D,0CAAA,GACA,YAAA,GACA,qBACA,oBACV,CAAA,CAAA;AAAA,YAEA,QAAA,kBAAAA,eAAC,IAAA,EAAA,EACI,QAAA,EAAA,cAAA,CAAe,IAAI,CAAC,IAAA,EAAM,0BACvBC,eAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBAEG,SAAA,EAAW,CAAA,yFAAA,EACP,KAAA,KAAU,CAAA,GAAI,6BAAA,GAAgC,EAClD,CAAA,CAAA,EAAI,KAAA,KAAU,cAAA,CAAe,MAAA,GAAS,CAAA,GAAI,6BAAA,GAAgC,EAAE,CAAA,CAAA;AAAA,gBAC5E,SAAS,MAAM,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA,EAAM,KAAK,UAAU,CAAA;AAAA,gBACxD,YAAA,EAAc,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,gBACzC,YAAA,EAAc,MAAM,eAAA,CAAgB,EAAE,CAAA;AAAA,gBAErC,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,IAAA;AAAA,kBACL,IAAA,CAAK;AAAA;AAAA,eAAA;AAAA,cATD;AAAA,aAWZ,CAAA,EACL;AAAA;AAAA;AACJ;AAAA;AAAA,GACJ;AAER;AC7Je,SAAR,OAAwB,EAAE,QAAA,EAAU,KAAA,EAAO,UAAA,GAAa,aAAY,EAAgB;AACvF,EAAA,MAAM,SAAA,GAAYiB,cAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIR,gBAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,gBAAyB,IAAI,CAAA;AAEjE,EAAA,MAAM,WAAA,GAAcP,cAAAA;AAAA,IAChB,MAAM,CAAC,QAAA,EAAU,UAAA,EAAY,wBAAwB,qBAAqB,CAAA;AAAA,IAC1E;AAAC,GACL;AAEA,EAAA,MAAM,WAAA,GAAckB,mBAAY,MAAM;AAClC,IAAA,KAAA,CAAM,UAAU,CAAA,EAAG,OAAA,CAAQ,SAAS,SAAA,CAAU,MAAA,CAAO,GAAG,WAAW,CAAA;AACnE,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,SAAA,CAAU,OAAA,CAAQ,MAAM,OAAA,GAAU,MAAA;AAAA,EAC7D,CAAA,EAAG,CAAC,WAAA,EAAa,KAAA,EAAO,UAAU,CAAC,CAAA;AAEnC,EAAAV,iBAAU,MAAM;AACZ,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,aAAa,OAAA,CAAQ,UAAU,KAAK,OAAO,CAAA;AACtE,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,WAAA,EAAY;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,UAAU,CAAA,EAAG,OAAA,CAAQ,OAAA;AACtC,IAAA,IAAI,EAAA,EAAI;AACJ,MAAA,aAAA,CAAc,EAAA,CAAG,uBAAuB,CAAA;AACxC,MAAA,EAAA,CAAG,SAAA,CAAU,GAAA,CAAI,GAAG,WAAW,CAAA;AAAA,IACnC;AAAA,EACJ,GAAG,CAAC,WAAA,EAAa,OAAO,UAAA,EAAY,WAAA,EAAa,UAAU,CAAC,CAAA;AAE5D,EAAA,MAAM,eAAe,MAAM;AACvB,IAAA,IAAI,KAAA,CAAM,UAAA,GAAa,CAAC,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,UAAU,CAAA,CAAE,OAAA,CAAQ,SAAS,SAAA,CAAU,MAAA,CAAO,GAAG,WAAW,CAAA;AAClE,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,UAAA,GAAa,CAAC,EAAE,OAAA,CAAQ,OAAA;AAC7C,MAAA,IAAI,MAAA,EAAQ,aAAA,CAAc,MAAA,CAAO,qBAAA,EAAuB,CAAA;AACxD,MAAA,aAAA,CAAc,aAAa,CAAC,CAAA;AAAA,IAChC,CAAA,MAAO;AACH,MAAA,YAAA,CAAa,OAAA,CAAQ,YAAY,MAAM,CAAA;AACvC,MAAA,WAAA,EAAY;AAAA,IAChB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,UAAU,CAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,QAAQ,UAAA,GACf,IAAA,CAAK,gBAAgB,SAAA,GACjB,KAAA,CAAM,UAAA,CAAW,KAAA,GAAQ,EAAE,CAAA,GAAI,IAAI,UAAA,CAAW,KAAA,GAAQ,EAAA,GACtD,KAAA,CAAM,UAAA,CAAW,KAAA,GAAQ,CAAC,CAAA,GAAI,CAAA,GAAI,UAAA,CAAW,KAAA,GAAQ,CAAA,GACzD,MAAA;AACN,EAAA,MAAM,GAAA,GAAM,QAAQ,UAAA,GACd,IAAA,CAAK,gBAAgB,SAAA,GACjB,KAAA,CAAM,UAAA,CAAW,CAAA,GAAI,EAAE,CAAA,GAAI,IAAI,UAAA,CAAW,CAAA,GAAI,EAAA,GAC9C,KAAA,CAAM,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA,GAAI,UAAA,CAAW,MAAA,GAAS,CAAA,GAC3D,MAAA;AAEN,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,GAAA,EAAK,WAC3B,QAAA,kBAAAC,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,EAAI;AAAA,QACnB,SAAA,EAAU,+GAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,IAAA,EAAM,WAAA;AAAA,0BACPA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACX,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2FAAA,EAA4F,CAAA;AAAA,8BAC5GA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mEAAA,EAAoE;AAAA,aAAA,EACxF,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACG,OAAA,EAAS,YAAA;AAAA,gBACT,OAAA,EAAS,UAAA,KAAe,KAAA,CAAM,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,gBACrD,OAAO,EAAE,KAAA,EAAO,IAAI,OAAA,EAAS,UAAA,EAAY,QAAQ,GAAA;AAAI;AAAA;AACzD,WAAA,EACJ;AAAA;AAAA;AAAA,KACJ,EACJ,CAAA;AAAA,IACC;AAAA,GAAA,EACL,CAAA;AAER;ACzFA,IAAM,WAAA,GAAcsB,uBAAAA,CAAM,UAAA,CAA+C,SAASC,YAAAA,CAC9E;AAAA,EACI,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA,GAAS;AACb,CAAA,EACA,GAAA,EACF;AACE,EAAA,uBACIvB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDACX,QAAA,kBAAAC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,CAAA,KAAA,EAAQ,MAAA,KAAW,UAAA,GAAa,aAAa,6BAA6B,CAAA,CAAA;AAAA,MACrF,KAAA,EAAO,SAAS,EAAC;AAAA,MAEhB,QAAA,EAAA;AAAA,QAAA,KAAA,oBACGD,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,uEAAA,EAAwE,SACpF,QAAA,EAAA,KAAA,EACL,CAAA;AAAA,wBAEJC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uFAAA,EACX,QAAA,EAAA;AAAA,0BAAAD,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,GAAA;AAAA,cACA,QAAA;AAAA,cACA,KAAA;AAAA,cACA,QAAA;AAAA,cACA,IAAA,EAAK,MAAA;AAAA,cACL,IAAA;AAAA,cACA,EAAA,EAAI,OAAA;AAAA,cACJ,SAAA,EAAU,uIAAA;AAAA,cACV,KAAA,EAAO,cAAc,EAAC;AAAA,cACtB,aAAa,WAAA,IAAe;AAAA;AAAA,WAChC;AAAA,0BAEAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,8BAA6B,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAMoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,GAAG,SAAA,EAAU,SAAA,EACzG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAS,WAAU,CAAA,EAAE,8JAAA,EAA+J,QAAA,EAAS,SAAA,EAAU,CAAA,EACjN;AAAA,SAAA,EACJ;AAAA;AAAA;AAAA,GACJ,EACJ,CAAA;AAER,CAAC,CAAA;AAED,IAAO,mBAAA,GAAQ;AC7DA,SAAR,YAAA,CAA8B,EAAE,KAAA,EAAO,WAAA,GAAc,OAAM,EAAsB;AACpF,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,CAAA,kDAAA,EAAqD,WAAA,GAAc,MAAA,GAAS,OAAO,CAAA,iDAAA,CAAA;AAAA,MAE7F,QAAA,EAAA;AAAA;AAAA,GACL;AAER;AC+Be,SAAR,QAAA,CAA0B;AAAA,EAC7B,aAAA,GAAgB,KAAA;AAAA,EAChB,SAAA,GAAY,IAAA;AAAA,EACZ,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA,GAAS,YAAA;AAAA,EACT,YAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT,OAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT,aAAa,EAAC;AAAA,EACd;AACJ,CAAA,EAAkB;AACd,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIU,gBAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAAA,CAA8B,EAAE,CAAA;AAC1E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,gBAAiC,IAAI,CAAA;AAC3E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,gBAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAAA,CAAyB,EAAE,CAAA;AAE/D,EAAAC,iBAAU,MAAM;AACZ,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAAA,iBAAU,MAAM;AACZ,IAAA,IAAI,aAAA,IAAiB,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvC,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,IAC1B;AAAA,EACJ,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAEzB,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAyB;AACzC,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,QAAA,CAAS,GAAG,IACjC,aAAA,CAAc,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,GAAG,CAAA,GACvC,CAAC,GAAG,eAAe,GAAG,CAAA;AAC5B,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,QAAA,GAAW,EAAE,QAAQ,EAAE,KAAA,EAAO,MAAM,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,IAC7D,CAAA,MAAO;AACH,MAAA,gBAAA,CAAiB,CAAC,GAAG,CAAC,CAAA;AACtB,MAAA,QAAA,GAAW,EAAE,QAAQ,EAAE,KAAA,EAAO,KAAK,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AACxD,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACjB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAA2C;AAC/D,IAAA,MAAM,IAAA,GAAO,EAAE,MAAA,CAAO,KAAA;AACtB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,aAAA;AAAA,MACI,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,GACV,QACA,KAAA,CAAM,MAAA;AAAA,QAAO,CAAC,EAAA,KACV,MAAA,CAAO,EAAA,CAAG,KAAK,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,IAAA,CAAK,WAAA,EAAa;AAAA;AAC9D,KACV;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAChB,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,KAAA,KAAU,GAAA;AAE3D,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,CAAA,KAAA,EAAQ,MAAA,KAAW,UAAA,GAAa,aAAa,6BAA6B,CAAA,CAAA;AAAA,QAEpF,QAAA,EAAA;AAAA,UAAA,KAAA,oBACGD,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAU,mFAAA;AAAA,cACV,OAAA;AAAA,cACA,KAAA,EAAO,UAAA;AAAA,cAEN,QAAA,EAAA;AAAA;AAAA,WACL;AAAA,0BAGJC,eAAAA,CAASuB,kBAAA,CAAA,IAAA,EAAR,EAAa,MAAM,IAAA,IAAQ,CAAC,QAAA,EAAU,YAAA,EAAc,CAAC,CAAA,KAAM,CAAC,QAAA,IAAY,OAAA,CAAQ,CAAC,CAAA,EAC9E,QAAA,EAAA;AAAA,4BAAAxB,cAAAA,CAASwB,kBAAA,CAAA,OAAA,EAAR,EAAgB,OAAA,EAAO,MACpB,QAAA,kBAAAvB,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,EAAA,EAAI,OAAA;AAAA,gBACJ,IAAA,EAAK,UAAA;AAAA,gBACL,eAAA,EAAe,IAAA;AAAA,gBACf,eAAA,EAAc,SAAA;AAAA,gBACd,KAAA;AAAA,gBACA,SAAA,EAAW,CAAA,qFAAA,EAAwF,QAAA,GAAW,gCAAA,GAAmC,UAAU,CAAA,CAAA;AAAA,gBAC3J,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,gBAC1B,SAAA,EAAW,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,OAAA,IAAW,CAAC,QAAA,IAAY,OAAA,CAAQ,IAAI,CAAA;AAAA,gBAGhE,QAAA,EAAA;AAAA,kCAAAD,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACG,WAAW,CAAA,SAAA,EAAY,CAAC,KAAA,EAAO,KAAA,GAAQ,kBAAkB,EAAE,CAAA,8EAAA,CAAA;AAAA,sBAE1D,QAAA,EAAA,CAAC,SAAU,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA,mBACjDA,cAAAA,CAAC,UAAK,SAAA,EAAU,2BAAA,EAA6B,QAAA,EAAA,WAAA,EAAY,CAAA,GACzD,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,mBACnBC,eAAAA,CAAAC,mBAAAA,EAAA,EACK,QAAA,EAAA;AAAA,wBAAA,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,wBACpBF,cAAAA;AAAA,0BAAC,YAAA;AAAA,0BAAA;AAAA,4BAEG,WAAA,EAAa,MAAM,MAAA,GAAS,CAAA;AAAA,4BAC5B,KAAA,EAAO,WAAW,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,GAAA,KAAQ,GAAG,CAAA,EAAG;AAAA,2BAAA;AAAA,0BAF3C,OAAO,GAAG;AAAA,yBAItB,CAAA;AAAA,wBACA,KAAA,CAAM,MAAA,GAAS,CAAA,oBAAKA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAO,CAAA,CAAA,EAAI,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,KAAA,CAAA,EAAS;AAAA,uBAAA,EAC3E,CAAA,mBAEAA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAO,UAAA,CAAW,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,GAAA,KAAQ,KAAK,GAAG,KAAA,EAAO;AAAA;AAAA,mBAE/E;AAAA,kCAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,0CAA0C,IAAA,GAAO,YAAA,GAAe,UAAU,CAAA,CAAA,EACtF,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAQoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,SAAA,EAAU,WACpG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gBAAA,EAAiB,GAC1E,CAAA,EACJ;AAAA;AAAA;AAAA,aACJ,EACJ,CAAA;AAAA,4BAEAA,cAAAA,CAASwB,kBAAA,CAAA,MAAA,EAAR,EACG,QAAA,kBAAAvB,eAAAA;AAAA,cAASuB,kBAAA,CAAA,OAAA;AAAA,cAAR;AAAA,gBACG,KAAA,EAAM,OAAA;AAAA,gBACN,UAAA,EAAY,CAAA;AAAA,gBACZ,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,SAAS,GAAA,EAAI;AAAA,gBACpC,SAAA,EAAU,qKAAA;AAAA,gBACV,iBAAA,EAAmB,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,gBAErC,QAAA,EAAA;AAAA,kBAAA,SAAA,oBACGxB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QACX,QAAA,kBAAAA,cAAAA;AAAA,oBAAC,mBAAA;AAAA,oBAAA;AAAA,sBACG,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,sBACvB,UAAA,EAAY,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,sBAC5B,KAAA,EAAO,UAAA;AAAA,sBACP,QAAA,EAAU,cAAA;AAAA,sBACV,WAAA,EAAY;AAAA;AAAA,mBAChB,EACJ,CAAA;AAAA,kCAEJA,cAAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,WAAU,sBAAA,EAAsB,aAAA,EAAe,SAAA,EAAU,0BAAA,EAC9D,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,EAAM,wBACnBC,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBAEG,IAAA,EAAK,QAAA;AAAA,sBACL,eAAA,EAAe,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,sBAClC,eAAA,EAAe,GAAA;AAAA,sBACf,SAAA,EAAW,kKACP,aAAA,CAAc,QAAA,CAAS,KAAK,GAAG,CAAA,GAAI,gBAAgB,EACvD,CAAA,CAAA;AAAA,sBACA,OAAA,EAAS,MAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,sBAClC,YAAA,EAAc,MAAM,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AAAA,sBAC3C,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,sBAEvC,QAAA,EAAA;AAAA,wCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACV,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAK,IAAA,oBAAQD,cAAAA,CAAC,KAAA,EAAA,EAAK,eAAK,IAAA,EAAK,CAAA;AAAA,0BAC7B,IAAA,CAAK;AAAA,yBAAA,EACV,CAAA;AAAA,wBACC,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA,oBAChBA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,QACjD,QAAA,kBAAAA,cAAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACG,CAAA,EAAE,oBAAA;AAAA,4BACF,QAAQ,WAAA,KAAgB,IAAA,CAAK,MAAM,MAAA,GAASoB,gCAAA,CAAO,QAAQ,eAAe,CAAA;AAAA,4BAC1E,WAAA,EAAY,GAAA;AAAA,4BACZ,aAAA,EAAc,OAAA;AAAA,4BACd,cAAA,EAAe;AAAA;AAAA,yBACnB,EACJ;AAAA;AAAA,qBAAA;AAAA,oBAxBC,IAAA,CAAK;AAAA,mBA2BjB,CAAA,EACL;AAAA;AAAA;AAAA,aACJ,EACJ;AAAA,WAAA,EACJ;AAAA;AAAA;AAAA,KACJ;AAAA,oBACApB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAA0D,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EAC1F,CAAA;AAER;AChLA,IAAM,cAAA,GAAqD;AAAA,EACvD,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,EAC7B,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,OAAO,EAAA,EAAG;AAAA,EAC/B,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,OAAO,EAAA,EAAG;AAAA,EAC/B,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,OAAO,EAAA;AAChC,CAAA;AAEA,IAAM,kBAAA,GAAwC;AAAA,EAC1C,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe;AACnB,CAAA;AAEA,IAAM,cAAA,GAAmC;AAAA,EACrC,OAAA,EAAS,KAAA;AAAA,EACT,UAAA,kBAAYA,cAAAA,CAAAE,mBAAAA,EAAA,EAAE,CAAA;AAAA,EACd,eAAA,EAAiB,sBAAMF,cAAAA,CAAAE,qBAAA,EAAE;AAC7B,CAAA;AAGA,SAAS,cAAA,CAAe,MAAa,OAAA,EAAiC;AAClE,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,CAAC,IAAA,CAAK,OAAO,CAAA;AAClC,EAAA,MAAM,MAAe,EAAC;AACtB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAA,EAAS;AAC3C,IAAA,GAAA,CAAI,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,OAAO,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,GAAA;AACX;AAGA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAA+B;AAC1D,EAAA,uBACIF,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6EACb,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yCAAA,EACT,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,wBACVA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MAEG,SAAA,EAAU,gDAAA;AAAA,MAET,QAAA,EAAA,GAAA,CAAI;AAAA,KAAA;AAAA,IAHA,GAAA,CAAI;AAAA,GAKhB,GACL,CAAA,EACJ,CAAA;AAER;AAEA,SAAS,SAAA,CAAU;AAAA,EACf,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACJ,CAAA,EAKG;AACC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIU,eAAAA,CAA+C,EAAE,CAAA;AAEvF,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,KAAmB;AAClC,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,MACtB,GAAG,IAAA;AAAA,MACH,CAAC,MAAM,GAAG,EAAE,SAAS,CAAC,IAAA,CAAK,MAAM,CAAA,EAAG,OAAA;AAAQ,KAChD,CAAE,CAAA;AAAA,EACN,CAAA;AAEA,EAAAC,iBAAU,MAAM;AACZ,IAAA,IAAI,KAAK,MAAA,IAAU,MAAA,CAAO,KAAK,WAAW,CAAA,CAAE,WAAW,CAAA,EAAG;AACtD,MAAA,MAAM,UAAgD,EAAC;AACvD,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,GAAI,EAAE,SAAS,KAAA,EAAM;AAAA,MACxC,CAAC,CAAA;AACD,MAAA,cAAA,CAAe,OAAO,CAAA;AAAA,IAC1B;AAAA,EAEJ,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,uBACIX,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,UACZ,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,qBACZC,eAAAA,CAACqB,uBAAAA,CAAM,UAAN,EACG,QAAA,EAAA;AAAA,oBAAArB,eAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,WAAW,CAAA,4FAAA,EACP,CAAA,GAAI,CAAA,KAAM,CAAA,GACJ,eACA,mBACV,CAAA,CAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,SAAA,CAAU,2BACPD,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBACV,QAAA,kBAAAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAS,MAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAAA,cAChC,SAAA,EAAW,gEACP,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG,OAAA,GAAU,eAAe,UACnD,CAAA,CAAA;AAAA,cAEC,QAAA,EAAA,SAAA,CAAU,UAAA;AAAA,8BAEPA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,8BAA6B,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,SAAA,EAAU,iCACtF,QAAA,kBAAAA,cAAAA,CAAC,UAAK,QAAA,EAAS,SAAA,EAAU,GAAE,qNAAA,EAAsN,QAAA,EAAS,WAAU,CAAA,EACxQ;AAAA;AAAA,WAER,EACJ,CAAA;AAAA,UAEH,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAK,0BACfA,cAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEG,WAAW,CAAA,mFAAA,EACP,KAAA,KAAU,QAAQ,MAAA,GAAS,CAAA,GAAI,eAAe,EAClD,CAAA,CAAA;AAAA,cAEC,QAAA,EAAA,WAAA,IAAe,GAAA,IAAO,GAAA,CAAI,SAAA,GACrB,IAAI,SAAA,CAAU,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA,EAAG,GAAG,CAAA,GACnC,GAAA,CAAI,IAAI,OAAO;AAAA,aAAA;AAAA,YAPhB;AAAA,WASZ;AAAA;AAAA;AAAA,KACL;AAAA,IAEC,SAAA,CAAU,2BACPA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEG,SAAA,EAAW,sDACP,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG,OAAA,GAAU,mBAAmB,SACvD,CAAA,CAAA;AAAA,QAEA,QAAA,kBAAAA,eAAC,IAAA,EAAA,EAAG,OAAA,EAAS,QAAQ,MAAA,EAAQ,SAAA,EAAU,YACnC,QAAA,kBAAAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,+DACP,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG,OAAA,GAAU,mBAAmB,SACvD,CAAA,CAAA;AAAA,YAEC,QAAA,EAAA,SAAA,CAAU,kBAAkB,GAAG;AAAA;AAAA,SACpC,EACJ;AAAA,OAAA;AAAA,MAbK,SAAS,CAAC,CAAA;AAAA;AAcnB,GAAA,EAAA,EAvDa,GAAA,CAAI,GAyDzB,CACH,CAAA,EACL,CAAA;AAER;AAEA,SAAS,UAAA,CAAW;AAAA,EAChB,UAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA,GAAa;AACjB,CAAA,EAOG;AACC,EAAA,MAAM,MAAA,GAAS,QAAQ,aAAA,IAAiB,cAAA;AACxC,EAAA,MAAM,gBAAgB,MAAA,CAAO,IAAA;AAAA,IACzB,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,QAAQ,OAAA,IAAW,CAAA,CAAE,UAAU,OAAA,CAAQ;AAAA,GAC9D;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIU,eAAAA,CAAS,MAAM,aAAA,EAAe,GAAA,IAAO,MAAA,CAAO,CAAC,CAAA,EAAG,GAAG,CAAA;AACvF,EAAA,MAAM,iBAAA,GAAoB,UAAA,GAAa,aAAA,EAAe,GAAA,IAAO,UAAA,GAAa,UAAA;AAE1E,EAAAC,iBAAU,MAAM;AACZ,IAAA,IAAI,UAAA,IAAc,OAAA,CAAQ,OAAA,IAAW,IAAA,EAAM;AACvC,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,OAAA,CAAQ,OAAA,IAAW,CAAA,CAAE,KAAA,KAAU,OAAA,CAAQ,OAAO,CAAA;AAC1F,MAAA,IAAI,IAAA,EAAM,aAAA,CAAc,IAAA,CAAK,GAAG,CAAA;AAAA,IACpC;AAAA,EACJ,GAAG,CAAC,UAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,MAAM,CAAC,CAAA;AAExC,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,EAAuB,QAAA,EAAmB,OAAA,qBACtDX,cAAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAoB,OAAA,EAAkB,IAAA,EAAY,CAAA;AAGlE,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,qBAClBA,cAAAA,CAAC,SAAI,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,aAAa,CAAA,EAAG,SAAA,EAAU,SAAA,EAC1E,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,cAAA,EAAe,CAAA,EACxE,CAAA;AAGJ,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,qBACxBA,cAAAA,CAAC,SAAI,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,aAAa,CAAA,EAAG,SAAA,EAAU,SAAA,EAC1E,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,2BAAA,EAA4B,CAAA,EACrF,CAAA;AAGJ,EAAA,MAAM,aAAA,GAAgB,+BAAA;AACtB,EAAA,MAAM,YAAA,GAAgB,yBAAA;AAEtB,EAAA,uBACIC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACV,QAAA,EAAA;AAAA,IAAA,MAAA;AAAA,sBACGD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,6BAAmB,UAAA,KAAe,CAAA,GAAI,aAAA,GAAgB,YAAY,CAAA,EAAE,CAAA;AAAA,MAC9G,UAAA,KAAe,CAAA;AAAA,MACf,MAAM,aAAa,CAAC;AAAA,KACxB;AAAA,IACC,MAAA;AAAA,sBACGA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,uBAAa,UAAA,KAAe,CAAA,GAAI,aAAA,GAAgB,YAAY,CAAA,EAAE,CAAA;AAAA,MACxG,UAAA,KAAe,CAAA;AAAA,MACf,MAAM,UAAA,GAAa,CAAA,IAAK,YAAA,CAAa,aAAa,CAAC;AAAA,KACvD;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mGAAA,EACX,uBAAa,CAAA,EAClB,CAAA;AAAA,IACC,MAAA;AAAA,MACG,YAAA,CAAa,UAAA,KAAe,OAAA,GAAU,aAAA,GAAgB,YAAY,CAAA;AAAA,MAClE,UAAA,KAAe,OAAA;AAAA,MACf,MAAM,UAAA,GAAa,OAAA,IAAW,YAAA,CAAa,aAAa,CAAC;AAAA,KAC7D;AAAA,IACC,MAAA;AAAA,MACG,kBAAA,CAAmB,UAAA,KAAe,OAAA,GAAU,aAAA,GAAgB,YAAY,CAAA;AAAA,MACxE,UAAA,KAAe,OAAA;AAAA,MACf,MAAM,aAAa,OAAO;AAAA,KAC9B;AAAA,IACC,OAAA,CAAQ,8BACLA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,OAAO,EAAE,KAAA,EAAO,IAAI,QAAA,EAAU,UAAA,EAAY,QAAQ,CAAA,EAAE;AAAA,QACpD,SAAA,EAAW,KAAA;AAAA,QACX,KAAA,EAAO,MAAA;AAAA,QACP,aAAA,EAAe,KAAA;AAAA,QACf,KAAA,EAAO,iBAAA;AAAA,QACP,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAA,IAAQ,KAAM;AACjC,UAAA,MAAM,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,IAAY,OAAA,CAAQ,KAAK,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA;AAC/E,UAAA,IAAI,CAAC,UAAA,EAAY,aAAA,CAAc,GAAG,CAAA;AAClC,UAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,GAAG,CAAA;AAC5C,UAAA,eAAA,CAAgB,GAAA,EAAK,KAAA,IAAS,GAAA,EAAK,KAAA,IAAS,GAAG,CAAA;AAAA,QACnD;AAAA;AAAA;AACJ,GAAA,EAER,CAAA;AAER;AAgBe,SAAR,KAAA,CAAuB;AAAA,EAC1B,UAAU,EAAC;AAAA,EACX,OAAO,EAAC;AAAA,EACR,UAAA,GAAa,kBAAA;AAAA,EACb,SAAA,GAAY,cAAA;AAAA,EACZ,SAAA,GAAY,IAAA;AAAA,EACZ,MAAA,GAAS,IAAA;AAAA,EACT,MAAA,GAAS;AACb,CAAA,EAAe;AACX,EAAA,MAAM,SAAA,GAAYkB,cAAyB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIR,gBAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAAA;AAAA,IAC1B,OAAO,UAAA,CAAW,OAAA,KAAY,QAAA,GAAW,WAAW,OAAA,GAAU;AAAA,GAClE;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,gBAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAAA,CAAkB,EAAE,CAAA;AAEpD,EAAA,MAAM,YAAA,GAAe,CAAC,EAAE,UAAA,CAAW,WAAW,UAAA,CAAW,UAAA,CAAA;AAEzD,EAAA,MAAM,QAAA,GAAWP,eAAQ,MAAM;AAC3B,IAAA,IAAI,YAAA,IAAgB,OAAO,UAAA,CAAW,OAAA,KAAY,QAAA,SAAiB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAA,CAAW,OAAO,CAAA;AACjG,IAAA,IAAI,YAAA,IAAgB,OAAO,UAAA,CAAW,UAAA,KAAe,QAAA;AACjD,MAAA,OAAO,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,KAAK,UAAA,CAAW,UAAA,GAAa,OAAO,CAAA,GAAI,CAAC,CAAA;AACrE,IAAA,OAAO,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,CAAA;AAAA,EACnD,CAAA,EAAG,CAAC,YAAA,EAAc,UAAA,CAAW,OAAA,EAAS,WAAW,UAAA,EAAY,OAAA,EAAS,QAAA,CAAS,MAAM,CAAC,CAAA;AAEtF,EAAA,MAAM,eAAA,GAAkBA,eAAQ,MAAM;AAClC,IAAA,IAAI,cAAc,OAAO,IAAA;AACzB,IAAA,OAAO,SAAS,MAAA,GAAS,QAAA,CAAS,UAAU,CAAA,IAAK,KAAK,EAAC;AAAA,EAC3D,GAAG,CAAC,YAAA,EAAc,IAAA,EAAM,QAAA,EAAU,UAAU,CAAC,CAAA;AAE7C,EAAAQ,iBAAU,MAAM;AACZ,IAAA,IAAI,WAAW,OAAA,IAAW,CAAC,cAAc,UAAA,CAAW,UAAA,CAAW,WAAW,EAAE,CAAA;AAAA,EAChF,CAAA,EAAG,CAAC,UAAA,EAAY,YAAY,CAAC,CAAA;AAE7B,EAAAA,iBAAU,MAAM;AACZ,IAAA,IAAI,gBAAgB,OAAO,UAAA,CAAW,YAAY,QAAA,EAAU,UAAA,CAAW,WAAW,OAAO,CAAA;AAAA,EAC7F,CAAA,EAAG,CAAC,YAAA,EAAc,UAAA,CAAW,OAAO,CAAC,CAAA;AAErC,EAAAA,iBAAU,MAAM;AACZ,IAAA,IAAI,YAAA,EAAc;AAClB,IAAA,WAAA,CAAY,eAAe,IAAA,EAAM,UAAA,CAAW,OAAA,GAAU,OAAA,GAAU,IAAI,CAAC,CAAA;AAAA,EACzE,GAAG,CAAC,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,YAAY,CAAC,CAAA;AAE5C,EAAAA,iBAAU,MAAM;AACZ,IAAA,IAAI,gBAAgB,OAAO,UAAA,CAAW,IAAA,KAAS,QAAA,IAAY,WAAW,IAAA,IAAQ,CAAA;AAC1E,MAAA,aAAA,CAAc,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,YAAA,EAAc,UAAA,CAAW,IAAI,CAAC,CAAA;AAElC,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAA2C;AAC/D,IAAA,MAAM,IAAA,GAAO,EAAE,MAAA,CAAO,KAAA;AACtB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI,YAAA,EAAc;AAClB,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA;AAAA,MAAO,CAAC,GAAA,KAC1B,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA;AAAA,QACf,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,IAAA,CAAK,aAAa;AAAA;AACrE,KACJ;AACA,IAAA,WAAA,CAAY,eAAe,QAAA,EAAU,UAAA,CAAW,OAAA,GAAU,OAAA,GAAU,IAAI,CAAC,CAAA;AACzE,IAAA,aAAA,CAAc,CAAC,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,YAAA,KAAyB;AACjD,IAAA,UAAA,CAAW,YAAY,CAAA;AACvB,IAAA,aAAA,CAAc,CAAC,CAAA;AACf,IAAA,IAAI,YAAA,EAAc,UAAA,CAAW,eAAA,GAAkB,YAAY,CAAA;AAAA,EAC/D,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAoB;AAC1C,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,UAAA,CAAW,YAAA,GAAe,UAAU,CAAC,CAAA;AACrC,MAAA;AAAA,IACJ;AACA,IAAA,aAAA,CAAc,OAAO,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACV,QAAA,EAAA;AAAA,MAAA,SAAA,oBACGD,cAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACG,GAAA,EAAK,SAAA;AAAA,UACL,KAAA,EAAO,UAAA;AAAA,UACP,QAAA,EAAU,cAAA;AAAA,UACV,WAAA,EAAY;AAAA;AAAA,OAChB;AAAA,MAEH,UAAA,CAAW,2BACRA,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACG,UAAA;AAAA,UACA,YAAA,EAAc,gBAAA;AAAA,UACd,OAAA,EAAS,QAAA;AAAA,UACT,eAAA,EAAiB,kBAAA;AAAA,UACjB,OAAA,EAAS,UAAA;AAAA,UACT,UAAA,EAAY;AAAA;AAAA;AAChB,KAAA,EAER,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,oBAEbA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BACX,QAAA,kBAAAC,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,sBAC/BA,cAAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAkB,IAAA,EAAM,iBAAiB,SAAA,EAAsB;AAAA,KAAA,EAC9E,CAAA,EACJ,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,MAAA,EAAO;AAAA,GAAA,EACjB,CAAA;AAER;ACnYe,SAAR,YAA6B,EAAE,OAAA,EAAS,QAAA,EAAU,KAAA,GAAQ,oBAAmB,EAAqB;AACrG,EAAA,MAAM,KAAKyB,YAAA,EAAM;AAEjB,EAAA,uBACIzB,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAS,EAAA,EAAI,SAAA,EAAU,sDAC1B,QAAA,kBAAAA,cAAAA;AAAA,IAAiB0B,0BAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACG,EAAA;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,QAAQ,EAAE,OAAA,EAAS,CAAA,EAAE,EAAG,CAAA;AAAA,MAC3D,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW;AAAA,QACP,yDAAA;AAAA,QACA,gCAAA;AAAA,QACA,wDAAA;AAAA,QACA;AAAA,OACJ,CAAE,KAAK,GAAG,CAAA;AAAA,MAEV,QAAA,kBAAA1B,cAAAA;AAAA,QAAiB0B,0BAAA,CAAA,KAAA;AAAA,QAAhB;AAAA,UACG,SAAA,EAAW;AAAA,YACP,0DAAA;AAAA,YACA,mCAAA;AAAA,YACA,yCAAA;AAAA,YACA,0CAAA;AAAA;AAAA,YAEA,UAAU,oBAAA,GAAuB;AAAA,WACrC,CAAE,KAAK,GAAG,CAAA;AAAA,UAGT,QAAA,EAAA,OAAA;AAAA;AAAA,4BAEG1B,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,SAAA,EAAU,0BAAA,EAA2B,aAAA,EAAY,QAC1F,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8QAA6Q,CAAA,EACzR;AAAA;AAAA;AAAA,4BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,SAAA,EAAU,6BAAA,EAA8B,aAAA,EAAY,QAC7F,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qqBAAoqB,CAAA,EAChrB;AAAA;AAAA;AAAA;AAER;AAAA,GACJ,EACJ,CAAA;AAER;ACfe,SAAR,MAAA,CAAwB;AAAA,EAC3B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS,EAAA;AAAA,EACT,SAAA,GAAY;AAChB,CAAA,EAAgB;AACZ,EAAA,uBACIC,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW;AAAA,QACP,sBAAA;AAAA,QACA,yCAAA;AAAA,QACA,mCAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACJ,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACH,MAAA;AAAA;AAAA;AAAA,QAGA,CAAC,iBAA2B,GAAG,CAAA,EAAG,MAAM,CAAA,EAAA;AAAA,OAC5C;AAAA,MAGC,QAAA,EAAA;AAAA,QAAA,KAAA,KAAU,yBACPD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACV,QAAA,EAAA,KAAA,EACL,CAAA;AAAA;AAAA,0BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAY,MAAA,EAAO,WAAU,mBAAA,EAAoB;AAAA,SAAA;AAAA,QAIzD,WAAW,MAAA,oBACRA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDACV,QAAA,EAAA,MAAA,EACL,CAAA;AAAA,QAIH,YAAY,MAAA,oBACTA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACV,QAAA,EAAA,OAAA,EACL;AAAA;AAAA;AAAA,GAER;AAER;AC3DA,SAAS,OAAA,CAAQ;AAAA,EACb,IAAA;AAAA,EACA;AACJ,CAAA,EAGG;AACC,EAAA,MAAM,sBACFC,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,QAAA;AAAA,MACL,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAA,EAAW;AAAA,QACP,4DAAA;AAAA,QACA,4CAAA;AAAA,QACA,4FAAA;AAAA,QACA,IAAA,CAAK,WACC,0BAAA,GACA;AAAA,OACV,CAAE,KAAK,GAAG,CAAA;AAAA,MAGV,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EACX,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,IAAA;AAAA,UACL,KAAK,KAAA,KAAU,MAAA,IAAa,IAAA,CAAK,KAAA,GAAQ,qBACtCD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mJACX,QAAA,EAAA,IAAA,CAAK,KAAA,GAAQ,EAAA,GAAK,KAAA,GAAQ,KAAK,KAAA,EACpC;AAAA,SAAA,EAER,CAAA;AAAA,QAGC,8BACGA,cAAAA;AAAA,UAACO,mBAAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACG,OAAA,EAAS,KAAA;AAAA,YACT,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,YACtB,SAAA,EAAU,8BAAA;AAAA,YAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACV;AAAA,QAIH,KAAK,QAAA,oBACFP,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4DAAA,EAA6D;AAAA;AAAA;AAAA,GAErF;AAGJ,EAAA,IAAI,YAAY,OAAO,GAAA;AAEvB,EAAA,uBACIA,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,OAAO,SAAA,EAAU,OAAA,EAAQ,aAAA,EAAe,GAAA,EACxD,QAAA,EAAA,GAAA,EACL,CAAA;AAER;AAmBe,SAAR,OAAA,CAAyB;AAAA,EAC5B,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA,GAAiB,GAAA;AAAA,EACjB,cAAA,GAAiB,EAAA;AAAA,EACjB;AACJ,CAAA,EAAiB;AACb,EAAA,uBACIA,cAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC5B,QAAA,kBAAAC,eAAAA;AAAA,IAACM,mBAAAA,CAAO,KAAA;AAAA,IAAP;AAAA,MACG,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS,EAAE,KAAA,EAAO,UAAA,GAAa,gBAAgB,cAAA,EAAe;AAAA,MAC9D,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,MACrE,SAAA,EAAU,+FAAA;AAAA,MAGV,QAAA,EAAA;AAAA,wBAAAN,eAAAA,CAAC,SAAI,SAAA,EAAW;AAAA,UACZ,6DAAA;AAAA,UACA,aAAa,sBAAA,GAAyB;AAAA,SAC1C,CAAE,IAAA,CAAK,GAAG,CAAA,EACL,QAAA,EAAA;AAAA,UAAA,UAAA,oBACGD,cAAAA;AAAA,YAACO,mBAAAA,CAAO,IAAA;AAAA,YAAP;AAAA,cACG,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,cACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,cACtB,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,cAC1B,SAAA,EAAU,mFAAA;AAAA,cACb,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BAEJP,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,UAAA,GAAa,eAAA,GAAkB,aAAA,EAAe,SAAA,EAAU,OAAA,EAAQ,aAAA,EAAe,GAAA,EAC3F,QAAA,kBAAAA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,QAAA;AAAA,cACT,YAAA,EAAY,aAAa,kBAAA,GAAqB,gBAAA;AAAA,cAC9C,SAAA,EAAU,wOAAA;AAAA,cAEV,QAAA,kBAAAA,cAAAA;AAAA,gBAACO,mBAAAA,CAAO,GAAA;AAAA,gBAAP;AAAA,kBACG,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,MAAA,EAAO,cAAA;AAAA,kBACP,WAAA,EAAY,KAAA;AAAA,kBACZ,aAAA,EAAc,OAAA;AAAA,kBACd,cAAA,EAAe,OAAA;AAAA,kBACf,SAAA,EAAU,SAAA;AAAA,kBACV,OAAA,EAAS,EAAE,MAAA,EAAQ,UAAA,GAAa,IAAI,GAAA,EAAI;AAAA,kBACxC,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,IAAA,EAAK;AAAA,kBAE5C,QAAA,kBAAAP,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB;AAAA;AAAA;AAC7B;AAAA,WACJ,EACJ;AAAA,SAAA,EACJ,CAAA;AAAA,wBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACV,mBAAS,GAAA,CAAI,CAAC,OAAA,EAAS,EAAA,qBACpBC,eAAAA,CAAC,KAAA,EAAA,EAAsB,WAAW,EAAA,GAAK,CAAA,GAAI,SAAS,EAAA,EAE/C,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,KAAA,IAAS,8BACdD,cAAAA;AAAA,YAACO,mBAAAA,CAAO,CAAA;AAAA,YAAP;AAAA,cACG,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,cACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,cACtB,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,cAC1B,SAAA,EAAU,mGAAA;AAAA,cAET,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,WACb;AAAA,UAEH,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAChBP,cAAAA,CAAC,OAAA,EAAA,EAAuB,IAAA,EAAY,UAAA,EAAA,EAAtB,IAAA,CAAK,GAAyC,CAC/D;AAAA,SAAA,EAAA,EAdK,OAAA,CAAQ,GAelB,CACH,CAAA,EACL,CAAA;AAAA,QAGC,MAAA,oBACGA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW;AAAA,UACZ,6DAAA;AAAA,UACA,aAAa,YAAA,GAAe;AAAA,SAChC,CAAE,IAAA,CAAK,GAAG,CAAA,EACL,QAAA,EAAA,MAAA,EACL;AAAA;AAAA;AAAA,GAER,EACJ,CAAA;AAER;AChJe,SAAR,QAAA,CAA0B;AAAA,EAC7B,MAAA;AAAA,EACA,kBAAkB,EAAC;AAAA,EACnB,oBAAA,GAAwB,GAAA;AAAA,EACxB,qBAAA,GAAwB,EAAA;AAAA,EACxB,sBAAA,GAAyB,KAAA;AAAA,EACzB,aAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AAChB,CAAA,EAAkB;AACd,EAAA,MAAM,CAAC,QAAA,EAAY,WAAW,CAAA,GAAMU,gBAAS,sBAAsB,CAAA;AACnE,EAAA,MAAM,CAAC,QAAA,EAAY,WAAW,CAAA,GAAMA,gBAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAGlD,EAAAC,iBAAU,MAAM;AACZ,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,oBAAoB,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAA4C,WAAA,CAAY,EAAE,OAAO,CAAA;AACjF,IAAA,MAAA,CAAO,EAAE,CAAA;AACT,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,MAA0C,CAAA;AACxE,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,MAA0C,CAAA;AAAA,EAC5F,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,iBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,QAAA,EAAU,aAAA,CAAc,KAAK,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,UAAA,GAAa,gBAAgB,MAAA,GAAS,CAAA;AAE5C,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,qCAAA,EAAwC,SAAS,CAAA,CAAA,EAG5D,QAAA,EAAA;AAAA,IAAA,MAAA,oBACGA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAEV,QAAA,EAAA;AAAA,MAAA,UAAA,oBACGD,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACG,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAW;AAAA,YACP,4EAAA;AAAA,YACA,wBAAA;AAAA,YACA,yEAAA;AAAA,YACA,gCAAA;AAAA,YACA;AAAA,WACJ,CAAE,KAAK,GAAG,CAAA;AAAA,UACV,SAAS,MAAM,aAAA,CAAc,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,UACtC,YAAA,EAAY,aAAa,kBAAA,GAAqB,iBAAA;AAAA,UAC9C,eAAA,EAAe,UAAA;AAAA,UAEd,QAAA,EAAA,UAAA;AAAA;AAAA,4BAEGA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAAI,aAAA,EAAc,OAAA,EAAQ,aAAA,EAAY,MAAA,EAChI,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB,CAAA,EACnC;AAAA;AAAA;AAAA,4BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAAI,aAAA,EAAc,OAAA,EAAQ,aAAA,EAAY,MAAA,EAChI,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yBAAA,EAA0B,CAAA,EACtC;AAAA;AAAA;AAAA,OAER;AAAA,sBAGJA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACV,QAAA,EAAA,MAAA,EACL;AAAA,KAAA,EACJ,CAAA;AAAA,oBAIJC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAGV,QAAA,EAAA;AAAA,MAAA,UAAA,IAAc,CAAC,4BACZD,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACG,QAAA,EAAU,eAAA;AAAA,UACV,UAAA,EAAY,QAAA;AAAA,UACZ,UAAU,MAAM,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,UACrC,aAAA,EAAe,oBAAA;AAAA,UACf,cAAA,EAAgB,qBAAA;AAAA,UAChB,MAAA,EAAQ;AAAA;AAAA,OACZ;AAAA,MAIH,UAAA,IAAc,QAAA,oBACXC,eAAAA,CAAAC,qBAAA,EAEI,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAACM,4BAAAA,EAAA,EACI,QAAA,EAAA,UAAA,oBACGN,cAAAA;AAAA,UAACO,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,+CAAA;AAAA,YACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,YACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,YACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,YACnB,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,SAAA,EAAU;AAAA,YAC7C,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,YAClC,aAAA,EAAY;AAAA;AAAA,SAChB,EAER,CAAA;AAAA,wBAGAP,cAAAA,CAACM,4BAAAA,EAAA,EACI,wCACGN,cAAAA;AAAA,UAACO,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,0CAAA;AAAA,YACV,OAAA,EAAS,EAAE,CAAA,EAAG,OAAA,EAAQ;AAAA,YACtB,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAE;AAAA,YAChB,IAAA,EAAM,EAAE,CAAA,EAAG,OAAA,EAAQ;AAAA,YACnB,UAAA,EAAY;AAAA,cACR,IAAA,EAAM,OAAA;AAAA,cACN,QAAA,EAAU,IAAA;AAAA,cACV,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,KAAK,CAAC;AAAA;AAAA,aAC1B;AAAA,YAEA,QAAA,kBAAAP,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACG,QAAA,EAAU,eAAA;AAAA,gBACV,UAAA,EAAY,IAAA;AAAA,gBACZ,QAAA,EAAU,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,gBACnC,aAAA,EAAe,oBAAA;AAAA,gBACf,cAAA,EAAgB,qBAAA;AAAA,gBAChB,MAAA,EAAQ;AAAA;AAAA;AACZ;AAAA,SACJ,EAER;AAAA,OAAA,EACJ,CAAA;AAAA,sBAIJA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EACZ,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACV,QAAA,EACL,CAAA,EACJ;AAAA,KAAA,EACJ;AAAA,GAAA,EACJ,CAAA;AAER;AC5EA,SAAS,GAAG,CAAA,EAA4B;AACpC,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA,GAAO,CAAA;AAC9C;AAEA,SAAS,IAAI,CAAA,EAAoD;AAC7D,EAAA,OAAO,CAAA,IAAK,IAAA,GAAO,MAAA,GAAY,MAAA,CAAO,CAAC,CAAA;AAC3C;AAEA,SAAS,UAAU,KAAA,EAA6C;AAC5D,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,MAA8B,EAAC;AAErC,EAAA,IAAI,MAAM,MAAA,EAAQ;AACd,IAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;AAC/C,MAAA,IAAI,KAAK,IAAA,EAAM,GAAA,CAAI,CAAA,QAAA,EAAW,CAAC,EAAE,CAAA,GAAI,CAAA;AAAA,IACzC;AAAA,EACJ;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AACd,IAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;AAC/C,MAAA,IAAI,CAAA,IAAK,MAAM,GAAA,CAAI,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE,CAAA,GAAI,GAAG,CAAC,CAAA;AAAA,IAC9C;AAAA,EACJ;AACA,EAAA,IAAI,MAAM,OAAA,EAAS;AACf,IAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAG;AAChD,MAAA,IAAI,KAAK,IAAA,EAAM,GAAA,CAAI,CAAA,SAAA,EAAY,CAAC,EAAE,CAAA,GAAI,CAAA;AAAA,IAC1C;AAAA,EACJ;AACA,EAAA,IAAI,MAAM,UAAA,EAAY;AAClB,IAAA,MAAM,IAAI,KAAA,CAAM,UAAA;AAChB,IAAA,MAAM,GAAA,GAA+C;AAAA,MACjD,CAAC,oBAAA,EAA4B,CAAA,CAAE,UAAU,CAAA;AAAA,MACzC,CAAC,gBAAA,EAA4B,CAAA,CAAE,UAAU,CAAA;AAAA,MACzC,CAAC,gBAAA,EAA4B,CAAA,CAAE,UAAU,CAAA;AAAA,MACzC,CAAC,kBAAA,EAA4B,CAAA,CAAE,YAAY,CAAA;AAAA,MAC3C,CAAC,gBAAA,EAA4B,CAAA,CAAE,UAAU,CAAA;AAAA,MACzC,CAAC,gBAAA,EAA4B,CAAA,CAAE,UAAU,CAAA;AAAA,MACzC,CAAC,iBAAA,EAA4B,CAAA,CAAE,WAAW,CAAA;AAAA,MAC1C,CAAC,iBAAA,EAA4B,CAAA,CAAE,WAAW,CAAA;AAAA,MAC1C,CAAC,sBAAA,EAA4B,CAAA,CAAE,gBAAgB,CAAA;AAAA,MAC/C,CAAC,sBAAA,EAA4B,CAAA,CAAE,gBAAgB,CAAA;AAAA,MAC/C,CAAC,wBAAA,EAA4B,CAAA,CAAE,kBAAkB,CAAA;AAAA,MACjD,CAAC,oBAAA,EAA4B,CAAA,CAAE,cAAc,CAAA;AAAA,MAC7C,CAAC,qBAAA,EAA4B,CAAA,CAAE,eAAe,CAAA;AAAA,MAC9C,CAAC,oBAAA,EAA4B,CAAA,CAAE,cAAc,CAAA;AAAA,MAC7C,CAAC,sBAAA,EAA4B,CAAA,CAAE,gBAAgB,CAAA;AAAA,MAC/C,CAAC,uBAAA,EAA4B,CAAA,CAAE,iBAAiB;AAAA,KACpD;AACA,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,GAAG,CAAA,IAAK,GAAA,EAAK;AAC7B,MAAA,MAAM,CAAA,GAAI,IAAI,GAAG,CAAA;AACjB,MAAA,IAAI,CAAA,IAAK,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA,GAAI,CAAA;AAAA,IACjC;AAAA,EACJ;AACA,EAAA,IAAI,MAAM,OAAA,EAAS;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,OAAA;AAChB,IAAA,MAAM,GAAA,GAA+C;AAAA,MACjD,CAAC,qBAAA,EAAuB,CAAA,CAAE,SAAS,CAAA;AAAA,MACnC,CAAC,qBAAA,EAAuB,CAAA,CAAE,SAAS,CAAA;AAAA,MACnC,CAAC,qBAAA,EAAuB,CAAA,CAAE,SAAS,CAAA;AAAA,MACnC,CAAC,qBAAA,EAAuB,CAAA,CAAE,SAAS,CAAA;AAAA,MACnC,CAAC,iBAAA,EAAuB,CAAA,CAAE,MAAM;AAAA,KACpC;AACA,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,GAAG,CAAA,IAAK,GAAA,EAAK;AAC7B,MAAA,IAAI,OAAO,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA,GAAI,GAAG,GAAG,CAAA;AAAA,IACzC;AAAA,EACJ;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,IAAA,MAAM,GAAA,GAAsC;AAAA,MACxC,CAAC,iBAAA,EAAqB,CAAA,CAAE,YAAY,CAAA;AAAA,MACpC,CAAC,mBAAA,EAAqB,CAAA,CAAE,cAAc,CAAA;AAAA,MACtC,CAAC,iBAAA,EAAqB,CAAA,CAAE,YAAY,CAAA;AAAA,MACpC,CAAC,mBAAA,EAAqB,CAAA,CAAE,cAAc;AAAA,KAC1C;AACA,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,GAAG,CAAA,IAAK,GAAA,EAAK;AAC7B,MAAA,IAAI,GAAA,IAAO,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA,GAAI,GAAA;AAAA,IACnC;AAAA,EACJ;AAEA,EAAA,OAAO,GAAA;AACX;AAEA,SAAS,kBAAkB2B,KAAAA,EAAsC;AAC7D,EAAA,OAAO,OAAO,OAAA,CAAQA,KAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AACvE;AAkCe,SAAR,aAAA,CAA+B;AAAA,EAClC,KAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA,GAAc,MAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ;AACJ,CAAA,EAAuB;AACnB,EAAA,MAAM,KAAWL,uBAAAA,CAAM,KAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC/C,EAAA,MAAM,UAAA,GAAa,UAAU,EAAE,CAAA,CAAA;AAE/B,EAAA,MAAM,MAAA,GAASJ,cAAuB,IAAI,CAAA;AAG1C,EAAAP,iBAAU,MAAM;AACZ,IAAA,MAAM,KAAK,MAAA,CAAO,OAAA;AAClB,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,IAAI,gBAAgB,MAAA,EAAQ;AAE5B,IAAA,IAAI,gBAAgB,QAAA,EAAU;AAC1B,MAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA;AAC3D,MAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAA4C;AACvD,QAAA,EAAA,CAAG,SAAA,CAAU,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAE,OAAO,CAAA;AAAA,MACzC,CAAA;AACA,MAAA,KAAA,CAAM,EAAE,CAAA;AACR,MAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,KAAK,CAAA;AACnC,MAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,KAAK,CAAA;AAAA,IACvD;AAEA,IAAA,EAAA,CAAG,SAAA,CAAU,MAAA,CAAO,MAAA,EAAQ,WAAA,KAAgB,MAAM,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAA,MAAM,SAAA,GAAYR,eAAQ,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGzD,EAAA,MAAM,UAAA,GAAaA,eAAQ,MAAM;AAC7B,IAAA,IAAI,CAAC,WAAW,OAAO,EAAA;AACvB,IAAA,MAAM,KAAA,GAAQ,UAAU,SAAS,CAAA;AACjC,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,QAAQ,OAAO,EAAA;AACvC,IAAA,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,QAAA,EAAW,iBAAA,CAAkB,KAAK,CAAC,CAAA,EAAA,CAAA;AAAA,EAG5D,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,uBACIF,eAAAA,CAAAC,mBAAAA,EAAA,EACK,QAAA,EAAA;AAAA,IAAA,UAAA,oBACGF,cAAAA,CAAC,OAAA,EAAA,EAAM,yBAAyB,EAAE,MAAA,EAAQ,YAAW,EAAG,CAAA;AAAA,oBAE5DA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,MAAA;AAAA,QACL,WAAW,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,GAAG,IAAA,EAAK;AAAA,QAC7C,KAAA,EAAO,EAAE,GAAI,SAAA,EAAmC,GAAG,KAAA,EAAM;AAAA,QAExD;AAAA;AAAA;AACL,GAAA,EACJ,CAAA;AAER;AC/RA,IAAM,OAAA,GAAU;AAAA,EACZ,4BAAA;AAAA,EACA,uBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACJ,CAAA,CAAE,KAAK,GAAG,CAAA;AAmBH,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,MAAA,GAAS,IAAI,MAAA,EAAQ,SAAA,GAAY,EAAA,EAAI,KAAA,EAAM,EAAqB;AACjG,EAAA,uBACIA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,CAAA,MAAA,EAAS,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MACxC,KAAA,EAAO;AAAA,QACH,OAAc,KAAA,IAAS,MAAA;AAAA,QACvB,MAAA;AAAA,QACA,cAAc,MAAA,IAAU,kBAAA;AAAA,QACxB,GAAG;AAAA;AACP;AAAA,GACJ;AAER;AAsBO,SAAS,YAAA,CAAa;AAAA,EACzB,KAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB,EAAA;AAAA,EAChB,UAAA,GAAc,EAAA;AAAA,EACd,GAAA,GAAc,CAAA;AAAA,EACd,SAAA,GAAc,EAAA;AAAA,EACd;AACJ,CAAA,EAAsB;AAClB,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,iBAAiB,SAAS,CAAA,CAAA;AAAA,MACrC,KAAA,EAAO,EAAE,GAAA,EAAK,GAAG,KAAA,EAAM;AAAA,MAEtB,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACzC,QAAA,MAAM,MAAA,GAAU,MAAM,KAAA,GAAQ,CAAA;AAC9B,QAAA,MAAM,QAAU,MAAA,IAAU,KAAA,GAAQ,CAAA,GAAI,CAAA,EAAG,aAAa,CAAA,CAAA,CAAA,GAAM,MAAA;AAC5D,QAAA,uBACIA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEG,SAAA,EAAW,SAAS,OAAO,CAAA,CAAA;AAAA,YAC3B,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAO,cAAc,kBAAA;AAAmB,WAAA;AAAA,UAFhE;AAAA,SAGT;AAAA,MAER,CAAC;AAAA;AAAA,GACL;AAER;AAeO,SAAS,eAAe,EAAE,IAAA,GAAO,IAAI,SAAA,GAAY,EAAA,EAAI,OAAM,EAAwB;AACtF,EAAA,uBACIA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,CAAA,oBAAA,EAAuB,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MACtD,KAAA,EAAO;AAAA,QACH,KAAA,EAAQ,IAAA;AAAA,QACR,MAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,GAAG;AAAA;AACP;AAAA,GACJ;AAER;AAoBO,SAAS,YAAA,CAAa,EAAE,SAAA,GAAY,IAAA,EAAM,QAAQ,CAAA,EAAG,SAAA,GAAY,EAAA,EAAI,KAAA,EAAM,EAAsB;AACpG,EAAA,uBACIC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,kDAAkD,SAAS,CAAA,CAAA;AAAA,MACtE,KAAA;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACV,QAAA,EAAA;AAAA,UAAA,SAAA,oBAAaD,cAAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,0BACxCC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACX,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAQ,EAAA,EAAI,OAAM,KAAA,EAAM,CAAA;AAAA,4BACrCA,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAQ,EAAA,EAAI,OAAM,KAAA,EAAM;AAAA,WAAA,EACzC;AAAA,SAAA,EACJ,CAAA;AAAA,wBAGAA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,eAAe,EAAA,EAAI,CAAA;AAAA,wBAG/CC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACX,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAQ,EAAA,EAAI,OAAO,EAAA,EAAI,CAAA;AAAA,0BACpCA,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAQ,EAAA,EAAI,OAAO,EAAA,EAAI;AAAA,SAAA,EACxC;AAAA;AAAA;AAAA,GACJ;AAER;ACvJe,SAAR,SAAA,CAA2B;AAAA,EAC9B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA;AACJ,CAAA,EAAmB;AACf,EAAA,uBACIC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,CAAA,KAAA,EAAQ,MAAA,KAAW,UAAA,GAAa,aAAa,6BAA6B,CAAA,CAAA;AAAA,QACrF,KAAA,EAAO,SAAS,EAAC;AAAA,QAEjB,QAAA,EAAA;AAAA,0BAAAD,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,IAAc,MAAA,EAAU;AAAA,cACxC,SAAA,EAAW,CAAA,mCAAA,EAAsC,CAAC,UAAA,IAAc,oCAAoC,CAAA,CAAA;AAAA,cACpG,OAAA;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACL;AAAA,0BACAA,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,YAAA,EAAa,KAAA;AAAA,cACb,QAAA;AAAA,cACA,KAAA;AAAA,cACA,QAAA;AAAA,cACA,MAAA;AAAA,cACA,IAAA,EAAK,MAAA;AAAA,cACL,IAAA;AAAA,cACA,EAAA,EAAI,OAAA;AAAA,cACJ,SAAA,EAAW,CAAA,EAAG,YAAA,KAAiB,MAAA,GAAY,wBAAwB,EAAE,CAAA,sKAAA,CAAA;AAAA,cACrE,KAAA,EAAO,cAAc,EAAC;AAAA,cACtB,aAAa,WAAA,IAAe;AAAA;AAAA;AAChC;AAAA;AAAA,KACJ;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DACV,QAAA,EAAA,YAAA,EACL;AAAA,GAAA,EACJ,CAAA;AAER;AC5Ce,SAAR,WAAA,CAA6B;AAAA,EAChC,IAAA,GAAO,CAAA;AAAA,EACP,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT,GAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA,GAAW;AACf,CAAA,EAAqB;AACjB,EAAA,MAAM,cAAc,MAAM;AACtB,IAAA,IAAI,WAAW,KAAA,GAAQ,UAAA,CAAW,KAAK,CAAA,GAAI,OAAO,CAAA,GAAI,IAAA;AACtD,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,QAAA,GAAW,GAAA,EAAK;AACzC,IAAA,QAAA,GAAW,EAAE,QAAQ,EAAE,KAAA,EAAO,UAAU,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACtB,IAAA,IAAI,WAAW,KAAA,GAAQ,UAAA,CAAW,KAAK,CAAA,GAAI,OAAO,CAAA,GAAI,IAAA;AACtD,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,QAAA,GAAW,GAAA,EAAK;AACzC,IAAA,QAAA,GAAW,EAAE,QAAQ,EAAE,KAAA,EAAO,UAAU,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,uBACIC,gBAAC,KAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACX,QAAA,kBAAAC,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,CAAA,KAAA,EAAQ,MAAA,KAAW,UAAA,GAAa,aAAa,6BAA6B,CAAA,CAAA;AAAA,QAErF,QAAA,EAAA;AAAA,0BAAAD,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAU,4EAAA;AAAA,cACV,KAAA,EAAO,UAAA;AAAA,cACP,OAAA;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACL;AAAA,0BACAC,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,KAAA;AAAA,cACA,SAAA,EAAW,CAAA,EAAG,QAAA,GAAW,aAAA,GAAgB,UAAU,CAAA,6CAAA,CAAA;AAAA,cAEnD,QAAA,EAAA;AAAA,gCAAAD,cAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACG,GAAA;AAAA,oBACA,GAAA;AAAA,oBACA,YAAA,EAAa,KAAA;AAAA,oBACb,QAAA;AAAA,oBACA,IAAA;AAAA,oBACA,EAAA,EAAI,OAAA;AAAA,oBACJ,IAAA;AAAA,oBACA,KAAA;AAAA,oBACA,QAAA;AAAA,oBACA,IAAA,EAAK,QAAA;AAAA,oBACL,SAAA,EAAU,qIAAA;AAAA,oBACV,KAAA,EAAO,cAAc,EAAC;AAAA,oBACtB,aAAa,WAAA,IAAe,EAAA;AAAA,oBAC5B;AAAA;AAAA,iBACJ;AAAA,gCACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACX,QAAA,EAAA;AAAA,kCAAAD,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACG,OAAA,EAAS,WAAA;AAAA,sBACT,SAAA,EAAU,+EAAA;AAAA,sBAGV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAQoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,aAAa,CAAA,EAAG,SAAA,EAAU,SAAA,EACpG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gBAAA,EAAiB,CAAA,EAC1E;AAAA;AAAA,mBACJ;AAAA,kCACAA,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACG,OAAA,EAAS,WAAA;AAAA,sBACT,SAAA,EAAU,oEAAA;AAAA,sBAGV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAQoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,aAAa,CAAA,EAAG,SAAA,EAAU,SAAA,EACpG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gBAAA,EAAiB,CAAA,EAC1E;AAAA;AAAA;AACJ,iBAAA,EACJ;AAAA;AAAA;AAAA;AACJ;AAAA;AAAA,KACJ,EACJ,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAkC,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EAClE,CAAA;AAER;AC5Fe,SAAR,QAAA,CAA0B;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA,EAAkB;AACd,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIU,gBAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,SAAA,IAAaU,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA;AAEzD,EAAA,uBACInB,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAqD,KAAA,EAAO,KAAA,IAAS,EAAC,EACjF,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,SAAI,SAAA,EAAW,CAAA,KAAA,EAAQ,WAAW,UAAA,GAAa,UAAA,GAAa,6BAA6B,CAAA,CAAA,EACtF,QAAA,EAAA;AAAA,sBAAAD,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACG,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,IAAc,MAAA,EAAU;AAAA,UACxC,SAAA,EAAW,CAAA,mCAAA,EAAsC,CAAC,UAAA,IAAc,oCAAoC,CAAA,CAAA;AAAA,UACpG,OAAA;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA,OACL;AAAA,sBACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACX,QAAA,EAAA;AAAA,wBAAAD,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACG,YAAA,EAAa,KAAA;AAAA,YACb,QAAA;AAAA,YACA,KAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA;AAAA,YACA,IAAA,EAAM,kBAAkB,MAAA,GAAS,UAAA;AAAA,YACjC,IAAA;AAAA,YACA,EAAA,EAAI,OAAA;AAAA,YACJ,SAAA,EAAW,CAAA,EAAG,YAAA,KAAiB,MAAA,GAAY,wBAAwB,EAAE,CAAA,sKAAA,CAAA;AAAA,YACrE,KAAA,EAAO,cAAc,EAAC;AAAA,YACtB,aAAa,WAAA,IAAe;AAAA;AAAA,SAChC;AAAA,wBACAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACG,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,oBAAA;AAAA,YACV,OAAA,EAAS,MAAM,kBAAA,CAAmB,CAAC,eAAe,CAAA;AAAA,YAClD,YAAA,EAAY,kBAAkB,eAAA,GAAkB,eAAA;AAAA,YAE/C,QAAA,EAAA,eAAA;AAAA;AAAA,8BAEGC,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,SAAQ,WAAA,EAAY,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU,SAAA,EAC/E,QAAA,EAAA;AAAA,gCAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sPAAA,EAAuP,CAAA;AAAA,gCAC/PA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4HAAA,EAA6H,CAAA;AAAA,gCACrIA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qMAAA,EAAsM;AAAA,eAAA,EAClN;AAAA;AAAA;AAAA,8BAGAC,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,SAAQ,WAAA,EAAY,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU,SAAA,EAC/E,QAAA,EAAA;AAAA,gCAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iCAAA,EAAkC,CAAA;AAAA,gCAC1CA,eAAC,MAAA,EAAA,EAAK,QAAA,EAAS,WAAU,CAAA,EAAE,yPAAA,EAA0P,UAAS,SAAA,EAAU;AAAA,eAAA,EAC5S;AAAA;AAAA;AAAA;AAER,OAAA,EACJ;AAAA,KAAA,EACJ,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAA0D,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EAC1F,CAAA;AAER;AC9De,SAAR,QAAA,CAA0B;AAAA,EAC7B,OAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA,GAAW;AACf,CAAA,EAAkB;AAEd,EAAA,MAAM,SAAA,GAAY,WAAW,KAAA,IAAS,KAAA;AAEtC,EAAA,uBACIC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACG,OAAA;AAAA,QACA,SAAA,EAAW;AAAA,UACP,kCAAA;AAAA,UACA,WAAW,+BAAA,GAAkC;AAAA,SACjD,CAAE,KAAK,GAAG,CAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAD,cAAAA;AAAA,YAAmB4B,4BAAA,CAAA,IAAA;AAAA,YAAlB;AAAA,cACG,EAAA,EAAI,OAAA;AAAA,cACJ,IAAA;AAAA,cACA,OAAA,EAAS,SAAA;AAAA,cACT,QAAA;AAAA,cACA,eAAA,EAAiB,CAAC,CAAA,KACd,QAAA,GAAW,EAAE,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAC,CAAC,CAAA,EAAG,EAAA,EAAI,OAAA,EAAS,IAAA,IAAQ,CAAA;AAAA,cAE9D,SAAA,EAAW;AAAA;AAAA,gBAEP,2EAAA;AAAA,gBACA,kDAAA;AAAA;AAAA,gBAEA,iCAAA;AAAA;AAAA,gBAEA,mEAAA;AAAA;AAAA,gBAEA,+FAAA;AAAA;AAAA,gBAEA;AAAA,eACJ,CAAE,KAAK,GAAG,CAAA;AAAA,cACV,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAAA,cAEhD,QAAA,kBAAA5B,cAAAA;AAAA,gBAAmB4B,4BAAA,CAAA,SAAA;AAAA,gBAAlB;AAAA,kBACG,SAAA,EAAU,yEAAA;AAAA,kBAGV,QAAA,kBAAA5B,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACG,KAAA,EAAM,IAAA;AAAA,sBACN,MAAA,EAAO,GAAA;AAAA,sBACP,OAAA,EAAQ,UAAA;AAAA,sBACR,IAAA,EAAK,MAAA;AAAA,sBACL,aAAA,EAAY,MAAA;AAAA,sBAEZ,QAAA,kBAAAA,cAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACG,CAAA,EAAE,mBAAA;AAAA,0BACF,MAAA,EAAO,OAAA;AAAA,0BACP,WAAA,EAAY,KAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe;AAAA;AAAA;AACnB;AAAA;AACJ;AAAA;AACJ;AAAA,WACJ;AAAA,UAEC,yBACGA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DACX,QAAA,EAAA,KAAA,EACL;AAAA;AAAA;AAAA,KAER;AAAA,IAEC,gCACGA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAuC,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EAE5E,CAAA;AAER;ACrFe,SAAR,MAAA,CAAwB;AAAA,EAC3B,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,WAAA;AAAA,EACA;AACJ,CAAA,EAAqB;AACjB,EAAA,MAAM,KAAKyB,YAAAA,EAAM;AAEjB,EAAA,uBACIzB,cAAAA,CAAC,KAAA,EAAA,EACG,QAAA,kBAAAA,cAAAA,CAAC,WAAM,OAAA,EAAS,EAAA,EAAI,SAAA,EAAU,oDAAA,EAC1B,QAAA,kBAAAA,cAAAA;AAAA,IAAiB6B,0BAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACG,EAAA;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAA,KAAM,QAAA,GAAW,EAAE,QAAQ,EAAE,OAAA,EAAS,CAAA,EAAE,EAAG,CAAA;AAAA,MAC7D,SAAA,EAAU,gLAAA;AAAA,MAEV,QAAA,kBAAA7B,cAAAA;AAAA,QAAiB6B,0BAAA,CAAA,KAAA;AAAA,QAAhB;AAAA,UACG,SAAA,EAAU,mPAAA;AAAA,UAET,QAAA,EAAA,WAAA,IAAe,aAAA,GACV,OAAA,GACI,WAAA,GACA,aAAA,GACJ;AAAA;AAAA;AACV;AAAA,KAER,CAAA,EACJ,CAAA;AAER;ACfe,SAAR,YAAA,CAA8B;AAAA,EACjC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA,GAAS,UAAA;AAAA,EACT,QAAQ,EAAC;AAAA,EACT,WAAA;AAAA,EACA,SAAA,GAAY;AAChB,CAAA,EAAsB;AAClB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAInB,gBAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,EAAK,GACvB,KAAA,CAAM,MAAA;AAAA,IACF,CAAC,EAAE,GAAA,EAAK,KAAA,EAAAoB,QAAM,KACVA,MAAAA,CAAM,aAAY,CAAE,QAAA,CAAS,KAAK,WAAA,EAAa,KAC/C,GAAA,CAAI,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,aAAa;AAAA,MAErD,EAAC;AAEP,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAA2B;AAC7C,IAAA,OAAA,CAAQ,GAAG,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,CAAA,CAAG,CAAA;AACvC,IAAA,WAAA,GAAc,KAAK,KAAK,CAAA;AACxB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACI9B,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDACX,QAAA,kBAAAC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,CAAA,KAAA,EAAQ,MAAA,KAAW,UAAA,GAAa,aAAa,6BAA6B,CAAA,CAAA;AAAA,MACrF,KAAA,EAAO,SAAS,EAAC;AAAA,MAEhB,QAAA,EAAA;AAAA,QAAA,KAAA,oBACGD,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,yEACZ,QAAA,EAAA,KAAA,EACL,CAAA;AAAA,wBAGJC,eAAAA,CAAS8B,kBAAA,CAAA,IAAA,EAAR,EAAa,MAAM,IAAA,IAAQ,CAAC,QAAA,EAAU,YAAA,EAAc,CAAC,CAAA,KAAM,CAAC,QAAA,IAAY,OAAA,CAAQ,CAAC,CAAA,EAC9E,QAAA,EAAA;AAAA,0BAAA/B,cAAAA,CAAS+B,2BAAR,EAAe,OAAA,EAAO,MACnB,QAAA,kBAAA9B,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACX,QAAA,EAAA;AAAA,4BAAAD,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACG,QAAA;AAAA,gBACA,KAAA,EAAO,IAAA;AAAA,gBACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACb,kBAAA,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AACtB,kBAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,gBAChB,CAAA;AAAA,gBACA,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,gBAC3B,IAAA,EAAK,MAAA;AAAA,gBACL,IAAA;AAAA,gBACA,SAAA,EAAU,uIAAA;AAAA,gBACV,KAAA,EAAO,cAAc,EAAC;AAAA,gBACtB,aAAa,WAAA,IAAe,EAAA;AAAA,gBAC5B,YAAA,EAAa,KAAA;AAAA,gBACb,eAAA,EAAc,SAAA;AAAA,gBACd,eAAA,EAAe,IAAA;AAAA,gBACf,mBAAA,EAAkB;AAAA;AAAA,aACtB;AAAA,4BACAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,8BAA6B,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAMoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,GAAG,SAAA,EAAU,uBAAA,EACzG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAS,WAAU,CAAA,EAAE,8JAAA,EAA+J,QAAA,EAAS,SAAA,EAAU,CAAA,EACjN;AAAA,WAAA,EACJ,CAAA,EACJ,CAAA;AAAA,0BAEAA,cAAAA,CAAS+B,kBAAA,CAAA,MAAA,EAAR,EACG,QAAA,kBAAA/B,cAAAA;AAAA,YAAS+B,kBAAA,CAAA,OAAA;AAAA,YAAR;AAAA,cACG,KAAA,EAAM,OAAA;AAAA,cACN,UAAA,EAAY,CAAA;AAAA,cACZ,eAAA,EAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,cACzC,SAAA,EAAU,sIAAA;AAAA,cAET,qBAAW,MAAA,KAAW,CAAA,mBACnB/B,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yGAAA,EACV,QAAA,EAAA,SAAA,EACL,oBAEAA,cAAAA,CAAC,SAAI,IAAA,EAAK,SAAA,EACL,qBAAW,GAAA,CAAI,CAAC,yBACbC,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEG,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,iKAAA;AAAA,kBACV,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,kBAE/B,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAK,IAAA;AAAA,oCACNA,gBAAC,MAAA,EAAA,EACI,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAK,KAAA;AAAA,sBAAM,IAAA;AAAA,sBAAG,IAAA,CAAK,KAAA;AAAA,sBAAM;AAAA,qBAAA,EAC9B;AAAA;AAAA,iBAAA;AAAA,gBARK,IAAA,CAAK;AAAA,eAUjB,CAAA,EACL;AAAA;AAAA,WAER,EACJ;AAAA,SAAA,EACJ;AAAA;AAAA;AAAA,GACJ,EACJ,CAAA;AAER;AC5Ge,SAAR,UAAA,CAA4B;AAAA,EAC/B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA,GAAS,YAAA;AAAA,EACT,YAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT,OAAA;AAAA,EACA,QAAQ;AACZ,CAAA,EAAoB;AAChB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIS,gBAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,gBAAiC,IAAI,CAAA;AAC3E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAAA,CAA2B,EAAE,CAAA;AAEjE,EAAAC,iBAAU,MAAM;AACZ,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAyB;AACzC,IAAA,QAAA,GAAW,EAAE,QAAQ,EAAE,KAAA,EAAO,KAAK,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AACxD,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,CAAA,KAAA,EAAQ,MAAA,KAAW,UAAA,GAAa,aAAa,6BAA6B,CAAA,CAAA;AAAA,QAEpF,QAAA,EAAA;AAAA,UAAA,KAAA,oBACGD,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAU,mFAAA;AAAA,cACV,OAAA;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACL;AAAA,0BAGJC,eAAAA,CAAS+B,kBAAA,CAAA,IAAA,EAAR,EAAa,MAAM,IAAA,IAAQ,CAAC,QAAA,EAAU,YAAA,EAAc,CAAC,CAAA,KAAM,CAAC,QAAA,IAAY,OAAA,CAAQ,CAAC,CAAA,EAC9E,QAAA,EAAA;AAAA,4BAAAhC,cAAAA,CAASgC,kBAAA,CAAA,OAAA,EAAR,EAAgB,OAAA,EAAO,MACpB,QAAA,kBAAA/B,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,EAAA,EAAI,OAAA;AAAA,gBACJ,KAAA;AAAA,gBACA,IAAA,EAAK,UAAA;AAAA,gBACL,eAAA,EAAe,IAAA;AAAA,gBACf,eAAA,EAAc,SAAA;AAAA,gBACd,SAAA,EAAW,CAAA,6EAAA,EAAgF,QAAA,GAAW,gCAAA,GAAmC,UAAU,CAAA,CAAA;AAAA,gBACnJ,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,gBAG1B,QAAA,EAAA;AAAA,kCAAAD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,IAAA,EAAO,CAAC,OAAO,KAAA,GAAQ,eAAA,GAAkB,EAAE,CAAA,8DAAA,CAAA,EACtD,gBAAM,OAAA,CAAQ,KAAK,oBAChBC,eAAAA,CAAAC,qBAAA,EACK,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,IAAI,CAAC,GAAA,EAAK,uBACzBF,cAAAA;AAAA,sBAAC,YAAA;AAAA,sBAAA;AAAA,wBAEG,WAAA,EAAa,MAAM,MAAA,GAAS,CAAA;AAAA,wBAC5B,KAAA,EAAO,WAAW,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,GAAA,KAAQ,GAAG,CAAA,EAAG;AAAA,uBAAA;AAAA,sBAF3C;AAAA,qBAIZ,CAAA;AAAA,oBACA,KAAA,CAAM,MAAA,GAAS,CAAA,oBAAKA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAO,CAAA,CAAA,EAAI,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,KAAA,CAAA,EAAS;AAAA,mBAAA,EAC3E,IACA,KAAA,IAAS,IAAA,mBACTA,cAAAA,CAAC,gBAAa,KAAA,EAAO,UAAA,CAAW,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,GAAA,KAAQ,KAAK,CAAA,EAAG,KAAA,EAAO,IACvE,IAAA,EACR,CAAA;AAAA,kCAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,0CAA0C,IAAA,GAAO,YAAA,GAAe,UAAU,CAAA,CAAA,EACtF,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAQoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,SAAA,EAAU,WACpG,QAAA,kBAAApB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gBAAA,EAAiB,GAC1E,CAAA,EACJ;AAAA;AAAA;AAAA,aACJ,EACJ,CAAA;AAAA,4BAEAA,cAAAA,CAASgC,kBAAA,CAAA,MAAA,EAAR,EACG,QAAA,kBAAAhC,cAAAA;AAAA,cAASgC,kBAAA,CAAA,OAAA;AAAA,cAAR;AAAA,gBACG,KAAA,EAAM,OAAA;AAAA,gBACN,UAAA,EAAY,CAAA;AAAA,gBACZ,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,SAAS,GAAA,EAAI;AAAA,gBACpC,SAAA,EAAU,qKAAA;AAAA,gBAEV,QAAA,kBAAAhC,cAAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,SAAA,EAAU,SAAA,EAAU,0BAAA,EACzB,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBACnBC,eAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBAEG,IAAA,EAAK,QAAA;AAAA,oBACL,eAAA,EAAe,UAAU,IAAA,CAAK,GAAA;AAAA,oBAC9B,eAAA,EAAe,GAAA;AAAA,oBACf,SAAA,EAAW,CAAA,8JAAA,CAAA;AAAA,oBACX,OAAA,EAAS,MAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,oBAClC,YAAA,EAAc,MAAM,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AAAA,oBAC3C,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,oBAEvC,QAAA,EAAA;AAAA,sCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACV,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAK,IAAA,oBAAQD,cAAAA,CAAC,KAAA,EAAA,EAAK,eAAK,IAAA,EAAK,CAAA;AAAA,wBAC7B,IAAA,CAAK;AAAA,uBAAA,EACV,CAAA;AAAA,sBACC,KAAA,KAAU,IAAA,CAAK,GAAA,oBACZA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,QACjD,QAAA,kBAAAA,cAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACG,CAAA,EAAE,oBAAA;AAAA,0BACF,QAAQ,WAAA,KAAgB,IAAA,CAAK,MAAM,MAAA,GAASoB,gCAAA,CAAO,QAAQ,eAAe,CAAA;AAAA,0BAC1E,WAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe;AAAA;AAAA,uBACnB,EACJ;AAAA;AAAA,mBAAA;AAAA,kBAtBC,IAAA,CAAK;AAAA,iBAyBjB,CAAA,EACL;AAAA;AAAA,aACJ,EACJ;AAAA,WAAA,EACJ;AAAA;AAAA;AAAA,KACJ;AAAA,oBACApB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAA0D,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EAC1F,CAAA;AAER;ACnIe,SAAR,SAAA,CAA2B;AAAA,EAC9B,aAAA,GAAgB,KAAA;AAAA,EAChB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA,GAAS;AACb,CAAA,EAAmB;AACf,EAAA,MAAM,SAAA,GAAYkB,cAAyB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIR,eAAAA,CAAiB,EAAE,CAAA;AAE7C,EAAA,MAAM,aAAa,MAAM;AACrB,IAAA,SAAA,CAAU,OAAA,EAAS,cAAc,IAAI,UAAA,CAAW,SAAS,EAAE,OAAA,EAAS,KAAA,EAAO,CAAC,CAAA;AAAA,EAChF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiB;AAClC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,QAAA,GAAW,EAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,IAAA,IAAQ,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAuB;AACnC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,WAAmB,EAAC;AAC1B,IAAA,IAAI,CAAA,CAAE,aAAa,KAAA,EAAO;AACtB,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAE,YAAA,CAAa,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AAClD,QAAA,IAAI,EAAE,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAAE,SAAS,MAAA,EAAQ;AACzC,UAAA,MAAM,IAAI,CAAA,CAAE,YAAA,CAAa,KAAA,CAAM,CAAC,EAAE,SAAA,EAAU;AAC5C,UAAA,IAAI,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAAA,QAC1B;AAAA,MACJ;AAAA,IACJ,CAAA,MAAO;AACH,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAE,YAAA,CAAa,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AAClD,QAAA,QAAA,CAAS,IAAA,CAAK,CAAA,CAAE,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MACzC;AAAA,IACJ;AACA,IAAA,WAAA,CAAY,QAAQ,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2C;AAC9D,IAAA,WAAA,CAAY,MAAM,IAAA,CAAK,CAAA,CAAE,OAAO,KAAA,IAAS,EAAE,CAAC,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAwB;AACxC,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,QAAA,GAAW,EAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAC,EAAG,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,EAAA,EAAG,EAAG,CAAA;AAC/D,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,EAAA;AAAA,EACrD,CAAA;AAEA,EAAA,uBACIT,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAU,2LAAA;AAAA,MACV,UAAA,EAAY,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,MACpC,MAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACG,EAAA,EAAI,IAAA;AAAA,YACJ,IAAA;AAAA,YACA,QAAA,EAAU,aAAA;AAAA,YACV,GAAA,EAAK,SAAA;AAAA,YACL,MAAA,EAAM,IAAA;AAAA,YACN,IAAA,EAAK,MAAA;AAAA,YACL,MAAA;AAAA,YACA,QAAA,EAAU;AAAA;AAAA,SACd;AAAA,QAEC,MAAM,MAAA,KAAW,CAAA,mBACdC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EAEX,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,SAAI,KAAA,EAAM,4BAAA,EAA6B,SAAQ,WAAA,EAAY,IAAA,EAAMoB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,WAAU,2BAAA,EACzG,QAAA,kBAAApB,eAAC,MAAA,EAAA,EAAK,QAAA,EAAS,WAAU,CAAA,EAAE,4SAAA,EAA6S,QAAA,EAAS,SAAA,EAAU,CAAA,EAC/V,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAA6C,QAAA,EAAA,sBAAA,EAAoB;AAAA,SAAA,EACpF,CAAA,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACV,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,EAAA,qBACdC,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEG,SAAA,EAAU,mHAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAD,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,UAAA;AAAA,kBACT,SAAA,EAAU,gHAAA;AAAA,kBACV,YAAA,EAAW,aAAA;AAAA,kBAEX,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACjD,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB,MAAA,EAAO,MAAA,EAAO,WAAA,EAAY,KAAI,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAC9G;AAAA;AAAA,eACJ;AAAA,8BAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAMmB,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG,WAAU,2BAAA,EACzG,QAAA,EAAA;AAAA,gCAAApB,eAAC,MAAA,EAAA,EAAK,QAAA,EAAS,WAAU,CAAA,EAAE,gNAAA,EAAiN,UAAS,SAAA,EAAU,CAAA;AAAA,gCAC/PA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kIAAA,EAAmI;AAAA,eAAA,EAC/I,CAAA;AAAA,8BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2FAAA,EACX,eAAK,IAAA,EACV;AAAA;AAAA,WAAA;AAAA,UApBK,CAAA,EAAG,EAAE,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA;AAAA,SAsB7B,CAAA,EACL;AAAA;AAAA;AAAA,GAER;AAER;AC3HA,IAAM,MAAA,GAAiC;AAAA,EACnC,CAAA,EAAG,SAAA;AAAA,EAAW,CAAA,EAAG,UAAA;AAAA,EAAY,CAAA,EAAG,OAAA;AAAA,EAAS,CAAA,EAAG,OAAA;AAAA,EAC5C,CAAA,EAAG,KAAA;AAAA,EAAO,CAAA,EAAG,MAAA;AAAA,EAAQ,CAAA,EAAG,MAAA;AAAA,EAAQ,CAAA,EAAG,QAAA;AAAA,EACnC,CAAA,EAAG,WAAA;AAAA,EAAa,EAAA,EAAI,SAAA;AAAA,EAAW,EAAA,EAAI,UAAA;AAAA,EAAY,EAAA,EAAI;AACvD,CAAA;AACA,IAAM,IAAA,GAA+B,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,GAAG,KAAA,EAAM;AAE5G,SAAS,WAAW,IAAA,EAAoB;AACpC,EAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,GAAA,EAAK,SAAA,EAAW,CAAA;AAClG,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,IAAI,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,KAAK,CAAA,CAAG,KAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,OAAO,CAAA,CAAG,KAAA;AACjD,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,CAAG,KAAA;AAChD,EAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA,CAAA;AACzB;AAEA,SAAS,YAAA,CAAa,MAAc,KAAA,EAAuB;AACvD,EAAA,MAAM,OAAe,EAAC;AACtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,IAAI,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,GAAQ,GAAG,CAAC,CAAA;AACrC,IAAA,IAAI,CAAA,CAAE,QAAA,EAAS,GAAI,CAAA,GAAI,KAAA,EAAO;AAC9B,IAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EACf;AACA,EAAA,OAAO,IAAA;AACX;AAEA,IAAMiC,aAAAA,GAAe,CAAC,EAAE,KAAA,GAAQb,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAE,qBAC5DpB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa,CAAA,EAAG,SAAA,EAAU,WAC1E,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,gBAAe,CAAA,EACxE,CAAA;AAGJ,IAAMkC,mBAAAA,GAAqB,CAAC,EAAE,KAAA,GAAQd,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAE,qBAClEpB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa,CAAA,EAAG,SAAA,EAAU,WAC1E,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,6BAA4B,CAAA,EACrF,CAAA;AAGJ,IAAMmC,YAAAA,GAAc,CAAC,EAAE,KAAA,GAAQf,gCAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAE,qBAC3DpB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa,CAAA,EAAG,SAAA,EAAU,WAC1E,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,kBAAiB,CAAA,EAC1E,CAAA;AA6BJ,SAAS,cAAA,CAAe;AAAA,EACpB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACJ,CAAA,EAAoB;AAChB,EAAA,MAAM,SAAA,GAAYkB,cAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAcA,cAAuB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,UAAA,EAAY,WAAW,CAAA,GAAIR,gBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,eAAA,EAAiB,gBAAgB,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIA,eAAAA,CAAS,KAAA,CAAM,aAAa,CAAA;AAClE,EAAA,MAAM,CAAC,cAAc,eAAe,CAAA,GAAIA,gBAAS,KAAA,CAAM,QAAA,KAAa,CAAC,CAAA;AAErE,EAAA,MAAM,SAAS,MAAM;AAAE,IAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,EAAE,CAAA;AAE7D,EAAA,MAAM,cAAc,MAAM;AACtB,IAAA,IAAI,YAAA,GAAe,IAAI,EAAA,EAAI;AAAE,MAAA,eAAA,CAAgB,CAAC,CAAA;AAAG,MAAA,cAAA,CAAe,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAAA,IAAE,CAAA,MACzE,eAAA,CAAgB,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,EACrC,CAAA;AACA,EAAA,MAAM,cAAc,MAAM;AACtB,IAAA,IAAI,YAAA,GAAe,MAAM,CAAA,EAAG;AAAE,MAAA,eAAA,CAAgB,EAAE,CAAA;AAAG,MAAA,cAAA,CAAe,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAAA,IAAE,CAAA,MAC3E,eAAA,CAAgB,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAY;AACzB,IAAA,MAAM,CAAA,uBAAQ,IAAA,EAAK;AACnB,IAAA,OAAO,EAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,MAAa,CAAA,CAAE,QAAA,EAAS,KAAM,CAAA,CAAE,UAAS,IAAK,CAAA,CAAE,WAAA,EAAY,KAAM,EAAE,WAAA,EAAY;AAAA,EAC7G,CAAA;AACA,EAAA,MAAM,aAAa,CAAC,CAAA,KAChB,MAAM,OAAA,EAAQ,KAAM,EAAE,OAAA,EAAQ,IAAK,MAAM,QAAA,EAAS,KAAM,EAAE,QAAA,EAAS,IAAK,MAAM,WAAA,EAAY,KAAM,EAAE,WAAA,EAAY;AAElH,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAY;AAChC,IAAA,IAAI,aAAA,IAAiB,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,KAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,EAAG,OAAO,IAAA;AAC7E,IAAA,IAAI,YAAA,IAAgB,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,KAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,EAAG,OAAO,IAAA;AAC3E,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAY;AAC7B,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA;AACnC,IAAA,QAAA,CAAS,EAAE,QAAQ,EAAE,KAAA,EAAO,MAAM,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AACvD,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,cAAA,CAAe,CAAA,CAAE,aAAa,CAAA;AAC9B,IAAA,eAAA,CAAgB,CAAA,CAAE,QAAA,EAAS,GAAI,CAAC,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AACzB,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,WAAA,EAAa,YAAY,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,EAAO;AAChC,IAAA,MAAM,IAAA,GAAiB,CAAC,EAAC,EAAG,EAAC,EAAG,EAAC,EAAG,IAAI,EAAC,EAAG,EAAC,EAAG,EAAE,CAAA;AAClD,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,KAAM,IAAA,CAAK,CAAA,CAAE,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5C,IAAA,IAAI,OAAA,GAAU,CAAC,GAAG,IAAI,CAAA;AACtB,IAAA,IAAI,WAAW,CAAA,EAAG;AACd,MAAA,OAAA,GAAU,CAAC,GAAG,OAAA,CAAQ,OAAO,QAAQ,CAAA,EAAG,GAAG,OAAO,CAAA;AAAA,IACtD;AACA,IAAA,OAAO,OAAA;AAAA,EACX,CAAA;AAEA,EAAAC,iBAAU,MAAM;AACZ,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAkB;AACjC,MAAA,IACI,UAAU,OAAA,IAAW,CAAC,UAAU,OAAA,CAAQ,QAAA,CAAS,EAAE,MAAc,CAAA,IACjE,YAAY,OAAA,IAAW,CAAC,YAAY,OAAA,CAAQ,QAAA,CAAS,EAAE,MAAc,CAAA,cAC3D,KAAK,CAAA;AAAA,IACvB,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,SAAS,CAAA;AAChD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,SAAS,CAAA;AAAA,EACpE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,iBAAU,MAAM;AACZ,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,EAAS,qBAAA,EAAsB;AACtD,IAAA,IAAI,IAAA,KAAS,IAAA,CAAK,CAAA,GAAI,MAAA,CAAO,WAAA,GAAc,OAAO,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,WAAA,GAAc,GAAA,CAAA,EAAM;AACvF,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACzB,CAAA,uBAAwB,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,SAAI,SAAA,EAAW,CAAA,cAAA,EAAiB,WAAW,UAAA,GAAa,UAAA,GAAa,6BAA6B,CAAA,CAAA,EAC9F,QAAA,EAAA;AAAA,MAAA,KAAA,oBACGD,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,yEACZ,QAAA,EAAA,KAAA,EACL,CAAA;AAAA,sBAEJC,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,KAAA;AAAA,UACA,GAAA,EAAK,SAAA;AAAA,UACL,SAAA,EAAW,CAAA,+CAAA,EAAkD,QAAA,GAAW,gCAAA,GAAmC,yBAAyB,CAAA,eAAA,CAAA;AAAA,UAEpI,QAAA,EAAA;AAAA,4BAAAD,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,OAAA,EAAS,MAAA;AAAA,gBACT,SAAA,EAAW,CAAA,0CAAA,EAA6C,QAAA,GAAW,oBAAA,GAAuB,gBAAgB,IAAI,CAAC,KAAA,CAAM,KAAA,GAAQ,eAAA,GAAkB,EAAE,CAAA,wBAAA,CAAA;AAAA,gBAEhJ,qBAAW,KAAK;AAAA;AAAA,aACrB;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,OAAA,EAAS,MAAA;AAAA,gBACT,SAAA,EAAW,CAAA,iCAAA,EAAoC,UAAA,GAAa,YAAA,GAAe,kBAAkB,CAAA,CAAA;AAAA,gBAE7F,QAAA,kBAAAA,cAAAA,CAACmC,YAAAA,EAAA,EAAY;AAAA;AAAA;AACjB;AAAA;AAAA,OACJ;AAAA,sBAEAnC,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,GAAA,EAAK,WAAA;AAAA,UACL,SAAA,EAAW,6BAA6B,eAAA,GAAkB,eAAA,GAAkB,YAAY,CAAA,uDAAA,EAA0D,UAAA,GAAa,oBAAoB,6BAA6B,CAAA,CAAA;AAAA,UAE/M,QAAA,EAAA,UAAA,oBACGC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EAEX,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACX,QAAA,EAAA;AAAA,8BAAAD,eAAC,MAAA,EAAA,EAAK,OAAA,EAAS,MAAM,cAAA,CAAe,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG,WAAU,wFAAA,EACzD,QAAA,kBAAAA,cAAAA,CAACkC,mBAAAA,EAAA,EAAmB,CAAA,EACxB,CAAA;AAAA,8BACAlC,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,WAAA,EAAa,SAAA,EAAU,wFAAA,EAClC,QAAA,kBAAAA,cAAAA,CAACiC,aAAAA,EAAA,EAAa,CAAA,EAClB,CAAA;AAAA,8BACAhC,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gEAAA,EACX,QAAA,EAAA;AAAA,gBAAA,WAAA;AAAA,gBAAY,GAAA;AAAA,gBAAE,OAAO,YAAY;AAAA,eAAA,EACtC,CAAA;AAAA,8BACAD,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,WAAA,EAAa,SAAA,EAAU,6EAAA,EAClC,QAAA,kBAAAA,cAAAA,CAACiC,aAAAA,EAAA,EAAa,CAAA,EAClB,CAAA;AAAA,8BACAjC,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,MAAM,eAAe,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,GAAG,SAAA,EAAU,6EAAA,EACzD,0BAAAA,cAAAA,CAACkC,mBAAAA,EAAA,EAAmB,CAAA,EACxB;AAAA,aAAA,EACJ,CAAA;AAAA,4BAGAlC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACV,QAAA,EAAA,cAAA,EAAe,CAAE,GAAA,CAAI,CAAC,SAAS,KAAA,qBAC5BC,eAAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,kCAAA,EACvB,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACV,kBAAQ,CAAC,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAA,EAAQ,IAAI,EAAA,EAC9C,CAAA;AAAA,cACC,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACVA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEG,SAAS,MAAM,CAAC,eAAe,GAAG,CAAA,IAAK,YAAY,GAAG,CAAA;AAAA,kBACtD,SAAA,EAAW,CAAA;AAAA,oDAAA,EACL,OAAA,CAAQ,GAAG,CAAA,GAAI,6BAAA,GAAgC,EAAE;AAAA,oDAAA,EACjD,UAAA,CAAW,GAAG,CAAA,GAAI,6BAAA,GAAgC,EAAE;AAAA,oDAAA,EACpD,CAAC,UAAA,CAAW,GAAG,CAAA,GAAI,sBAAsB,EAAE;AAAA,oDAAA,EAC3C,cAAA,CAAe,GAAG,CAAA,GAAI,sEAAA,GAAyE,EAAE,CAAA,CAAA;AAAA,kBAEtG,cAAI,OAAA;AAAQ,iBAAA;AAAA,gBARR,IAAI,OAAA;AAAQ,eAUxB;AAAA,aAAA,EAAA,EAhBK,KAiBV,CACH,CAAA,EACL,CAAA;AAAA,4BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CACX,QAAA,kBAAAA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACG,OAAA,EAAS,MAAM,WAAA,iBAAY,IAAI,MAAM,CAAA;AAAA,gBACrC,OAAA,EAAQ,OAAA;AAAA,gBACR,OAAO,EAAE,KAAA,EAAO,eAAe,OAAA,EAAS,SAAA,EAAW,QAAQ,GAAA;AAAI;AAAA,aACnE,EACJ;AAAA,WAAA,EACJ;AAAA;AAAA;AAER,KAAA,EACJ,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAA0D,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EAC1F,CAAA;AAER;AAeA,SAAS,kBAAA,CAAmB;AAAA,EACxB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,GAAA;AAAA,EACb,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,EACpC,YAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAQ;AACZ,CAAA,EAAwB;AACpB,EAAA,MAAM,SAAA,GAAYkB,cAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAcA,cAAuB,IAAI,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAYA,aAAAA,CAAiD,EAAE,CAAA;AACrE,EAAA,MAAM,CAAC,UAAA,EAAY,WAAW,CAAA,GAAIR,gBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,eAAA,EAAiB,gBAAgB,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAE1D,EAAA,MAAM,WAAA,GAAcP,eAAQ,MAAM;AAC9B,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,IAAI,UAAA,EAAY,CAAA,IAAK,YAAY,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,IAAA,OAAO,IAAA;AAAA,EACX,CAAA,EAAG,CAAC,UAAA,EAAY,UAAU,CAAC,CAAA;AAE3B,EAAAQ,iBAAU,MAAM;AACZ,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAkB;AACjC,MAAA,IACI,UAAU,OAAA,IAAW,CAAC,UAAU,OAAA,CAAQ,QAAA,CAAS,EAAE,MAAc,CAAA,IACjE,YAAY,OAAA,IAAW,CAAC,YAAY,OAAA,CAAQ,QAAA,CAAS,EAAE,MAAc,CAAA,cAC3D,KAAK,CAAA;AAAA,IACvB,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,SAAS,CAAA;AAChD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,SAAS,CAAA;AAAA,EACpE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,iBAAU,MAAM;AACZ,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,EAAS,qBAAA,EAAsB;AACtD,IAAA,IAAI,QAAQ,IAAA,CAAK,CAAA,GAAI,OAAO,WAAA,GAAc,GAAA,mBAAsB,IAAI,CAAA;AAAA,0BAC9C,KAAK,CAAA;AAAA,EAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,iBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,MAAM,CAAA,GAAI,WAAW,MAAM;AACvB,MAAA,MAAM,IAAA,GAAO,UAAU,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AAC5D,MAAA,IAAA,EAAM,GAAA,CAAI,eAAe,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,CAAA;AAAA,IACpF,GAAG,GAAG,CAAA;AACN,IAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,UAAA,EAAY,KAAK,CAAC,CAAA;AAEtB,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAkB;AAChC,IAAA,MAAM,OAAO,KAAA,GAAQ,KAAA;AACrB,IAAA,IAAI,IAAA,GAAO,UAAA,IAAc,IAAA,GAAO,UAAA,EAAY;AAC5C,IAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,IAAA,IAAQ,CAAA;AACpC,IAAA,MAAM,IAAA,GAAO,UAAU,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,IAAI,CAAA;AAC3D,IAAA,IAAA,EAAM,GAAA,CAAI,eAAe,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,CAAA;AAAA,EACpF,CAAA;AAEA,EAAA,uBACIV,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACX,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,SAAI,SAAA,EAAW,CAAA,cAAA,EAAiB,WAAW,UAAA,GAAa,UAAA,GAAa,6BAA6B,CAAA,CAAA,EAC9F,QAAA,EAAA;AAAA,MAAA,KAAA,oBAASD,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,yEAAyE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC1GC,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,KAAA;AAAA,UACA,GAAA,EAAK,SAAA;AAAA,UACL,SAAA,EAAU,uFAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAD,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACG,SAAS,MAAM,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,gBACpC,WAAW,CAAA,IAAA,EAAO,CAAC,KAAA,CAAM,KAAA,GAAQ,kBAAkB,EAAE,CAAA,6EAAA,CAAA;AAAA,gBAEpD,QAAA,EAAA,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ;AAAA;AAAA,aAC3C;AAAA,4BACAA,eAAC,KAAA,EAAA,EAAI,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,MAAM,CAAC,CAAC,GAAG,SAAA,EAAW,CAAA,iCAAA,EAAoC,aAAa,YAAA,GAAe,kBAAkB,IACrI,QAAA,kBAAAA,cAAAA,CAACmC,YAAAA,EAAA,EAAY,CAAA,EACjB;AAAA;AAAA;AAAA,OACJ;AAAA,sBAEAlC,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM;AAAA,UAC5B,GAAA,EAAK,WAAA;AAAA,UACL,SAAA,EAAW,CAAA,EAAG,CAAC,KAAA,CAAM,QAAQ,WAAA,GAAc,EAAE,CAAA,sBAAA,EAAyB,eAAA,GAAkB,eAAA,GAAkB,QAAQ,CAAA,0EAAA,EAA6E,UAAA,GAAa,oBAAoB,6BAA6B,CAAA,CAAA;AAAA,UAE7P,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,CAAA,EAAG,SAAA,EAAU,sIAAA,EACxC,QAAA,kBAAAA,cAAAA,CAACmC,YAAAA,EAAA,EAAY,CAAA,EACjB,CAAA;AAAA,4BACAnC,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBACV,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,qBACdA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEG,GAAA,EAAK,CAAC,GAAA,KAAQ;AACV,kBAAA,IAAI,CAAC,UAAU,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,GAAG,CAAA,IAAK,GAAA;AACnD,oBAAA,SAAA,CAAU,QAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,KAAK,CAAA;AAAA,gBAClD,CAAA;AAAA,gBACA,SAAA,EAAU,+BAAA;AAAA,gBAET,QAAA,EAAA;AAAA,eAAA;AAAA,cAPI;AAAA,aASZ,CAAA,EACL,CAAA;AAAA,4BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA,EAAG,SAAA,EAAU,8GAAA,EACvC,QAAA,kBAAAA,cAAAA,CAACmC,YAAAA,EAAA,EAAY,CAAA,EACjB;AAAA;AAAA;AAAA;AACJ,KAAA,EACJ,CAAA;AAAA,oBACAnC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAA0D,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EAC1F,CAAA;AAER;AAaA,IAAM,WAAW,EAAC;AAKlB,QAAA,CAAS,UAAA,GAAa,cAAA;AACtB,QAAA,CAAS,cAAA,GAAiB,kBAAA;AAE1B,IAAO,kBAAA,GAAQ","file":"index.cjs","sourcesContent":["import React from 'react'\n\nconst Moon = ({ color = 'gray' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill={color} viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className=\"w-8 h-8\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z\" />\n </svg>\n)\n\nconst Sun = ({ color = 'yellow' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill={color} viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className=\"w-8 h-8\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z\" />\n </svg>\n)\n\nconst CheckCircle = ({ color = '#fff', size = 28 }) => (\n <svg width={size} height={size} viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14 0.25C6.40625 0.25 0.25 6.40625 0.25 14C0.25 21.5937 6.40625 27.75 14 27.75C21.5937 27.75 27.75 21.5937 27.75 14C27.75 6.40625 21.5937 0.25 14 0.25ZM19.96 11.675C20.0697 11.5496 20.1533 11.4034 20.2057 11.2452C20.2582 11.087 20.2784 10.9199 20.2653 10.7537C20.2522 10.5876 20.206 10.4257 20.1295 10.2777C20.0529 10.1296 19.9475 9.99838 19.8194 9.89168C19.6914 9.78497 19.5433 9.70495 19.3839 9.65633C19.2244 9.6077 19.0569 9.59145 18.8911 9.60853C18.7253 9.62562 18.5646 9.67568 18.4184 9.75579C18.2723 9.8359 18.1436 9.94443 18.04 10.075L12.665 16.5237L9.88375 13.7412C9.648 13.5136 9.33224 13.3876 9.0045 13.3904C8.67675 13.3933 8.36324 13.5247 8.13148 13.7565C7.89972 13.9882 7.76825 14.3018 7.76541 14.6295C7.76256 14.9572 7.88855 15.273 8.11625 15.5087L11.8662 19.2587C11.9891 19.3815 12.1361 19.4773 12.298 19.5401C12.4599 19.6028 12.6331 19.6312 12.8066 19.6233C12.98 19.6154 13.15 19.5715 13.3055 19.4943C13.4611 19.4171 13.5988 19.3084 13.71 19.175L19.96 11.675Z\" fill={color} />\n </svg>\n)\n\nconst Login = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9\" />\n </svg>\n)\n\nconst Loading = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size} animate-spin`}>\n <path fillRule=\"evenodd\" d=\"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst ToggleLoading = ({ color = '#fff', loading = false, size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size} ${loading && 'animate-spin'}`}>\n <path fillRule=\"evenodd\" d=\"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst Eye = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size}`}>\n <path d=\"M12 15a3 3 0 100-6 3 3 0 000 6z\" />\n <path fillRule=\"evenodd\" d=\"M1.323 11.447C2.811 6.976 7.028 3.75 12.001 3.75c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113-1.487 4.471-5.705 7.697-10.677 7.697-4.97 0-9.186-3.223-10.675-7.69a1.762 1.762 0 010-1.113zM17.25 12a5.25 5.25 0 11-10.5 0 5.25 5.25 0 0110.5 0z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst EyeSlash = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={`w-${size} h-${size}`}>\n <path d=\"M3.53 2.47a.75.75 0 00-1.06 1.06l18 18a.75.75 0 101.06-1.06l-18-18zM22.676 12.553a11.249 11.249 0 01-2.631 4.31l-3.099-3.099a5.25 5.25 0 00-6.71-6.71L7.759 4.577a11.217 11.217 0 014.242-.827c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113z\" />\n <path d=\"M15.75 12c0 .18-.013.357-.037.53l-4.244-4.243A3.75 3.75 0 0115.75 12zM12.53 15.713l-4.243-4.244a3.75 3.75 0 004.243 4.243z\" />\n <path d=\"M6.75 12c0-.619.107-1.213.304-1.764l-3.1-3.1a11.25 11.25 0 00-2.63 4.31c-.12.362-.12.752 0 1.114 1.489 4.467 5.704 7.69 10.675 7.69 1.5 0 2.933-.294 4.242-.827l-2.477-2.477A5.25 5.25 0 016.75 12z\" />\n </svg>\n)\n\nconst ArrowRight = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className={className}>\n <path fillRule=\"evenodd\" d=\"M3.75 12a.75.75 0 01.75-.75h13.19l-5.47-5.47a.75.75 0 011.06-1.06l6.75 6.75a.75.75 0 010 1.06l-6.75 6.75a.75.75 0 11-1.06-1.06l5.47-5.47H4.5a.75.75 0 01-.75-.75z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nconst Minus = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 12h-15\" />\n </svg>\n)\n\nconst Dashboard = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 28 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.4688 9.65625H24.7812M3.21875 14.3438H13.5312M14 3.09375V20.9062M2.28125 2.15625H25.7188V21.8438H2.28125V2.15625Z\" stroke={color} strokeWidth=\"2.8125\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst FleetIcon = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_327_836)\">\n <path d=\"M26.5249 26.0324C26.7104 25.8203 26.93 25.7143 27.1839 25.7143C27.4377 25.7143 27.6573 25.8203 27.8428 26.0324L29.7173 28.1752L28.3993 29.6819L27.1839 28.2924L25.9684 29.6819C25.7927 29.894 25.573 30 25.3094 30C25.0458 30 24.8262 29.894 24.6504 29.6819L23.435 28.2924L22.2195 29.6819C22.034 29.894 21.8144 30 21.5605 30C21.3067 30 21.087 29.894 20.9016 29.6819L19.6861 28.2924L18.4706 29.6819C18.2852 29.894 18.0655 30 17.8117 30C17.5578 30 17.3382 29.894 17.1527 29.6819L15.9372 28.2924L14.7218 29.6819C14.5363 29.894 14.3166 30 14.0628 30C13.809 30 13.5893 29.894 13.4038 29.6819L12.1884 28.2924L10.9729 29.6819C10.7874 29.894 10.5677 30 10.3139 30C10.0601 30 9.84042 29.894 9.65493 29.6819L8.43948 28.2924L7.22402 29.6819C7.03853 29.894 6.81887 30 6.56504 30C6.31121 30 6.09155 29.894 5.90606 29.6819L4.6906 28.2924L3.47515 29.6819C3.28966 29.894 3.06999 30 2.81616 30C2.56233 30 2.34267 29.894 2.15718 29.6819L0.282745 27.5391L1.60071 26.0324L2.81616 27.4219L4.03162 26.0324C4.21711 25.8203 4.43677 25.7143 4.6906 25.7143C4.94443 25.7143 5.16409 25.8203 5.34958 26.0324L6.56504 27.4219L7.7805 26.0324C7.96599 25.8203 8.18565 25.7143 8.43948 25.7143C8.69331 25.7143 8.91297 25.8203 9.09846 26.0324L10.3139 27.4219L11.5294 26.0324C11.7149 25.8203 11.9345 25.7143 12.1884 25.7143C12.4422 25.7143 12.6618 25.8203 12.8473 26.0324L14.0628 27.4219L15.2782 26.0324C15.4637 25.8203 15.6834 25.7143 15.9372 25.7143C16.1911 25.7143 16.4107 25.8203 16.5962 26.0324L17.8117 27.4219L19.0271 26.0324C19.2126 25.8203 19.4323 25.7143 19.6861 25.7143C19.9399 25.7143 20.1596 25.8203 20.3451 26.0324L21.5605 27.4219L22.776 26.0324C22.9615 25.8203 23.1811 25.7143 23.435 25.7143C23.6888 25.7143 23.9085 25.8203 24.094 26.0324L25.3094 27.4219L26.5249 26.0324ZM3.47515 25.3962C3.28966 25.6083 3.06999 25.7143 2.81616 25.7143C2.56233 25.7143 2.34267 25.6083 2.15718 25.3962L0.282745 23.2533L1.60071 21.7467L2.81616 23.1194L4.03162 21.7467C4.21711 21.5346 4.43677 21.4286 4.6906 21.4286C4.94443 21.4286 5.16409 21.5346 5.34958 21.7467L6.56504 23.1194L7.50226 22.048V17.1429L4.42701 11.8862C4.26104 11.596 4.22687 11.2807 4.3245 10.9403C4.42213 10.5999 4.61738 10.3739 4.91026 10.2623L7.50226 9.29129V4.28571H9.3767V2.14286H13.1256V0H16.8744V2.14286H20.6233V4.28571H22.4978V9.29129L25.0898 10.2623C25.3826 10.3739 25.5779 10.5999 25.6755 10.9403C25.7731 11.2807 25.739 11.596 25.573 11.8862L22.4978 17.1429V22.048L22.776 21.7467C22.9615 21.5346 23.1811 21.4286 23.435 21.4286C23.6888 21.4286 23.9085 21.5346 24.094 21.7467L25.3094 23.1194L26.5249 21.7467C26.7104 21.5346 26.93 21.4286 27.1839 21.4286C27.4377 21.4286 27.6573 21.5346 27.8428 21.7467L29.7173 23.8895L28.3993 25.3962L27.1839 24.0067L25.9684 25.3962C25.7927 25.6083 25.573 25.7143 25.3094 25.7143C25.0458 25.7143 24.8262 25.6083 24.6504 25.3962L23.435 24.0067L22.2195 25.3962C22.034 25.6083 21.8144 25.7143 21.5605 25.7143C21.3067 25.7143 21.087 25.6083 20.9016 25.3962L19.6861 24.0067L18.4706 25.3962C18.2852 25.6083 18.0655 25.7143 17.8117 25.7143C17.5578 25.7143 17.3382 25.6083 17.1527 25.3962L15.9372 24.0067L14.7218 25.3962C14.5363 25.6083 14.3166 25.7143 14.0628 25.7143C13.809 25.7143 13.5893 25.6083 13.4038 25.3962L12.1884 24.0067L10.9729 25.3962C10.7874 25.6083 10.5677 25.7143 10.3139 25.7143C10.0601 25.7143 9.84042 25.6083 9.65493 25.3962L8.43948 24.0067L7.22402 25.3962C7.03853 25.6083 6.81887 25.7143 6.56504 25.7143C6.31121 25.7143 6.09155 25.6083 5.90606 25.3962L4.6906 24.0067L3.47515 25.3962ZM9.3767 6.42857V8.57143L15 6.42857L20.6233 8.57143V6.42857H18.7489V4.28571H11.2511V6.42857H9.3767Z\" fill={color} />\n </g>\n <defs>\n <clipPath id=\"clip0_327_836\"><rect width=\"30\" height=\"30\" fill={color} /></clipPath>\n </defs>\n </svg>\n)\n\nconst Performance = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.64 25.515H24.36C26.0709 23.3842 27.0024 20.7327 27 18C27 11.385 21.63 6 15 6C8.37 6 3 11.385 3 18C3 20.85 3.99 23.445 5.64 25.515ZM13.5 9C13.5 8.175 14.175 7.5 15 7.5C15.825 7.5 16.5 8.175 16.5 9C16.5 9.84 15.825 10.5 15 10.5C14.175 10.5 13.5 9.84 13.5 9ZM6 12C6 11.175 6.675 10.5 7.5 10.5C8.325 10.5 9 11.175 9 12C9 12.84 8.325 13.5 7.5 13.5C6.675 13.5 6 12.84 6 12ZM12.78 17.1C14.04 15.855 22.545 11.85 22.545 11.85C22.545 11.85 18.555 20.37 17.31 21.615C16.05 22.875 14.04 22.875 12.78 21.615C12.1819 21.016 11.8459 20.204 11.8459 19.3575C11.8459 18.511 12.1819 17.699 12.78 17.1ZM4.5 19.5C4.5 18.675 5.175 18 6 18C6.825 18 7.5 18.675 7.5 19.5C7.5 20.34 6.825 21 6 21C5.175 21 4.5 20.34 4.5 19.5ZM13.5 19.5C13.5 18.675 14.175 18 15 18C15.825 18 16.5 18.675 16.5 19.5C16.5 20.34 15.825 21 15 21C14.175 21 13.5 20.34 13.5 19.5ZM22.5 19.5C22.5 18.675 23.175 18 24 18C24.825 18 25.5 18.675 25.5 19.5C25.5 20.34 24.825 21 24 21C23.175 21 22.5 20.34 22.5 19.5Z\" fill={color} />\n </svg>\n)\n\nconst Map = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 34 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_327_830)\">\n <path d=\"M16.875 0C12.7975 0 9.49219 3.30527 9.49219 7.38281C9.49219 10.6793 14.3174 16.6875 16.166 18.8684C16.5404 19.3102 17.2102 19.3102 17.584 18.8684C19.4326 16.6875 24.2578 10.6793 24.2578 7.38281C24.2578 3.30527 20.9525 0 16.875 0ZM16.875 9.84375C15.5156 9.84375 14.4141 8.74219 14.4141 7.38281C14.4141 6.02344 15.5156 4.92188 16.875 4.92188C18.2344 4.92188 19.3359 6.02344 19.3359 7.38281C19.3359 8.74219 18.2344 9.84375 16.875 9.84375ZM1.17891 12.6533C0.830964 12.7925 0.532694 13.0327 0.322564 13.343C0.112435 13.6533 8.33325e-05 14.0194 0 14.3941L0 29.0613C0 29.7246 0.669727 30.1781 1.28555 29.932L9.375 26.25V12.593C8.85703 11.6566 8.4334 10.7449 8.12988 9.87305L1.17891 12.6533ZM16.875 21.0744C16.0506 21.0744 15.2707 20.7123 14.7357 20.0807C13.5838 18.7213 12.3586 17.1732 11.25 15.5854V26.2494L22.5 29.9994V15.5859C21.3914 17.1732 20.1668 18.7219 19.0143 20.0812C18.4793 20.7123 17.6994 21.0744 16.875 21.0744ZM32.4645 9.44297L24.375 13.125V30L32.5711 26.7217C32.9191 26.5826 33.2174 26.3424 33.4275 26.0321C33.6377 25.7218 33.75 25.3556 33.75 24.9809V10.3137C33.75 9.65039 33.0803 9.19688 32.4645 9.44297Z\" fill={color} />\n </g>\n <defs>\n <clipPath id=\"clip0_327_830\"><rect width=\"33.75\" height=\"30\" fill={color} /></clipPath>\n </defs>\n </svg>\n)\n\nconst CharterParty = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <mask id=\"mask0_327_823\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x=\"3\" y=\"1\" width=\"24\" height=\"28\">\n <path d=\"M23.75 2.5H6.25C5.55964 2.5 5 3.05964 5 3.75V26.25C5 26.9404 5.55964 27.5 6.25 27.5H23.75C24.4404 27.5 25 26.9404 25 26.25V3.75C25 3.05964 24.4404 2.5 23.75 2.5Z\" stroke=\"white\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 2.5H15.625V12.5L12.8125 10L10 12.5V2.5Z\" fill={color} stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 17.5H16.25M10 21.25H20\" stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </mask>\n <g mask=\"url(#mask0_327_823)\"><path d=\"M0 0H30V30H0V0Z\" fill={color} /></g>\n </svg>\n)\n\nconst Compliance = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_327_821)\">\n <path d=\"M1.87499 14.9962C1.86582 11.6183 3.15973 8.36699 5.48738 5.91906C7.81504 3.47112 10.9971 2.01516 14.3712 1.85426C17.7453 1.69336 21.0514 2.83991 23.6015 5.05525C26.1515 7.27058 27.7489 10.384 28.0612 13.7475C27.6828 13.6443 27.3021 13.5499 26.9194 13.4644C24.8954 13.0002 22.8059 12.893 20.745 13.1475C19.9256 13.2506 19.1512 13.41 18.4219 13.6312C18.325 13.4207 18.2243 13.2119 18.12 13.005C17.9905 12.7506 17.8673 12.493 17.7506 12.2325C17.5856 11.8575 17.4056 11.37 17.4375 10.8525C17.475 10.2525 17.7787 9.76498 18.2681 9.39748C18.8625 8.95123 19.6106 7.92935 20.2556 6.89623C20.5669 6.4031 20.8312 5.93998 21.0187 5.60248L21.0619 5.52373C19.2523 4.36216 17.1465 3.74636 14.9962 3.74998H14.9062C15.0769 4.08748 15.2644 4.4906 15.4331 4.93873C15.8906 6.14998 16.3031 7.92373 15.5662 9.49123C14.8894 10.935 13.7212 11.31 12.8475 11.535L12.7219 11.5669C11.8725 11.7862 11.5219 11.8762 11.2669 12.2606C11.0306 12.6206 11.0737 13.0725 11.3419 13.9481L11.4037 14.145C11.5106 14.4862 11.6381 14.8912 11.7037 15.2737C11.7862 15.75 11.8087 16.3462 11.5087 16.9237C11.2532 17.4397 10.8463 17.8655 10.3425 18.1444C9.95176 18.3427 9.5312 18.4757 9.09749 18.5381L8.96999 18.5606C8.29874 18.6787 7.95749 18.7387 7.62936 19.0893C7.37249 19.365 7.21311 19.8431 7.12124 20.5369C7.08374 20.82 7.05936 21.1012 7.03686 21.3919L7.02374 21.5456C7.00327 21.8794 6.96005 22.2114 6.89436 22.5394L6.84749 22.7456C8.00741 23.9672 9.42664 24.9129 11.0006 25.5131C10.6481 26.0381 10.3219 26.5819 10.0181 27.1406C7.60928 26.1523 5.54882 24.4699 4.09879 22.3074C2.64875 20.1449 1.87467 17.5999 1.87499 14.9962ZM29.8594 16.3837C29.7756 16.2476 29.6584 16.1351 29.5189 16.057C29.3795 15.9789 29.2223 15.9377 29.0625 15.9375H29.0475C28.9738 15.9284 28.9006 15.9159 28.8281 15.9C28.64 15.8553 28.4531 15.8059 28.2675 15.7519L28.0894 15.7031C27.5677 15.5518 27.0419 15.4155 26.5125 15.2943C24.6983 14.8768 22.8251 14.7798 20.9775 15.0075C18.7237 15.2887 17.0006 16.0537 15.825 17.1487C14.6437 18.2531 14.0625 19.6556 14.0625 21.0862C14.0625 21.4294 14.0887 21.7556 14.1337 22.0612C16.1025 20.3437 18.5306 18.9544 21.2137 17.88C21.3281 17.8342 21.4504 17.8114 21.5736 17.8128C21.6968 17.8143 21.8185 17.84 21.9317 17.8885C22.045 17.937 22.1476 18.0073 22.2337 18.0954C22.3197 18.1836 22.3876 18.2878 22.4334 18.4022C22.4792 18.5165 22.502 18.6388 22.5006 18.762C22.4991 18.8852 22.4734 19.0069 22.4249 19.1202C22.3764 19.2334 22.3061 19.336 22.218 19.4221C22.1298 19.5082 22.0256 19.5761 21.9112 19.6219C20.4169 20.22 19.035 20.91 17.79 21.6881C14.6925 23.4956 12.7631 25.8169 11.3494 28.6444C11.2898 28.7549 11.253 28.8762 11.2412 29.0012C11.2294 29.1262 11.2428 29.2523 11.2807 29.372C11.3185 29.4917 11.38 29.6026 11.4616 29.6981C11.5431 29.7936 11.643 29.8717 11.7553 29.9279C11.8676 29.984 11.99 30.017 12.1153 30.025C12.2406 30.0329 12.3662 30.0156 12.4847 29.974C12.6032 29.9325 12.7121 29.8676 12.805 29.7831C12.898 29.6987 12.973 29.5965 13.0256 29.4825C13.7456 28.0462 14.6062 26.7544 15.7406 25.605C16.0418 26.1539 16.4089 26.6639 16.8337 27.1237C17.7037 28.0612 19.1081 29.0625 21.0937 29.0625C22.3162 29.0625 23.3325 28.7512 24.165 28.2075C24.99 27.6712 25.5862 26.9419 26.0325 26.1769C26.7225 24.9956 27.1181 23.5893 27.4106 22.5469C27.4856 22.2843 27.5512 22.0462 27.615 21.84C27.9394 20.7825 28.4137 19.8337 28.8525 19.0575C29.0737 18.6712 29.2819 18.3319 29.4619 18.0431L29.4919 17.9944C29.6374 17.7668 29.7737 17.5335 29.9006 17.295C29.9719 17.1521 30.0055 16.9935 29.9983 16.834C29.9911 16.6745 29.9433 16.5195 29.8594 16.3837Z\" fill={color} />\n </g>\n <defs>\n <clipPath id=\"clip0_327_821\"><rect width=\"30\" height=\"30\" fill={color} /></clipPath>\n </defs>\n </svg>\n)\n\nconst Applications = ({ color = '#fff', size = 30 }) => (\n <svg width={size} height={size} viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.28125 3.28125H11.7188V11.7188H3.28125V3.28125ZM3.28125 18.2812H11.7188V26.7188H3.28125V18.2812ZM18.2812 18.2812H26.7188V26.7188H18.2812V18.2812ZM18.2812 3.28125H26.7188V11.7188H18.2812V3.28125Z\" stroke={color} strokeWidth=\"2.8125\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst PowerOff = ({ color = '#fff', size = 6 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5.636 5.636a9 9 0 1012.728 0M12 3v9\" />\n </svg>\n)\n\nconst ChevronDown = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n </svg>\n)\n\nconst ChevronRight = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" />\n </svg>\n)\n\nconst Checked = ({ color = '#fff', size = 4 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" />\n </svg>\n)\n\nconst Search = ({ color = '#fff', size = 4 }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={`w-${size} h-${size}`}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z\" />\n </svg>\n)\n\nconst Calendar = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5\" />\n </svg>\n)\n\nconst Clock = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n)\n\nconst ChartBoard = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5m.75-9l3-3 2.148 2.148A12.061 12.061 0 0116.5 7.605\" />\n </svg>\n)\n\nconst BarChartBoard = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6\" />\n </svg>\n)\n\nconst ChartBar = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z\" />\n </svg>\n)\n\nconst PieChart = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.5 6a7.5 7.5 0 107.5 7.5h-7.5V6z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13.5 10.5H21A7.5 7.5 0 0013.5 3v7.5z\" />\n </svg>\n)\n\nconst BarChartSquare = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7.5 14.25v2.25m3-4.5v4.5m3-6.75v6.75m3-9v9M6 20.25h12A2.25 2.25 0 0020.25 18V6A2.25 2.25 0 0018 3.75H6A2.25 2.25 0 003.75 6v12A2.25 2.25 0 006 20.25z\" />\n </svg>\n)\n\nconst Shield = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m0-10.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.75c0 5.592 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.57-.598-3.75h-.152c-3.196 0-6.1-1.249-8.25-3.286zm0 13.036h.008v.008H12v-.008z\" />\n </svg>\n)\n\nconst Calculator = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 15.75V18m-7.5-6.75h.008v.008H8.25v-.008zm0 2.25h.008v.008H8.25V13.5zm0 2.25h.008v.008H8.25v-.008zm0 2.25h.008v.008H8.25V18zm2.498-6.75h.007v.008h-.007v-.008zm0 2.25h.007v.008h-.007V13.5zm0 2.25h.007v.008h-.007v-.008zm0 2.25h.007v.008h-.007V18zm2.504-6.75h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V13.5zm0 2.25h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V18zm2.498-6.75h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V13.5zM8.25 6h7.5v2.25h-7.5V6zM12 2.25c-1.892 0-3.758.11-5.593.322C5.307 2.7 4.5 3.65 4.5 4.757V19.5a2.25 2.25 0 002.25 2.25h10.5a2.25 2.25 0 002.25-2.25V4.757c0-1.108-.806-2.057-1.907-2.185A48.507 48.507 0 0012 2.25z\" />\n </svg>\n)\n\nconst Contract = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z\" />\n </svg>\n)\n\nconst Buoy = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M16.712 4.33a9.027 9.027 0 011.652 1.306c.51.51.944 1.064 1.306 1.652M16.712 4.33l-3.448 4.138m3.448-4.138a9.014 9.014 0 00-9.424 0M19.67 7.288l-4.138 3.448m4.138-3.448a9.014 9.014 0 010 9.424m-4.138-5.976a3.736 3.736 0 00-.88-1.388 3.737 3.737 0 00-1.388-.88m2.268 2.268a3.765 3.765 0 010 2.528m-2.268-4.796a3.765 3.765 0 00-2.528 0m4.796 4.796c-.181.506-.475.982-.88 1.388a3.736 3.736 0 01-1.388.88m2.268-2.268l4.138 3.448m0 0a9.027 9.027 0 01-1.306 1.652c-.51.51-1.064.944-1.652 1.306m0 0l-3.448-4.138m3.448 4.138a9.014 9.014 0 01-9.424 0m5.976-4.138a3.765 3.765 0 01-2.528 0m0 0a3.736 3.736 0 01-1.388-.88 3.737 3.737 0 01-.88-1.388m2.268 2.268L7.288 19.67m0 0a9.024 9.024 0 01-1.652-1.306 9.027 9.027 0 01-1.306-1.652m0 0l4.138-3.448M4.33 16.712a9.014 9.014 0 010-9.424m4.138 5.976a3.765 3.765 0 010-2.528m0 0c.181-.506.475-.982.88-1.388a3.736 3.736 0 011.388-.88m-2.268 2.268L4.33 7.288m6.406 1.18L7.288 4.33m0 0a9.024 9.024 0 00-1.652 1.306A9.025 9.025 0 004.33 7.288\" />\n </svg>\n)\n\nconst Cog = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n)\n\nconst TableIcon = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 01-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0112 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5\" />\n </svg>\n)\n\nconst Data = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125\" />\n </svg>\n)\n\nconst XClose = ({ color = '#fff', className = 'h-6 w-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nconst Grid = ({ color = '#fff', size = 6 }) => (\n <svg width={size} height={size} viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_401_39)\">\n <path d=\"M0.375 0.75C0.375 0.650544 0.414509 0.555161 0.484835 0.484835C0.555161 0.414509 0.650544 0.375 0.75 0.375H1.5C1.59946 0.375 1.69484 0.414509 1.76516 0.484835C1.83549 0.555161 1.875 0.650544 1.875 0.75V1.5C1.875 1.59946 1.83549 1.69484 1.76516 1.76516C1.69484 1.83549 1.59946 1.875 1.5 1.875H0.75C0.650544 1.875 0.555161 1.83549 0.484835 1.76516C0.414509 1.69484 0.375 1.59946 0.375 1.5V0.75ZM2.25 0.75C2.25 0.650544 2.28951 0.555161 2.35984 0.484835C2.43016 0.414509 2.52554 0.375 2.625 0.375H3.375C3.47446 0.375 3.56984 0.414509 3.64016 0.484835C3.71049 0.555161 3.75 0.650544 3.75 0.75V1.5C3.75 1.59946 3.71049 1.69484 3.64016 1.76516C3.56984 1.83549 3.47446 1.875 3.375 1.875H2.625C2.52554 1.875 2.43016 1.83549 2.35984 1.76516C2.28951 1.69484 2.25 1.59946 2.25 1.5V0.75ZM4.125 0.75C4.125 0.650544 4.16451 0.555161 4.23484 0.484835C4.30516 0.414509 4.40054 0.375 4.5 0.375H5.25C5.34946 0.375 5.44484 0.414509 5.51516 0.484835C5.58549 0.555161 5.625 0.650544 5.625 0.75V1.5C5.625 1.59946 5.58549 1.69484 5.51516 1.76516C5.44484 1.83549 5.34946 1.875 5.25 1.875H4.5C4.40054 1.875 4.30516 1.83549 4.23484 1.76516C4.16451 1.69484 4.125 1.59946 4.125 1.5V0.75ZM0.375 2.625C0.375 2.52554 0.414509 2.43016 0.484835 2.35984C0.555161 2.28951 0.650544 2.25 0.75 2.25H1.5C1.59946 2.25 1.69484 2.28951 1.76516 2.35984C1.83549 2.43016 1.875 2.52554 1.875 2.625V3.375C1.875 3.47446 1.83549 3.56984 1.76516 3.64016C1.69484 3.71049 1.59946 3.75 1.5 3.75H0.75C0.650544 3.75 0.555161 3.71049 0.484835 3.64016C0.414509 3.56984 0.375 3.47446 0.375 3.375V2.625ZM2.25 2.625C2.25 2.52554 2.28951 2.43016 2.35984 2.35984C2.43016 2.28951 2.52554 2.25 2.625 2.25H3.375C3.47446 2.25 3.56984 2.28951 3.64016 2.35984C3.71049 2.43016 3.75 2.52554 3.75 2.625V3.375C3.75 3.47446 3.71049 3.56984 3.64016 3.64016C3.56984 3.71049 3.47446 3.75 3.375 3.75H2.625C2.52554 3.75 2.43016 3.71049 2.35984 3.64016C2.28951 3.56984 2.25 3.47446 2.25 3.375V2.625ZM4.125 2.625C4.125 2.52554 4.16451 2.43016 4.23484 2.35984C4.30516 2.28951 4.40054 2.25 4.5 2.25H5.25C5.34946 2.25 5.44484 2.28951 5.51516 2.35984C5.58549 2.43016 5.625 2.52554 5.625 2.625V3.375C5.625 3.47446 5.58549 3.56984 5.51516 3.64016C5.44484 3.71049 5.34946 3.75 5.25 3.75H4.5C4.40054 3.75 4.30516 3.71049 4.23484 3.64016C4.16451 3.56984 4.125 3.47446 4.125 3.375V2.625ZM0.375 4.5C0.375 4.40054 0.414509 4.30516 0.484835 4.23484C0.555161 4.16451 0.650544 4.125 0.75 4.125H1.5C1.59946 4.125 1.69484 4.16451 1.76516 4.23484C1.83549 4.30516 1.875 4.40054 1.875 4.5V5.25C1.875 5.34946 1.83549 5.44484 1.76516 5.51516C1.69484 5.58549 1.59946 5.625 1.5 5.625H0.75C0.650544 5.625 0.555161 5.58549 0.484835 5.51516C0.414509 5.44484 0.375 5.34946 0.375 5.25V4.5ZM2.25 4.5C2.25 4.40054 2.28951 4.30516 2.35984 4.23484C2.43016 4.16451 2.52554 4.125 2.625 4.125H3.375C3.47446 4.125 3.56984 4.16451 3.64016 4.23484C3.71049 4.30516 3.75 4.40054 3.75 4.5V5.25C3.75 5.34946 3.71049 5.44484 3.64016 5.51516C3.56984 5.58549 3.47446 5.625 3.375 5.625H2.625C2.52554 5.625 2.43016 5.58549 2.35984 5.51516C2.28951 5.44484 2.25 5.34946 2.25 5.25V4.5ZM4.125 4.5C4.125 4.40054 4.16451 4.30516 4.23484 4.23484C4.30516 4.16451 4.40054 4.125 4.5 4.125H5.25C5.34946 4.125 5.44484 4.16451 5.51516 4.23484C5.58549 4.30516 5.625 4.40054 5.625 4.5V5.25C5.625 5.34946 5.58549 5.44484 5.51516 5.51516C5.44484 5.58549 5.34946 5.625 5.25 5.625H4.5C4.40054 5.625 4.30516 5.58549 4.23484 5.51516C4.16451 5.44484 4.125 5.34946 4.125 5.25V4.5Z\" fill={color} />\n </g>\n <defs><clipPath id=\"clip0_401_39\"><rect width=\"6\" height=\"6\" fill=\"white\" /></clipPath></defs>\n </svg>\n)\n\nconst Carousel = ({ color = '#fff', size = 6 }) => (\n <svg width={size} height={size} viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_401_41)\">\n <path d=\"M1 4.75H1.5C1.5 5.02575 1.72425 5.25 2 5.25H4C4.27575 5.25 4.5 5.02575 4.5 4.75H5C5.27575 4.75 5.5 4.52575 5.5 4.25V1.75C5.5 1.47425 5.27575 1.25 5 1.25H4.5C4.5 0.97425 4.27575 0.75 4 0.75H2C1.72425 0.75 1.5 0.97425 1.5 1.25H1C0.72425 1.25 0.5 1.47425 0.5 1.75V4.25C0.5 4.52575 0.72425 4.75 1 4.75ZM5 1.75V4.25H4.5V1.75H5ZM2 1.25H4L4.00025 4.75H2V1.25ZM1 1.75H1.5V4.25H1V1.75Z\" fill={color} />\n </g>\n <defs><clipPath id=\"clip0_401_41\"><rect width=\"6\" height=\"6\" fill=\"white\" /></clipPath></defs>\n </svg>\n)\n\nconst DoubleChevronRight = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 4.5l7.5 7.5-7.5 7.5m-6-15l7.5 7.5-7.5 7.5\" />\n </svg>\n)\n\nconst PlusCircle = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v6m3-3H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n)\n\nconst Info = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" />\n </svg>\n)\n\nconst Warning = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" />\n </svg>\n)\n\nconst ErrorIcon = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m0-10.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.75c0 5.592 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.57-.598-3.75h-.152c-3.196 0-6.1-1.249-8.25-3.286zm0 13.036h.008v.008H12v-.008z\" />\n </svg>\n)\n\nconst ShowMore = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 6.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 12.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 18.75a.75.75 0 110-1.5.75.75 0 010 1.5z\" />\n </svg>\n)\n\nconst Tweak = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.5 6h9.75M10.5 6a1.5 1.5 0 11-3 0m3 0a1.5 1.5 0 10-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m-9.75 0h9.75\" />\n </svg>\n)\n\nconst Download = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3\" />\n </svg>\n)\n\nconst Expand = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\" />\n </svg>\n)\n\nconst Collapse = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25\" />\n </svg>\n)\n\nconst ShieldCheck = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z\" />\n </svg>\n)\n\nconst XCircle = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n)\n\nconst Play = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.348a1.125 1.125 0 010 1.971l-11.54 6.347a1.125 1.125 0 01-1.667-.985V5.653z\" />\n </svg>\n)\n\nconst Document = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\" />\n </svg>\n)\n\nconst EditIcon = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10\" />\n </svg>\n)\n\nconst Upload = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 16.5V9.75m0 0l3 3m-3-3l-3 3M6.75 19.5a4.5 4.5 0 01-1.41-8.775 5.25 5.25 0 0110.233-2.33 3 3 0 013.758 3.848A3.752 3.752 0 0118 19.5H6.75z\" />\n </svg>\n)\n\nconst FileIcon = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M10.125 2.25h-4.5c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125v-9M10.125 2.25h.375a9 9 0 019 9v.375M10.125 2.25A3.375 3.375 0 0113.5 5.625v1.5c0 .621.504 1.125 1.125 1.125h1.5a3.375 3.375 0 013.375 3.375M9 15l2.25 2.25L15 12\" />\n </svg>\n)\n\nconst Delete = ({ color = '#fff', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0\" />\n </svg>\n)\n\nconst Bookmarks = ({ color = '#000', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M16.5 3.75V16.5L12 14.25 7.5 16.5V3.75m9 0H18A2.25 2.25 0 0120.25 6v12A2.25 2.25 0 0118 20.25H6A2.25 2.25 0 013.75 18V6A2.25 2.25 0 016 3.75h1.5m9 0h-9\" />\n </svg>\n)\n\nconst Save = ({ color = '#000', size = 16 }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M18.1716 1C18.702 1 19.2107 1.21071 19.5858 1.58579L22.4142 4.41421C22.7893 4.78929 23 5.29799 23 5.82843V20C23 21.6569 21.6569 23 20 23H4C2.34315 23 1 21.6569 1 20V4C1 2.34315 2.34315 1 4 1H18.1716ZM4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21L5 21L5 15C5 13.3431 6.34315 12 8 12L16 12C17.6569 12 19 13.3431 19 15V21H20C20.5523 21 21 20.5523 21 20V6.82843C21 6.29799 20.7893 5.78929 20.4142 5.41421L18.5858 3.58579C18.2107 3.21071 17.702 3 17.1716 3H17V5C17 6.65685 15.6569 8 14 8H10C8.34315 8 7 6.65685 7 5V3H4ZM17 21V15C17 14.4477 16.5523 14 16 14L8 14C7.44772 14 7 14.4477 7 15L7 21L17 21ZM9 3H15V5C15 5.55228 14.5523 6 14 6H10C9.44772 6 9 5.55228 9 5V3Z\" fill={color} />\n </svg>\n)\n\nconst CircleStack = ({ color = '#000', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125\" />\n </svg>\n)\n\nconst Copy = ({ color = '#000', className = 'w-6 h-6' }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke={color} className={className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\" />\n </svg>\n)\n\nconst Icon = () => <></>\n\nIcon.Moon = Moon\nIcon.Sun = Sun\nIcon.CheckCircle = CheckCircle\nIcon.Login = Login\nIcon.Loading = Loading\nIcon.ToggleLoading = ToggleLoading\nIcon.Eye = Eye\nIcon.EyeSlash = EyeSlash\nIcon.ArrowRight = ArrowRight\nIcon.Minus = Minus\nIcon.Dashboard = Dashboard\nIcon.FleetIcon = FleetIcon\nIcon.Performance = Performance\nIcon.Map = Map\nIcon.CharterParty = CharterParty\nIcon.Compliance = Compliance\nIcon.Applications = Applications\nIcon.PowerOff = PowerOff\nIcon.ChevronDown = ChevronDown\nIcon.ChevronRight = ChevronRight\nIcon.DoubleChevronRight = DoubleChevronRight\nIcon.Checked = Checked\nIcon.Search = Search\nIcon.Calendar = Calendar\nIcon.Clock = Clock\nIcon.ChartBoard = ChartBoard\nIcon.BarChartBoard = BarChartBoard\nIcon.BarChartSquare = BarChartSquare\nIcon.ChartBar = ChartBar\nIcon.PieChart = PieChart\nIcon.Shield = Shield\nIcon.Calculator = Calculator\nIcon.Contract = Contract\nIcon.Buoy = Buoy\nIcon.Cog = Cog\nIcon.Table = TableIcon\nIcon.Data = Data\nIcon.XClose = XClose\nIcon.Grid = Grid\nIcon.Carousel = Carousel\nIcon.PlusCircle = PlusCircle\nIcon.Info = Info\nIcon.Warning = Warning\nIcon.Error = ErrorIcon\nIcon.ShowMore = ShowMore\nIcon.Tweak = Tweak\nIcon.Download = Download\nIcon.Expand = Expand\nIcon.Collapse = Collapse\nIcon.ShieldCheck = ShieldCheck\nIcon.XCircle = XCircle\nIcon.Play = Play\nIcon.Document = Document\nIcon.Edit = EditIcon\nIcon.Upload = Upload\nIcon.File = FileIcon\nIcon.Delete = Delete\nIcon.Bookmarks = Bookmarks\nIcon.Save = Save\nIcon.Copy = Copy\nIcon.CircleStack = CircleStack\n\nexport default Icon\n","import { useMemo } from 'react'\n\nexport interface IconButtonProps {\n icon?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n /** 'primary' | 'bordered' */\n type?: string\n buttonType?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n size?: 'sm' | 'lg'\n loading?: boolean\n loadingIcon?: React.ReactNode\n title?: string\n [key: string]: any\n}\n\n/**\n * Square icon-only button.\n *\n * @example\n * <IconButton icon={<Icon.Search />} onClick={doSearch} />\n * <IconButton type=\"bordered\" icon={<Icon.Edit />} />\n */\nexport default function IconButton({\n icon,\n onClick,\n type = 'primary',\n buttonType = 'button',\n disabled = false,\n size = 'lg',\n loading = false,\n loadingIcon,\n}: IconButtonProps) {\n const colorScheme = useMemo(() => {\n if (type === 'primary') {\n return 'hover:bg-true-blue bg-usafa-blue dark:bg-independence dark:hover:bg-black-coral'\n }\n if (type === 'bordered') {\n return 'bg-ice hover:bg-ice-dark border border-prussian-blue disabled:border-disabled'\n }\n return ''\n }, [type])\n\n return (\n <button\n type={buttonType}\n disabled={disabled || loading}\n onClick={onClick}\n className={`${size === 'sm' ? 'p-1' : 'p-2'} rounded-lg shadow-lg transition-all duration-150 ${colorScheme} dark:disabled:bg-manatee disabled:bg-disabled disabled:cursor-not-allowed`}\n >\n {loading ? loadingIcon : icon}\n </button>\n )\n}\n","import React from 'react'\n\nexport interface ButtonProps {\n content?: React.ReactNode\n /** Visual style variant */\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger'\n /** Size — controls height, padding, and font size */\n size?: 'sm' | 'md' | 'lg'\n /** HTML button type */\n buttonType?: 'button' | 'submit' | 'reset'\n loading?: boolean\n disabled?: boolean\n /** Inline style overrides (width, etc.). Margins/layout belong in the parent. */\n style?: React.CSSProperties\n /** Leading icon — rendered before content */\n icon?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n /**\n * @deprecated Pass `variant` instead. Kept for API compat — currently no-op.\n * Will be removed in the next major version.\n */\n type?: string\n}\n\nconst VARIANT_CLASSES: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary: [\n 'bg-accent text-white',\n 'hover:bg-accent-hover',\n 'active:bg-accent',\n 'disabled:bg-roman-silver disabled:text-white/70 disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' '),\n\n secondary: [\n 'bg-transparent border border-accent text-accent',\n 'hover:bg-accent hover:text-white',\n 'active:bg-accent-hover active:text-white',\n 'disabled:border-roman-silver disabled:text-roman-silver disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' '),\n\n ghost: [\n 'bg-transparent text-foreground-secondary',\n 'hover:bg-ice dark:hover:bg-oxford-blue-700 hover:text-foreground',\n 'active:bg-ice-dark dark:active:bg-independence',\n 'disabled:text-roman-silver disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' '),\n\n danger: [\n 'bg-status-error text-white',\n 'hover:opacity-90',\n 'active:opacity-100',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-status-error focus-visible:ring-offset-2',\n ].join(' '),\n}\n\nconst SIZE_CLASSES: Record<NonNullable<ButtonProps['size']>, string> = {\n sm: 'h-7 px-3 text-xs gap-1 rounded-md',\n md: 'h-9 px-4 text-sm gap-1.5 rounded-lg',\n lg: 'h-11 px-5 text-sm gap-2 rounded-xl',\n}\n\n/**\n * Primary action button with variant + size system.\n *\n * Width is never hardcoded — set `style={{ width }}` or let the parent grid/flex control it.\n *\n * @example\n * <Button content=\"Save\" onClick={handleSave} />\n * <Button content=\"Delete\" variant=\"danger\" size=\"sm\" />\n * <Button content=\"Cancel\" variant=\"secondary\" />\n * <Button content=\"Loading…\" loading buttonType=\"submit\" />\n */\nexport default function Button({\n content,\n variant = 'primary',\n size = 'md',\n buttonType = 'button',\n loading,\n disabled,\n style,\n icon,\n onClick,\n}: ButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled || loading}\n type={buttonType}\n style={style}\n className={[\n // Base — layout, transitions, focus reset\n 'inline-flex items-center justify-center font-medium',\n 'outline-none transition-colors duration-150 select-none',\n 'whitespace-nowrap',\n SIZE_CLASSES[size],\n VARIANT_CLASSES[variant],\n ].join(' ')}\n >\n {loading ? (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-4 h-4 animate-spin flex-shrink-0\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z\"\n />\n </svg>\n ) : icon ? (\n <span className=\"flex-shrink-0\" aria-hidden=\"true\">{icon}</span>\n ) : null}\n {content}\n </button>\n )\n}\n","import React from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport Button from '../inputs/Button'\n\nexport interface ModalProps {\n /**\n * Max width of the modal panel in pixels (default 600).\n * On narrow viewports the panel fills the screen minus 1 rem on each side.\n * Height is always content-driven — `size[1]` is accepted for backwards\n * compatibility but is no longer used; remove it when convenient.\n */\n size?: [number, number] | [number]\n isOpen?: boolean\n onClose?: () => void\n onOk?: () => void\n onCancel?: () => void\n okText?: string\n cancelText?: string\n hasFooter?: boolean\n title?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * Centred modal dialog powered by Radix Dialog + Framer Motion.\n *\n * Radix handles focus-trap, escape-to-close, and ARIA roles.\n * Framer Motion drives the scale + fade enter/exit animation.\n * prefers-reduced-motion is respected via useReducedMotion().\n *\n * @example\n * <Modal isOpen={open} onClose={() => setOpen(false)} title=\"Confirm\" onOk={handleOk}>\n * Are you sure you want to delete this item?\n * </Modal>\n */\nexport default function Modal({\n size = [600, 400],\n isOpen = false,\n onClose,\n onOk,\n onCancel,\n okText = 'Ok',\n cancelText = 'Cancel',\n hasFooter = true,\n title,\n children,\n}: ModalProps) {\n const reduced = useReducedMotion()\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => { if (!open) onClose?.() }}>\n <Dialog.Portal forceMount>\n {/* ── Backdrop ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/40 z-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: reduced ? 0 : 0.18, ease: 'easeOut' }}\n />\n </Dialog.Overlay>\n )}\n </AnimatePresence>\n\n {/* ── Panel ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Content asChild>\n <motion.div\n className=\"fixed left-1/2 top-1/2 z-modal flex flex-col w-[calc(100%-2rem)] max-h-[90dvh] bg-surface rounded-2xl shadow-xl overflow-hidden focus:outline-none\"\n style={{\n maxWidth: size[0],\n x: '-50%',\n y: '-50%',\n }}\n initial={{ opacity: 0, scale: reduced ? 1 : 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: reduced ? 1 : 0.96 }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n type: 'spring',\n damping: 28,\n stiffness: 380,\n duration: 0.25,\n }\n }\n >\n {/* Header */}\n <div className=\"flex h-14 flex-shrink-0 items-center justify-between border-b border-border px-5\">\n <Dialog.Title className=\"text-base font-semibold text-foreground tracking-tight\">\n {title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n aria-label=\"Close\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-foreground-muted hover:bg-surface-raised hover:text-foreground transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\">\n <path d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\" fill=\"currentColor\" fillRule=\"evenodd\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </Dialog.Close>\n </div>\n\n {/* Body */}\n <div className={`flex-1 overflow-y-auto p-5 ${hasFooter ? '' : 'pb-5'}`}>\n {isOpen && children}\n </div>\n\n {/* Footer */}\n {hasFooter && (\n <div className=\"flex flex-shrink-0 items-center justify-end gap-3 border-t border-border px-5 py-3\">\n <Button\n style={{ width: 90 }}\n content={cancelText}\n onClick={onCancel}\n />\n <Button\n style={{ width: 90 }}\n content={okText}\n onClick={onOk}\n />\n </div>\n )}\n </motion.div>\n </Dialog.Content>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import React from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport Button from '../inputs/Button'\n\nexport interface DrawerProps {\n isOpen?: boolean\n onClose?: () => void\n hasFooter?: boolean\n /** 'left' | 'right' — which edge the panel slides from */\n placement?: 'left' | 'right'\n width?: number\n okText?: string\n cancelText?: string\n onOk?: () => void\n onCancel?: () => void\n title?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * Side-sliding drawer panel powered by Radix Dialog + Framer Motion.\n *\n * Radix handles focus-trap, escape-to-close, and ARIA roles.\n * Framer Motion drives the slide enter/exit animation.\n * prefers-reduced-motion is respected via useReducedMotion().\n *\n * @example\n * <Drawer isOpen={open} placement=\"right\" onClose={() => setOpen(false)} title=\"Filters\">\n * <FilterForm />\n * </Drawer>\n */\nexport default function Drawer({\n isOpen = false,\n onClose,\n hasFooter = true,\n placement = 'right',\n width = 320,\n okText = 'Ok',\n cancelText = 'Cancel',\n onOk,\n onCancel,\n title,\n children,\n}: DrawerProps) {\n const reduced = useReducedMotion()\n const isRight = placement === 'right'\n const hiddenX = isRight ? '100%' : '-100%'\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => { if (!open) onClose?.() }}>\n <Dialog.Portal forceMount>\n {/* ── Backdrop ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/40 z-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: reduced ? 0 : 0.2, ease: 'easeOut' }}\n />\n </Dialog.Overlay>\n )}\n </AnimatePresence>\n\n {/* ── Panel ── */}\n <AnimatePresence>\n {isOpen && (\n <Dialog.Content asChild>\n <motion.div\n className={`fixed top-0 bottom-0 ${isRight ? 'right-0' : 'left-0'} z-modal flex flex-col bg-surface shadow-xl focus:outline-none`}\n style={{ width: `min(calc(100vw - 1rem), ${width}px)` }}\n initial={{ x: reduced ? 0 : hiddenX, opacity: reduced ? 0 : 1 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: reduced ? 0 : hiddenX, opacity: reduced ? 0 : 1 }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n x: {\n type: 'tween',\n duration: 0.26,\n ease: [0.16, 1, 0.3, 1], // ease-out-expo\n },\n opacity: { duration: 0 },\n }\n }\n >\n {/* Header */}\n <div className={`flex h-14 flex-shrink-0 items-center justify-between border-b border-border px-5 ${isRight ? 'flex-row-reverse' : ''}`}>\n <Dialog.Title className=\"text-base font-semibold text-foreground tracking-tight\">\n {title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n aria-label=\"Close drawer\"\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-foreground-muted hover:bg-surface-raised hover:text-foreground transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\">\n <path d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\" fill=\"currentColor\" fillRule=\"evenodd\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </Dialog.Close>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 overflow-y-auto p-5\">\n {isOpen && children}\n </div>\n\n {/* Footer */}\n {hasFooter && (\n <div className={`flex flex-shrink-0 items-center gap-3 border-t border-border px-5 py-3 ${isRight ? 'justify-start' : 'justify-end'}`}>\n <Button style={{ width: 90 }} content={cancelText} onClick={onCancel} />\n <Button style={{ width: 90 }} content={okText} onClick={onOk} />\n </div>\n )}\n </motion.div>\n </Dialog.Content>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\n\nexport interface TooltipProps {\n children: React.ReactNode\n /** The text or node shown inside the tooltip */\n title: React.ReactNode\n /** Which side of the trigger the tooltip appears on */\n placement?: 'top' | 'right' | 'bottom' | 'left'\n /** Delay before showing, ms (default 300) */\n delayDuration?: number\n /** Offset from trigger in px (default 8) */\n sideOffset?: number\n}\n\n// Each placement animates in from the opposite edge (toward the trigger)\nconst ANIMATION: Record<NonNullable<TooltipProps['placement']>, string> = {\n top: 'data-[state=delayed-open]:animate-tooltip-in-top',\n bottom: 'data-[state=delayed-open]:animate-tooltip-in-bottom',\n left: 'data-[state=delayed-open]:animate-tooltip-in-left',\n right: 'data-[state=delayed-open]:animate-tooltip-in-right',\n}\n\n/**\n * Tooltip powered by Radix Tooltip.\n *\n * Radix handles keyboard navigation (Escape), pointer events, and ARIA.\n * Each placement animates in from the correct direction.\n * Wrap your app in `<TooltipProvider>` (re-exported below) to share a\n * single provider instead of nesting one per tooltip.\n *\n * @example\n * <TooltipProvider>\n * <Tooltip title=\"Delete record\" placement=\"top\">\n * <IconButton icon={<TrashIcon />} />\n * </Tooltip>\n * </TooltipProvider>\n */\nexport default function Tooltip({\n children,\n title,\n placement = 'top',\n delayDuration = 300,\n sideOffset = 8,\n}: TooltipProps) {\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"inline-flex\">{children}</span>\n </TooltipPrimitive.Trigger>\n\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={placement}\n sideOffset={sideOffset}\n className={[\n // Layout + typography\n 'pointer-events-none z-[500000] max-w-[220px] px-2.5 py-1.5',\n // Inverted surface: dark on light, light on dark — both readable\n 'bg-foreground text-background',\n 'text-xs font-medium leading-snug',\n // Shape + shadow\n 'rounded-md shadow-md',\n // Out animation (always the same — just fade)\n 'data-[state=closed]:animate-tooltip-out',\n // In animation — direction-aware\n ANIMATION[placement],\n ].join(' ')}\n >\n {title}\n <TooltipPrimitive.Arrow\n width={10}\n height={5}\n className=\"fill-foreground\"\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )\n}\n\nexport { TooltipPrimitive as TooltipPrimitives }\nexport const TooltipProvider = TooltipPrimitive.Provider\n","import React, { useEffect, useState } from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nexport interface TabItem {\n key: string\n title: React.ReactNode\n content: React.ReactNode\n}\n\nexport interface TabsProps {\n tabs?: TabItem[]\n onTabChange?: (prev: TabItem | undefined, next: TabItem | undefined) => void\n onTabClose?: (key: string) => void\n /** Only mount the active tab's content */\n isLazy?: boolean\n tabsClosable?: boolean\n defaultActiveTab?: string\n}\n\n/**\n * Scrollable pill-style tabs powered by Radix Tabs.\n *\n * Radix handles roving-tabindex keyboard navigation and ARIA roles.\n * Rounded pill style, fully themed via semantic design tokens.\n * Supports dynamic tab add/remove with automatic activation.\n *\n * @example\n * <Tabs\n * tabs={[\n * { key: 'v1', title: 'Vessel 1', content: <Panel1 /> },\n * { key: 'v2', title: 'Vessel 2', content: <Panel2 /> },\n * ]}\n * tabsClosable\n * onTabClose={(key) => removetab(key)}\n * />\n */\nexport default function Tabs({\n tabs = [],\n onTabChange,\n onTabClose,\n isLazy,\n tabsClosable = true,\n defaultActiveTab,\n}: TabsProps) {\n const [value, setValue] = useState<string>(() => defaultActiveTab ?? tabs[0]?.key ?? '')\n\n // Sync when external defaultActiveTab changes\n useEffect(() => {\n if (defaultActiveTab) setValue(defaultActiveTab)\n }, [defaultActiveTab])\n\n // When tabs are added / removed, keep a valid active tab\n useEffect(() => {\n if (tabs.length === 0) {\n setValue('')\n return\n }\n const exists = tabs.find((t) => t.key === value)\n if (!exists) {\n // Activate last tab (mimics original behaviour on close)\n setValue(tabs[tabs.length - 1].key)\n }\n }, [tabs, value])\n\n const handleValueChange = (newValue: string) => {\n const prev = tabs.find((t) => t.key === value)\n const next = tabs.find((t) => t.key === newValue)\n onTabChange?.(prev, next)\n setValue(newValue)\n }\n\n const toPreviousTab = () => {\n const idx = tabs.findIndex((t) => t.key === value)\n if (idx > 0) handleValueChange(tabs[idx - 1].key)\n }\n\n const toNextTab = () => {\n const idx = tabs.findIndex((t) => t.key === value)\n if (idx < tabs.length - 1) handleValueChange(tabs[idx + 1].key)\n }\n\n if (tabs.length === 0) return null\n\n return (\n <TabsPrimitive.Root\n value={value}\n onValueChange={handleValueChange}\n className=\"h-full max-w-full flex flex-col gap-2\"\n >\n {/* Tab strip */}\n <div className=\"bg-surface border border-border rounded-lg flex items-center justify-between flex-shrink-0 w-full p-1 overflow-hidden\">\n {/* Left chevron */}\n <button\n type=\"button\"\n onClick={toPreviousTab}\n aria-label=\"Previous tab\"\n className=\"cursor-pointer rounded-lg transition-colors duration-150 hover:bg-surface-raised text-foreground-secondary hover:text-foreground rotate-180 flex-shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} className=\"h-6 w-6\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n\n {/* Pills list */}\n <TabsPrimitive.List\n aria-label=\"Tabs\"\n className=\"flex-1 flex items-center gap-1 overflow-x-auto overflow-y-hidden rounded-lg scroll-smooth snap-x snap-mandatory hidden-scrollbar\"\n >\n {tabs.map((tab) => (\n <TabsPrimitive.Trigger\n key={tab.key}\n value={tab.key}\n className=\"snap-start snap-always flex items-center justify-between gap-2 px-3 py-2 rounded-3xl cursor-pointer transition-all duration-200 select-none h-10 flex-1 min-w-[120px] max-w-[220px] flex-shrink-0\n text-foreground-secondary bg-surface-raised\n hover:bg-surface hover:text-foreground\n data-[state=active]:bg-accent data-[state=active]:text-accent-foreground\n focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <span className=\"truncate text-sm\">{tab.title}</span>\n {tabsClosable && (\n <span\n role=\"button\"\n aria-label={`Close ${tab.title}`}\n onClick={(e) => {\n e.stopPropagation()\n onTabClose?.(tab.key)\n }}\n className=\"flex-shrink-0 rounded hover:bg-black/10 p-0.5 transition-colors\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n )}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n\n {/* Right chevron */}\n <button\n type=\"button\"\n onClick={toNextTab}\n aria-label=\"Next tab\"\n className=\"cursor-pointer rounded-lg transition-colors duration-150 hover:bg-surface-raised text-foreground-secondary hover:text-foreground flex-shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} className=\"h-6 w-6\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n {/* Content pane */}\n <div className=\"p-2 rounded-lg w-full flex-1 min-h-0 bg-surface border border-border overflow-hidden\">\n {isLazy ? (\n // Mount only the active content\n tabs\n .filter((t) => t.key === value)\n .map((t) => (\n <TabsPrimitive.Content key={t.key} value={t.key} className=\"w-full h-full focus:outline-none\">\n {t.content}\n </TabsPrimitive.Content>\n ))\n ) : (\n // Pre-mount all, hide non-active via Radix\n tabs.map((t) => (\n <TabsPrimitive.Content key={t.key} value={t.key} className=\"w-full h-full focus:outline-none\" forceMount>\n <div className={`w-full h-full ${t.key === value ? 'block' : 'hidden'}`}>\n {t.content}\n </div>\n </TabsPrimitive.Content>\n ))\n )}\n </div>\n </TabsPrimitive.Root>\n )\n}\n","import React from 'react'\nimport * as Accordion from '@radix-ui/react-accordion'\n\nexport interface TreeNode {\n key: string\n label: string\n nodeData?: any\n parentLabel?: string\n children?: TreeNode[]\n}\n\nexport interface TreeItemClickPayload {\n isParent: boolean\n key: string\n label: string\n data?: any\n parentLabel?: string\n}\n\nexport interface TreeProps {\n nodes: TreeNode[]\n onNodeClick: (payload: TreeItemClickPayload) => void\n defaultExpandAll?: boolean\n defaultExpandedKeys?: string[]\n}\n\n/** ─────────────────── helpers ─────────────────── */\nconst isParent = (item: TreeNode) =>\n Boolean(item.children && item.children.length > 0)\n\n/** ─────────────────── single node ─────────────────── */\ninterface NodeProps {\n item: TreeNode\n onNodeClick: TreeProps['onNodeClick']\n defaultExpandAll: boolean\n defaultExpandedKeys: string[]\n depth?: number\n}\n\nfunction TreeNodeItem({\n item,\n onNodeClick,\n defaultExpandAll,\n defaultExpandedKeys,\n depth = 0,\n}: NodeProps) {\n if (!isParent(item)) {\n return (\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2.5 cursor-pointer select-none group text-left rounded-md px-2 py-1.5 hover:bg-surface-raised transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n style={{ paddingLeft: depth * 12 + 8 }}\n onClick={() =>\n onNodeClick({\n isParent: false,\n key: item.key,\n label: item.label,\n data: item.nodeData,\n parentLabel: item.parentLabel,\n })\n }\n >\n {/* Leaf dot */}\n <span className=\"w-1.5 h-1.5 rounded-full flex-shrink-0 bg-foreground-muted group-hover:bg-accent transition-colors duration-150\" />\n <span className=\"text-sm text-foreground-secondary group-hover:text-foreground transition-colors duration-150\">\n {item.label}\n </span>\n </button>\n )\n }\n\n const initialOpen =\n defaultExpandAll || defaultExpandedKeys.includes(item.key)\n ? [item.key]\n : []\n\n return (\n <Accordion.Root\n type=\"multiple\"\n defaultValue={initialOpen}\n style={{ paddingLeft: depth * 12 }}\n >\n <Accordion.Item value={item.key} className=\"border-none\">\n <Accordion.Trigger className=\"flex items-center gap-2 cursor-pointer py-1.5 px-2 group focus:outline-none focus-visible:ring-2 focus-visible:ring-accent w-full text-left rounded-md hover:bg-surface-raised transition-colors duration-150\">\n {/* Chevron — rotates on open/close */}\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n className=\"h-3.5 w-3.5 flex-shrink-0 text-foreground-muted transition-transform duration-200 group-data-[state=open]:rotate-0 group-data-[state=closed]:-rotate-90\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n <span\n className=\"text-sm font-semibold text-foreground select-none\"\n onClick={() =>\n onNodeClick({\n isParent: true,\n key: item.key,\n label: item.label,\n data: item.nodeData,\n parentLabel: item.parentLabel,\n })\n }\n >\n {item.label}\n </span>\n </Accordion.Trigger>\n\n <Accordion.Content className=\"overflow-hidden data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\">\n <div className=\"ml-3.5 border-l border-border py-0.5\">\n {item.children!.map((child) => (\n <TreeNodeItem\n key={child.key}\n item={child}\n onNodeClick={onNodeClick}\n defaultExpandAll={defaultExpandAll}\n defaultExpandedKeys={defaultExpandedKeys}\n depth={depth + 1}\n />\n ))}\n </div>\n </Accordion.Content>\n </Accordion.Item>\n </Accordion.Root>\n )\n}\n\n/** ─────────────────── public component ─────────────────── */\n\n/**\n * Hierarchical tree view powered by Radix Accordion.\n *\n * Each parent node is an independent Accordion.Root with type=\"multiple\" so\n * sibling branches expand independently. Leaf nodes are plain buttons.\n * Expand/collapse is animated via CSS keyframes.\n *\n * @example\n * <Tree\n * nodes={fleetTree}\n * onNodeClick={({ key, isParent }) => selectNode(key)}\n * defaultExpandAll\n * />\n */\nexport default function Tree({\n nodes,\n onNodeClick,\n defaultExpandAll = false,\n defaultExpandedKeys = [],\n}: TreeProps) {\n return (\n <div className=\"p-1 w-full\">\n {nodes.map((item) => (\n <TreeNodeItem\n key={item.key}\n item={item}\n onNodeClick={onNodeClick}\n defaultExpandAll={defaultExpandAll}\n defaultExpandedKeys={defaultExpandedKeys}\n />\n ))}\n </div>\n )\n}\n","import React from 'react'\nimport * as ToggleGroup from '@radix-ui/react-toggle-group'\n\nexport interface ToggleItem {\n key: string\n label?: React.ReactNode\n icon?: React.ReactNode\n}\n\nexport interface ToggleButtonProps {\n items: ToggleItem[]\n onChange: (key: string) => void\n activeKey: string\n}\n\n/**\n * Segmented toggle-button group powered by Radix ToggleGroup.\n *\n * Radix handles keyboard navigation (arrow keys), focus ring, and\n * `role=\"group\"` / `aria-pressed` ARIA attributes.\n *\n * @example\n * <ToggleButton\n * items={[\n * { key: 'grid', icon: <Icon.Grid /> },\n * { key: 'list', icon: <Icon.List /> },\n * ]}\n * activeKey={view}\n * onChange={setView}\n * />\n */\nexport default function ToggleButton({ items, onChange, activeKey }: ToggleButtonProps) {\n return (\n <ToggleGroup.Root\n type=\"single\"\n value={activeKey}\n onValueChange={(val) => {\n // Radix passes '' when user clicks the already-selected item → keep current\n if (val) onChange(val)\n }}\n className=\"flex items-center\"\n >\n {items.map((item, index) => (\n <ToggleGroup.Item\n key={item.key}\n value={item.key}\n aria-label={typeof item.label === 'string' ? item.label : item.key}\n className={[\n index === 0 && 'rounded-l-lg border-r border-ice-dark',\n index === items.length - 1 && 'rounded-r-lg border-l border-ice-dark dark:border-manatee',\n 'p-2 cursor-pointer transition-all duration-300',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-usafa-blue',\n 'bg-ice dark:bg-manatee hover:bg-ice-dark dark:hover:bg-black-coral',\n 'data-[state=on]:bg-ice-dark dark:data-[state=on]:bg-indigo-dye',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {item.icon ?? item.label}\n </ToggleGroup.Item>\n ))}\n </ToggleGroup.Root>\n )\n}\n","import React, { createContext, useContext, useState } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\n\n/** ─────────────────── types ─────────────────── */\nexport type NotificationType = 'info' | 'success' | 'warning' | 'danger'\n\nexport type NotificationPosition =\n | 'top-right' | 'top-left' | 'top-center'\n | 'bottom-right' | 'bottom-left' | 'bottom-center'\n\nexport interface NotificationPayload {\n title: React.ReactNode\n description?: React.ReactNode\n /** Auto-dismiss duration in ms (default 4000) */\n duration?: number\n type?: NotificationType\n}\n\ninterface NotificationEntry extends NotificationPayload {\n id: number\n}\n\ninterface NotificationContextValue {\n open: (payload: NotificationPayload) => void\n close: (id: number) => void\n}\n\n/** ─────────────────── context ─────────────────── */\nconst NotificationContext = createContext<NotificationContextValue>({\n open: () => undefined,\n close: () => undefined,\n})\n\n/** ─────────────────── helpers ─────────────────── */\nconst TYPE_BG: Record<NotificationType, string> = {\n info: 'bg-status-info',\n success: 'bg-status-success',\n warning: 'bg-status-warning',\n danger: 'bg-status-error',\n}\n\n// Viewport positioning classes per position\nconst VIEWPORT_CLASSES: Record<NotificationPosition, string> = {\n 'top-right': 'fixed top-14 right-0 flex flex-col items-end',\n 'top-left': 'fixed top-14 left-0 flex flex-col items-start',\n 'top-center': 'fixed top-14 left-1/2 flex flex-col items-center -translate-x-1/2',\n 'bottom-right': 'fixed bottom-4 right-0 flex flex-col-reverse items-end',\n 'bottom-left': 'fixed bottom-4 left-0 flex flex-col-reverse items-start',\n 'bottom-center': 'fixed bottom-4 left-1/2 flex flex-col-reverse items-center -translate-x-1/2',\n}\n\n// Initial animation state per position\nfunction getInitialMotion(pos: NotificationPosition, reduced: boolean | null) {\n if (reduced) return { opacity: 0, x: 0, y: 0, scale: 1 }\n const right = pos.endsWith('right')\n const left = pos.endsWith('left')\n const center = pos.endsWith('center')\n const bottom = pos.startsWith('bottom')\n return {\n opacity: 0,\n x: right ? 40 : left ? -40 : 0,\n y: center ? (bottom ? 12 : -12) : 0,\n scale: center ? 0.96 : 1,\n }\n}\n\nfunction TypeIcon({ type }: { type: NotificationType }) {\n if (type === 'success') {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )\n }\n if (type === 'info') {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" /><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n )\n }\n if (type === 'warning') {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" /><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n )\n }\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" /><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n )\n}\n\n/** ─────────────────── animated toast item ─────────────────── */\nfunction NotificationItem({\n n,\n pos,\n onClose,\n reduced,\n}: {\n n: NotificationEntry\n pos: NotificationPosition\n onClose: (id: number) => void\n reduced: boolean | null\n}) {\n const [hovered, setHovered] = useState(false)\n const initial = getInitialMotion(pos, reduced)\n const center = pos.endsWith('center')\n const duration = n.duration ?? 4000\n // Only show the progress bar when there is a finite, positive auto-dismiss\n // duration and the user has not requested reduced motion.\n const showProgress = !reduced && isFinite(duration) && duration > 0\n\n return (\n <motion.div\n layout\n initial={initial}\n animate={{ opacity: 1, x: 0, y: 0, scale: 1 }}\n exit={{ ...initial, opacity: 0 }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n opacity: { duration: 0.14 },\n x: { type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] },\n y: { type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] },\n scale: { type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] },\n layout: { duration: 0.18 },\n }\n }\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <Toast.Root\n open\n duration={duration}\n onOpenChange={(o) => { if (!o) onClose(n.id) }}\n className={[\n 'w-[300px] rounded-md shadow-lg overflow-hidden',\n center ? 'mx-auto' : '',\n 'focus:outline-none',\n TYPE_BG[n.type ?? 'info'],\n ].join(' ')}\n >\n {/* Content row ──────────────────────────────────────────────── */}\n <div className=\"flex items-start gap-3 p-3 pr-2.5\">\n <span className=\"mt-0.5 flex-shrink-0 text-white/90\">\n <TypeIcon type={n.type ?? 'info'} />\n </span>\n\n <div className=\"flex-1 min-w-0\">\n <Toast.Title className=\"text-sm font-semibold text-white leading-snug\">\n {n.title}\n </Toast.Title>\n {n.description && (\n <Toast.Description className=\"mt-0.5 text-xs text-white/75 leading-relaxed\">\n {n.description}\n </Toast.Description>\n )}\n </div>\n\n <Toast.Action asChild altText=\"Close\">\n <button\n aria-label=\"Close\"\n onClick={() => onClose(n.id)}\n className=\"flex-shrink-0 mt-0.5 rounded p-1 text-white/60 hover:text-white hover:bg-white/15 transition-colors duration-100 focus:outline-none focus-visible:ring-1 focus-visible:ring-white/50\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 3L3 9M3 3l6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </Toast.Action>\n </div>\n\n {/* Countdown progress bar ────────────────────────────────────\n Lives inside overflow-hidden, so the bottom corners are\n clipped to match the card's border-radius automatically.\n The fill is a CSS animation (scaleX 1→0) so it costs zero\n JS — no intervals, no RAF. animationPlayState mirrors\n Radix's own hover-pause, keeping both in exact sync. */}\n {showProgress && (\n <div className=\"relative h-[3px] bg-white/20 overflow-hidden\">\n <div\n className=\"absolute inset-0 bg-white/60 [transform-origin:left]\"\n style={{\n animation: `notification-progress ${duration}ms linear forwards`,\n animationPlayState: hovered ? 'paused' : 'running',\n }}\n />\n </div>\n )}\n </Toast.Root>\n </motion.div>\n )\n}\n\n/** ─────────────────── provider ─────────────────── */\n\n/**\n * Wrap your app in `NotificationProvider`, then call `useNotification()` anywhere inside.\n *\n * @param position One of 6 viewport positions (default: `top-right`)\n *\n * @example\n * <NotificationProvider position=\"bottom-right\">\n * <App />\n * </NotificationProvider>\n */\nexport function NotificationProvider({\n children,\n position = 'top-right',\n}: {\n children: React.ReactNode\n position?: NotificationPosition\n}) {\n const [notifications, setNotifications] = useState<NotificationEntry[]>([])\n const reduced = useReducedMotion()\n\n const open = (payload: NotificationPayload) => {\n setNotifications((prev) => [\n ...prev,\n { duration: 4000, ...payload, id: Date.now() + Math.random() },\n ])\n }\n\n const close = (id: number) => {\n setNotifications((prev) => prev.filter((n) => n.id !== id))\n }\n\n return (\n <NotificationContext.Provider value={{ open, close }}>\n <Toast.Provider swipeDirection={\n position.endsWith('right') ? 'right' :\n position.endsWith('left') ? 'left' : 'up'\n }>\n {children}\n\n <Toast.Viewport\n asChild\n className={[\n VIEWPORT_CLASSES[position],\n 'z-[500000] gap-2 w-[332px] p-4 outline-none',\n ].join(' ')}\n >\n <ul>\n <AnimatePresence initial={false}>\n {notifications.map((n) => (\n <NotificationItem\n key={n.id}\n n={n}\n pos={position}\n onClose={close}\n reduced={reduced}\n />\n ))}\n </AnimatePresence>\n </ul>\n </Toast.Viewport>\n </Toast.Provider>\n </NotificationContext.Provider>\n )\n}\n\n/** ─────────────────── hook ─────────────────── */\nexport function useNotification() {\n const { open } = useContext(NotificationContext)\n return {\n info: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'info', ...props }),\n success: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'success', ...props }),\n warning: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'warning', ...props }),\n danger: (props: Omit<NotificationPayload, 'type'>) => open({ type: 'danger', ...props }),\n }\n}\n","import React, { useEffect, useMemo } from 'react'\n\nexport interface LoadingSpinnerProps {\n /** Text animated letter by letter */\n prompt: string\n}\n\n/**\n * Full-screen loading overlay with a spinning shape and staggered text reveal.\n *\n * @example\n * {isLoading && <LoadingSpinner prompt=\"Loading data...\" />}\n */\nexport default function LoadingSpinner({ prompt }: LoadingSpinnerProps) {\n const letterRefs = useMemo<(HTMLSpanElement | null)[]>(() => [], [])\n const letters = prompt.split('')\n\n useEffect(() => {\n const timeouts: ReturnType<typeof setTimeout>[] = []\n if (letterRefs.length === letters.length) {\n letterRefs.forEach((ref, index) => {\n const t = setTimeout(() => {\n ref?.classList.add('slowly-appear')\n }, index * 100)\n timeouts.push(t)\n })\n }\n return () => timeouts.forEach(clearTimeout)\n }, [letterRefs, letters.length])\n\n return (\n <div className=\"fixed top-0 bottom-0 right-0 left-0 bg-oxford-blue-700-opaque z-[8000000] flex flex-col gap-5 items-center justify-start pt-80\">\n <div className=\"border-r-prussian-blue border-l-prussian-blue border-t-white border-b-white border-[10px] w-[80px] h-[80px] rounded-xl shapeshift\" />\n <div className=\"text-prussian-blue dark:text-white text-3xl font-bold\">\n {letters.map((letter, index) => (\n <span\n key={index}\n className=\"select-none\"\n ref={(ref) => {\n letterRefs[index] = ref\n }}\n >\n {letter}\n </span>\n ))}\n </div>\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\nexport interface FadingBaseProps {\n className?: string\n /** Controls mount/unmount with fade transition */\n isMounted?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Fade-in / fade-out page container.\n *\n * Replaces `react-transition-group` with a pure CSS opacity transition.\n * The component mounts on `isMounted=true` and unmounts after the 300ms\n * fade-out completes on `isMounted=false`.\n *\n * Uses CSS `dark:` class for the glass effect — no ThemeContext dependency.\n *\n * @example\n * <FadingBase isMounted={isPageVisible}>\n * <PageContent />\n * </FadingBase>\n */\nexport default function FadingBase({\n className = '',\n isMounted = false,\n children,\n}: FadingBaseProps) {\n const [shouldRender, setShouldRender] = useState(isMounted)\n const [visible, setVisible] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n if (isMounted) {\n setShouldRender(true)\n // rAF gives the DOM time to paint before triggering the transition\n const rafId = requestAnimationFrame(() => setVisible(true))\n return () => cancelAnimationFrame(rafId)\n } else {\n setVisible(false)\n timerRef.current = setTimeout(() => setShouldRender(false), 300)\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }\n }, [isMounted])\n\n if (!shouldRender) return null\n\n return (\n <div\n className={`w-full calculated-height pl-2 pr-2 pb-2 transition-opacity duration-300 ${visible ? 'opacity-100' : 'opacity-0'}`}\n >\n <div className={`bg-ice dark:glassmorphism w-full h-full rounded-lg p-2 ${className}`}>\n {children}\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface ListItem {\n key: string | number\n label: React.ReactNode\n [key: string]: any\n}\n\nexport interface ListProps {\n items: ListItem[]\n onItemClick: (item: ListItem) => void\n activeKey?: string | number\n}\n\n/**\n * Vertical clickable list with active-item highlight.\n *\n * @example\n * <List\n * items={vessels.map(v => ({ key: v.imo, label: v.name }))}\n * activeKey={selectedImo}\n * onItemClick={(item) => setSelected(item.key)}\n * />\n */\nexport default function List({ items, onItemClick, activeKey }: ListProps) {\n return (\n <div role=\"listbox\">\n {items.map((item) => (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={activeKey === item.key}\n className={`hover:bg-ice-dark dark:hover:bg-independence cursor-pointer p-3 border-b border-b-ice-dark dark:border-b-independence transition-all duration-300 ${\n activeKey === item.key ? 'bg-ice-dark dark:bg-independence' : ''\n }`}\n onClick={() => onItemClick(item)}\n >\n {item.label}\n </div>\n ))}\n </div>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport Tooltip from './Tooltip'\nimport IconButton from './IconButton'\n\nexport interface ScalableContainerProps {\n width?: React.CSSProperties['width']\n height?: React.CSSProperties['height']\n children?: React.ReactNode\n /** CSS class applied to the children wrapper when expanded */\n assignClassOnClick?: string\n}\n\n/**\n * Container that can be expanded to fill its parent, with a tooltip-annotated\n * expand/collapse icon button.\n *\n * @example\n * <ScalableContainer width=\"50%\" height={300}>\n * <Chart data={data} />\n * </ScalableContainer>\n */\nexport default function ScalableContainer({\n width,\n height,\n children,\n assignClassOnClick,\n}: ScalableContainerProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [isScaled, setScaled] = useState(false)\n const [wrapperClass, setWrapperClass] = useState('')\n\n const onClick = () => {\n const next = !isScaled\n setScaled(next)\n setTimeout(() => {\n containerRef.current?.scrollIntoView({ behavior: 'smooth' })\n if (assignClassOnClick) {\n setWrapperClass(next ? assignClassOnClick : '')\n }\n }, 200)\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n width: isScaled ? '100%' : width,\n height: isScaled ? '100%' : height,\n }}\n className=\"rounded-lg bg-ice-dark dark:bg-prussian-blue flex flex-col transition-all duration-300 origin-center\"\n >\n <div className=\"p-2 w-max\">\n <Tooltip placement=\"right\" title={isScaled ? 'Collapse' : 'Expand'}>\n <IconButton\n onClick={onClick}\n icon={\n isScaled ? (\n /* Collapse (arrows-pointing-in) */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#fff\" className=\"w-5 h-5\">\n <path fillRule=\"evenodd\" d=\"M3.22 3.22a.75.75 0 011.06 0l3.97 3.97V4.5a.75.75 0 011.5 0V9a.75.75 0 01-.75.75H4.5a.75.75 0 010-1.5h2.69L3.22 4.28a.75.75 0 010-1.06zm17.56 0a.75.75 0 010 1.06l-3.97 3.97h2.69a.75.75 0 010 1.5H15a.75.75 0 01-.75-.75V4.5a.75.75 0 011.5 0v2.69l3.97-3.97a.75.75 0 011.06 0zM3.75 15a.75.75 0 01.75-.75H9a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-2.69l-3.97 3.97a.75.75 0 01-1.06-1.06l3.97-3.97H4.5a.75.75 0 01-.75-.75zm10.5 0a.75.75 0 01.75-.75h4.5a.75.75 0 01.75.75 .75.75 0 01-.75.75h-2.69l3.97 3.97a.75.75 0 11-1.06 1.06l-3.97-3.97v2.69a.75.75 0 01-1.5 0V15z\" clipRule=\"evenodd\" />\n </svg>\n ) : (\n /* Expand (arrows-pointing-out) */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#fff\" className=\"w-5 h-5\">\n <path fillRule=\"evenodd\" d=\"M15 3a.75.75 0 01.75-.75h5.25A.75.75 0 0121 3v5.25a.75.75 0 01-1.5 0V4.81l-5.72 5.72a.75.75 0 11-1.06-1.06L18.19 3.75H15.75A.75.75 0 0115 3zM3 15a.75.75 0 01.75-.75h2.44l5.72-5.72a.75.75 0 111.06 1.06l-5.72 5.72v2.44a.75.75 0 01-1.5 0V15.75A.75.75 0 013 15zm0-11.25A.75.75 0 013.75 3h5.25a.75.75 0 010 1.5H4.81l5.72 5.72a.75.75 0 11-1.06 1.06L3.75 5.56V8.25a.75.75 0 01-1.5 0V3.75A.75.75 0 013 3zm18 12a.75.75 0 01-.75.75h-5.25a.75.75 0 010-1.5h2.44l-5.72-5.72a.75.75 0 111.06-1.06l5.72 5.72v-2.44a.75.75 0 011.5 0V15z\" clipRule=\"evenodd\" />\n </svg>\n )\n }\n />\n </Tooltip>\n </div>\n <div className={wrapperClass}>{children}</div>\n </div>\n )\n}\n","import React from 'react'\nimport Button from '../inputs/Button'\n\nexport interface GridCardItem {\n key: string | number\n title: React.ReactNode\n description?: React.ReactNode\n /** Image URL or JSX element */\n cover?: string | React.ReactNode\n enabled?: boolean\n /** Arbitrary route or payload — passed back to onOpen */\n to?: string\n [key: string]: any\n}\n\nexport interface GridCardProps {\n item: GridCardItem\n buttonText?: string\n /** Called when the button is clicked. Receives the full item. */\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Application card tile (grid layout).\n *\n * Decoupled from React Router — navigation is delegated to the `onOpen` prop.\n *\n * @example\n * <GridCard\n * item={{ key: 'reports', title: 'Reports', enabled: true, to: '/reports' }}\n * onOpen={({ to }) => navigate(to!)}\n * />\n */\nexport default function GridCard({ item, buttonText = 'Open Application', onOpen }: GridCardProps) {\n return (\n <div className=\"flex flex-col w-[200px] h-[250px] rounded-lg bg-ice dark:bg-independence items-center justify-between p-2 shadow-2xl\">\n <div className=\"text-prussian-blue dark:text-white text-lg font-bold text-center h-1/4\">\n <h2>{item.title}</h2>\n </div>\n <div className=\"h-1/4 flex items-center justify-center\">\n {typeof item.cover === 'string' ? (\n <img src={item.cover} alt=\"Grid Card Cover\" />\n ) : (\n item.cover\n )}\n </div>\n <div className=\"text-prussian-blue text-sm dark:text-white text-center h-1/4\">\n <p>{item.description}</p>\n </div>\n <div>\n <Button\n disabled={!item.enabled}\n style={{ width: 'max-content', padding: '0 8px', margin: '0' }}\n content={buttonText}\n onClick={() => onOpen?.(item)}\n />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport Button from '../inputs/Button'\nimport { GridCardItem } from './GridCard'\n\nexport interface OpaqueGridCardProps {\n item: GridCardItem\n isRight?: boolean\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Opaque carousel variant of GridCard (left or right edge of the carousel).\n *\n * Decoupled from React Router and ThemeContext.\n * Uses CSS `dark:` classes instead of `useTheme()`.\n *\n * @example\n * <OpaqueGridCard item={sideItem} isRight onOpen={({ to }) => navigate(to!)} />\n */\nexport default function OpaqueGridCard({\n item,\n isRight = false,\n buttonText = 'Open Application',\n onOpen,\n}: OpaqueGridCardProps) {\n return (\n <div\n className={`flex flex-col w-[200px] h-[250px] rounded-lg items-center p-2 ${\n !isRight\n ? 'opaque-carousel-card-left dark:opaque-carousel-card-dark-left'\n : 'opaque-carousel-card-right dark:opaque-carousel-card-dark-right'\n }`}\n >\n <div\n className={`${\n !isRight\n ? 'opaque-carousel-card-text-right dark:opaque-carousel-card-text-dark-right'\n : 'opaque-carousel-card-text-left dark:opaque-carousel-card-text-dark-left'\n } text-prussian-blue dark:text-white text-lg font-bold text-center h-1/4 select-none`}\n >\n <h2>{item.title}</h2>\n </div>\n <div className=\"h-1/4 flex items-center justify-center\">\n {typeof item.cover === 'string' ? (\n <img src={item.cover} alt=\"Grid Card Cover\" />\n ) : (\n item.cover\n )}\n </div>\n <div\n className={`${\n !isRight\n ? 'opaque-carousel-card-text-right dark:opaque-carousel-card-text-dark-right'\n : 'opaque-carousel-card-text-left dark:opaque-carousel-card-text-dark-left'\n } text-prussian-blue dark:text-white text-center h-1/4 select-none text-sm`}\n >\n <p>{item.description}</p>\n </div>\n <div>\n <Button\n style={{\n width: 'max-content',\n padding: '0 8px',\n margin: '0',\n background: !isRight\n ? 'linear-gradient(90deg, #0353A4 6.29%, rgba(3, 83, 164, 0) 97.35%)'\n : 'linear-gradient(270deg, #0353A4 3.97%, rgba(3, 83, 164, 0) 94.04%)',\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n content={\n <div\n className={\n !isRight\n ? 'opaque-carousel-card-text-dark-right'\n : 'opaque-carousel-card-text-dark-left'\n }\n >\n {buttonText}\n </div>\n }\n onClick={() => onOpen?.(item)}\n />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport GridCard, { GridCardItem } from './GridCard'\n\nexport interface CatalogGridProps {\n items: GridCardItem[]\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Wrapping flex grid of `GridCard` tiles.\n */\nexport default function CatalogGrid({ items, buttonText, onOpen }: CatalogGridProps) {\n return (\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item) => (\n <GridCard key={item.key} item={item} buttonText={buttonText} onOpen={onOpen} />\n ))}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport GridCard, { GridCardItem } from './GridCard'\nimport OpaqueGridCard from './OpaqueGridCard'\nimport COLORS from '../../utils/colors'\n\nexport interface CatalogCarouselProps {\n items: GridCardItem[]\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Three-card carousel (previous → active (scaled) → next).\n *\n * Decoupled from ThemeContext — uses CSS `dark:` classes.\n */\nexport default function CatalogCarousel({ items, buttonText, onOpen }: CatalogCarouselProps) {\n const [activeIndex, setActiveIndex] = useState(0)\n const [indexPool, setIndexPool] = useState<number[]>([])\n const cardRefs = useRef<{ cardIndex: number; ref: HTMLDivElement }[]>([])\n\n const getIndexes = useMemo(() => {\n let nextIndex = activeIndex + 1\n let previousIndex = activeIndex - 1\n if (activeIndex === 0) previousIndex = items.length - 1\n if (activeIndex === items.length - 1) nextIndex = 0\n return { previousIndex, nextIndex }\n }, [activeIndex, items.length])\n\n useEffect(() => {\n const { nextIndex, previousIndex } = getIndexes\n let indexes = [previousIndex, activeIndex, nextIndex]\n if (activeIndex !== 0 && activeIndex !== items.length - 1) {\n indexes = [...indexes].sort((a, b) => a - b)\n }\n setIndexPool(indexes)\n\n const timeouts: ReturnType<typeof setTimeout>[] = []\n cardRefs.current.forEach(({ cardIndex, ref }) => {\n if (cardIndex !== 1) {\n ref.classList.remove('animate-in')\n const t = setTimeout(() => ref.classList.add('animate-in'), 50)\n timeouts.push(t)\n }\n if (cardIndex === 1) {\n ref.classList.remove('scale-125')\n const t2 = setTimeout(() => {\n if (cardIndex === 1) ref.classList.add('scale-125')\n }, 100)\n timeouts.push(t2)\n }\n })\n return () => timeouts.forEach(clearTimeout)\n }, [activeIndex, getIndexes, items.length])\n\n const nextApp = () =>\n setActiveIndex((prev) => (prev + 1 === items.length ? 0 : prev + 1))\n\n const previousApp = () =>\n setActiveIndex((prev) => (prev - 1 === -1 ? items.length - 1 : prev - 1))\n\n return (\n <div className=\"flex items-center justify-center w-full h-full\">\n <div className=\"flex items-center gap-10\">\n <button\n type=\"button\"\n onClick={previousApp}\n aria-label=\"Previous\"\n className=\"cursor-pointer rounded-lg transition-all duration-300 hover:bg-ice-dark dark:hover:bg-independence rotate-180\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-10 w-10 dark:stroke-white\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n\n <div className=\"flex\">\n {indexPool.map((index, id) => {\n const item = items[index]\n if (!item) return null\n return id === 1 ? (\n <div\n key={id}\n ref={(ref) => {\n if (cardRefs.current.length < 3 && ref)\n cardRefs.current.push({ cardIndex: id, ref })\n }}\n className=\"transition-all duration-300 scale-125 z-10 shadow-2xl rounded-lg\"\n >\n <GridCard item={item} buttonText={buttonText} onOpen={onOpen} />\n </div>\n ) : (\n <div\n key={id}\n ref={(ref) => {\n if (cardRefs.current.length < 3 && ref)\n cardRefs.current.push({ cardIndex: id, ref })\n }}\n className=\"transition-all duration-300 shadow-2xl rounded-lg\"\n >\n <OpaqueGridCard item={item} isRight={id === 2} buttonText={buttonText} onOpen={onOpen} />\n </div>\n )\n })}\n </div>\n\n <button\n type=\"button\"\n onClick={nextApp}\n aria-label=\"Next\"\n className=\"cursor-pointer rounded-lg transition-all duration-300 hover:bg-ice-dark dark:hover:bg-independence\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-10 w-10 dark:stroke-white\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport CatalogGrid from './CatalogGrid'\nimport CatalogCarousel from './CatalogCarousel'\nimport { GridCardItem } from './GridCard'\n\nexport interface CatalogProps {\n /** 'grid' | 'carousel' */\n display?: 'grid' | 'carousel'\n items?: GridCardItem[]\n buttonText?: string\n onOpen?: (item: GridCardItem) => void\n}\n\n/**\n * Switches between grid and carousel layouts for a list of application tiles.\n *\n * @example\n * <Catalog display=\"carousel\" items={apps} onOpen={({ to }) => navigate(to!)} />\n */\nexport default function Catalog({ display = 'grid', items = [], buttonText, onOpen }: CatalogProps) {\n return (\n <div className=\"w-full h-full\">\n {display === 'grid' ? (\n <CatalogGrid items={items} buttonText={buttonText} onOpen={onOpen} />\n ) : (\n <CatalogCarousel items={items} buttonText={buttonText} onOpen={onOpen} />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport Tooltip from './Tooltip'\n\nexport interface MenuBarItemProps {\n icon: React.ReactNode\n isActive: boolean\n title: string\n /** Called when the item is clicked (navigation or logout etc.) */\n onClick?: () => void\n}\n\n/**\n * Single item in the MenuBar sidebar.\n *\n * Decoupled from React Router and context — navigation is delegated to `onClick`.\n * The Tooltip is powered by Radix (same as the standalone Tooltip component).\n *\n * @example\n * <MenuBarItem\n * icon={<Icon.Dashboard />}\n * title=\"Dashboard\"\n * isActive={pathname === '/dashboard'}\n * onClick={() => navigate('/dashboard')}\n * />\n */\nexport default function MenuBarItem({ icon, isActive, title, onClick }: MenuBarItemProps) {\n return (\n <Tooltip title={title} placement=\"right\">\n <div\n role=\"button\"\n aria-label={title}\n aria-current={isActive ? 'page' : undefined}\n className={`transition duration-300 hover:bg-prussian-blue ${\n isActive ? 'bg-prussian-blue' : ''\n } rounded-lg p-2 cursor-pointer`}\n onClick={onClick}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && onClick?.()}\n >\n {icon}\n </div>\n </Tooltip>\n )\n}\n","import React from 'react'\nimport MenuBarItem, { MenuBarItemProps } from './MenuBarItem'\n\nexport interface MenuBarItemConfig extends MenuBarItemProps {\n key: string\n}\n\nexport interface MenuBarProps {\n items: MenuBarItemConfig[]\n}\n\n/**\n * Vertical icon sidebar (left edge of the app).\n *\n * Decoupled from React Router, useAuth, and useData.\n * The app composes the items array (with `onClick` handlers) and passes it in.\n *\n * @example\n * const items: MenuBarItemConfig[] = [\n * { key: 'dash', icon: <Icon.Dashboard />, title: 'Dashboard', isActive: pathname === '/dashboard', onClick: () => navigate('/dashboard') },\n * { key: 'logout', icon: <Icon.PowerOff />, title: 'Sign Out', isActive: false, onClick: logOut },\n * ]\n * <MenuBar items={items} />\n */\nexport default function MenuBar({ items }: MenuBarProps) {\n return (\n <nav\n aria-label=\"Main navigation\"\n className=\"w-16 calculated-height bg-independence rounded-tr-lg rounded-br-lg flex flex-col gap-2 items-center p-2 z-50\"\n >\n {items.map((item) => (\n <MenuBarItem\n key={item.key}\n icon={item.icon}\n title={item.title}\n isActive={item.isActive}\n onClick={item.onClick}\n />\n ))}\n </nav>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface ContextMenuActionItem {\n key: string | number\n value: React.ReactNode\n icon?: React.ReactNode\n onClick?: (path?: string, reportType?: string) => void\n path?: string\n reportType?: string\n children?: ContextMenuActionItem[]\n}\n\nexport interface ContextMenuPosition {\n x: number\n y: number\n}\n\nexport interface ContextMenuProps {\n items: ContextMenuActionItem[]\n position: ContextMenuPosition\n visible: boolean\n onClose: () => void\n}\n\n/**\n * Right-click context menu positioned at arbitrary screen coordinates.\n *\n * Decoupled from `useData()` — the app manages `visible`, `position`, and\n * `items` in its own state and passes them here.\n *\n * @example\n * const [ctx, setCtx] = useState({ visible: false, items: [], position: { x: 0, y: 0 } })\n *\n * <div onContextMenu={(e) => {\n * e.preventDefault()\n * setCtx({ visible: true, items: menuItems, position: { x: e.clientX, y: e.clientY } })\n * }}>...</div>\n *\n * <ContextMenu {...ctx} onClose={() => setCtx(c => ({ ...c, visible: false }))} />\n */\nexport default function ContextMenu({ items, position, visible, onClose }: ContextMenuProps) {\n const contextRef = useRef<HTMLDivElement>(null)\n const childMenuRef = useRef<HTMLDivElement>(null)\n\n const [hasArrowUp, setHasArrowUp] = useState(true)\n const [childArrowUp, setChildArrowUp] = useState(false)\n const [hoveredItem, setHoveredItem] = useState(-1)\n const [hoveredChild, setHoveredChild] = useState(-1)\n const [activeChildren, setActiveChildren] = useState<ContextMenuActionItem[]>([])\n\n useEffect(() => {\n const clickAway = ({ target }: MouseEvent) => {\n if (contextRef.current && !contextRef.current.contains(target as Node)) {\n if (childMenuRef.current) {\n childMenuRef.current.classList.add('opacity-0')\n childMenuRef.current.style.left = '0px'\n childMenuRef.current.style.top = '0px'\n }\n setActiveChildren([])\n onClose()\n }\n }\n window.addEventListener('click', clickAway)\n return () => window.removeEventListener('click', clickAway)\n }, [onClose])\n\n useEffect(() => {\n const current = contextRef.current\n const child = childMenuRef.current\n if (!current || !child) return\n\n const { height, width } = current.getBoundingClientRect()\n if (position.y + height >= window.innerHeight) {\n current.style.top = `${position.y - (height - 40)}px`\n setHasArrowUp(false)\n } else {\n current.style.top = `${position.y}px`\n setHasArrowUp(true)\n }\n current.style.left = `${position.x}px`\n child.style.width = `${width}px`\n child.classList.add('opacity-0')\n }, [position])\n\n const onItemClick = (e: React.MouseEvent, item: ContextMenuActionItem) => {\n if (item.onClick) {\n if (childMenuRef.current) {\n childMenuRef.current.classList.add('opacity-0')\n childMenuRef.current.style.left = '0px'\n childMenuRef.current.style.top = '0px'\n }\n setActiveChildren([])\n item.onClick(item.path, item.reportType)\n } else if (item.children?.length) {\n const targetBbox = (e.target as HTMLElement).getBoundingClientRect()\n const childHeight = childMenuRef.current?.getBoundingClientRect().height ?? 0\n const contextBbox = contextRef.current?.getBoundingClientRect() ?? { y: 0, width: 0, height: 0 }\n const contextWidth = contextBbox.width\n\n if (targetBbox.y + childHeight >= window.innerHeight) {\n setChildArrowUp(false)\n if (childMenuRef.current) childMenuRef.current.style.top = `${targetBbox.y - childHeight}px`\n } else {\n setChildArrowUp(true)\n if (childMenuRef.current)\n childMenuRef.current.style.top = `${targetBbox.y - contextBbox.y + targetBbox.height / 2 - 10}px`\n }\n setActiveChildren(item.children)\n if (childMenuRef.current) {\n childMenuRef.current.classList.remove('opacity-0')\n childMenuRef.current.style.left = `${Math.round(contextWidth + 10)}px`\n }\n }\n }\n\n if (!visible) return null\n\n return (\n <div\n ref={contextRef}\n className={`transition-all duration-150 absolute rounded-lg bg-ice text-prussian-blue z-30 flex ${\n hasArrowUp && hoveredItem === 0\n ? 'context-arrow-up context-arrow-hovered'\n : !hasArrowUp && hoveredItem === items.length - 1\n ? 'context-arrow-down context-arrow-hovered'\n : hasArrowUp\n ? 'context-arrow-up'\n : 'context-arrow-down'\n }`}\n >\n <ul className=\"z-50\">\n {items.map((item, index) => (\n <li\n key={item.key}\n onContextMenu={(e) => e.preventDefault()}\n onMouseEnter={() => setHoveredItem(index)}\n onMouseLeave={() => setHoveredItem(-1)}\n className={`flex items-center justify-between transition-all duration-300 p-2 cursor-pointer hover:bg-ice-dark ${\n index === 0 ? 'rounded-tl-lg rounded-tr-lg' : ''\n } ${index === items.length - 1 ? 'rounded-bl-lg rounded-br-lg' : ''}`}\n onClick={(e) => onItemClick(e, item)}\n >\n <div className=\"flex items-center gap-2 pointer-events-none\">\n {item.icon}\n {item.value}\n </div>\n <div className=\"pointer-events-none\">\n {item.children && (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n </div>\n </li>\n ))}\n </ul>\n\n {/* Sub-menu */}\n <div\n ref={childMenuRef}\n className={`transition-all duration-150 absolute rounded-lg bg-ice text-prussian-blue ${\n childArrowUp && hoveredChild === 0\n ? 'context-arrow-up context-arrow-hovered'\n : !childArrowUp && hoveredChild === activeChildren.length - 1\n ? 'context-arrow-down context-arrow-hovered'\n : childArrowUp\n ? 'context-arrow-up'\n : 'context-arrow-down'\n }`}\n >\n <ul>\n {activeChildren.map((item, index) => (\n <li\n key={index}\n className={`flex items-center gap-2 p-2 cursor-pointer transition-all duration-150 hover:bg-ice-dark ${\n index === 0 ? 'rounded-tl-lg rounded-tr-lg' : ''\n } ${index === activeChildren.length - 1 ? 'rounded-bl-lg rounded-br-lg' : ''}`}\n onClick={() => item.onClick?.(item.path, item.reportType)}\n onMouseEnter={() => setHoveredChild(index)}\n onMouseLeave={() => setHoveredChild(-1)}\n >\n {item.icon}\n {item.value}\n </li>\n ))}\n </ul>\n </div>\n </div>\n )\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport Button from '../inputs/Button'\n\nexport interface WizardStep {\n /** Ref to the DOM element to highlight */\n stepRef: React.RefObject<HTMLElement>\n description: React.ReactNode\n /** 'natural' | 'center' — controls tooltip position relative to target */\n positioning?: 'natural' | 'center'\n}\n\nexport interface WizardProps {\n children: React.ReactNode\n steps: WizardStep[]\n /** localStorage key used to remember dismissal (default: 'oxygen_wizard') */\n storageKey?: string\n}\n\n/**\n * Guided-tour overlay wizard.\n *\n * Highlights a DOM element via a border, then shows a floating tooltip\n * adjacent to it. Remembers dismissal via localStorage.\n *\n * @example\n * const step1Ref = useRef<HTMLDivElement>(null)\n * const steps = [\n * { stepRef: step1Ref, description: 'Click here to start.', positioning: 'natural' },\n * ]\n * <Wizard steps={steps}>\n * <div ref={step1Ref}>...</div>\n * </Wizard>\n */\nexport default function Wizard({ children, steps, storageKey = 'po_wizard' }: WizardProps) {\n const wizardRef = useRef<HTMLDivElement>(null)\n const [activeStep, setActiveStep] = useState(0)\n const [targetBbox, setTargetBbox] = useState<DOMRect | null>(null)\n\n const HIGHLIGHTED = useMemo(\n () => ['border', 'border-4', 'border-prussian-blue', 'pointer-events-none'] as string[],\n []\n )\n\n const closeWizard = useCallback(() => {\n steps[activeStep]?.stepRef.current?.classList.remove(...HIGHLIGHTED)\n if (wizardRef.current) wizardRef.current.style.display = 'none'\n }, [HIGHLIGHTED, steps, activeStep])\n\n useEffect(() => {\n const visited = JSON.parse(localStorage.getItem(storageKey) ?? 'false')\n if (visited) {\n closeWizard()\n return\n }\n const el = steps[activeStep]?.stepRef.current\n if (el) {\n setTargetBbox(el.getBoundingClientRect())\n el.classList.add(...HIGHLIGHTED)\n }\n }, [closeWizard, steps, activeStep, HIGHLIGHTED, storageKey])\n\n const onStepChange = () => {\n if (steps[activeStep + 1]) {\n steps[activeStep].stepRef.current?.classList.remove(...HIGHLIGHTED)\n const nextEl = steps[activeStep + 1].stepRef.current\n if (nextEl) setTargetBbox(nextEl.getBoundingClientRect())\n setActiveStep(activeStep + 1)\n } else {\n localStorage.setItem(storageKey, 'true')\n closeWizard()\n }\n }\n\n const step = steps[activeStep]\n const left = step && targetBbox\n ? step.positioning === 'natural'\n ? isNaN(targetBbox.width + 20) ? 0 : targetBbox.width + 20\n : isNaN(targetBbox.width / 2) ? 0 : targetBbox.width / 2\n : 'auto'\n const top = step && targetBbox\n ? step.positioning === 'natural'\n ? isNaN(targetBbox.y + 10) ? 0 : targetBbox.y + 10\n : isNaN(targetBbox.height / 2) ? 0 : targetBbox.height / 2\n : 'auto'\n\n return (\n <div className=\"h-full p-1 rounded-lg w-full\">\n <div className=\"absolute\" ref={wizardRef}>\n <div\n style={{ left, top }}\n className=\"absolute bg-white rounded-lg p-2 w-[220px] z-50 text-prussian-blue drop-shadow-md transition-all duration-300\"\n >\n {step?.description}\n <div className=\"flex justify-end\">\n <span className=\"flex h-3 w-3 relative left-14 top-4\">\n <span className=\"animate-ping absolute inline-flex h-3 w-3 rounded-full bg-dark-cornflower-blue opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-3 w-3 bg-dark-cornflower-blue\" />\n </span>\n <Button\n onClick={onStepChange}\n content={activeStep === steps.length - 1 ? 'Close' : 'Next'}\n style={{ width: 55, padding: '5px 10px', margin: '0' }}\n />\n </div>\n </div>\n </div>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface SearchInputProps {\n value?: any\n onChange?: React.ChangeEventHandler<HTMLInputElement>\n disabled?: boolean\n label?: React.ReactNode\n htmlFor?: string\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n layout?: string\n [key: string]: any\n}\n\n/**\n * Search text field with a magnifier icon on the right.\n */\nconst SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(function SearchInput(\n {\n value,\n onChange,\n disabled,\n label,\n htmlFor,\n placeholder,\n name,\n inputStyle,\n style,\n layout = 'vertical',\n },\n ref\n) {\n return (\n <div className=\"relative flex flex-col items-center justify-center\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n style={style ?? {}}\n >\n {label && (\n <label className=\"text-lg font-bold ml-1 max-content text-prussian-blue dark:text-white\" htmlFor={htmlFor}>\n {label}\n </label>\n )}\n <div className=\"bg-white flex items-center gap-1 rounded-lg focus:outline-oxford-blue-700-opaque pr-2\">\n <input\n ref={ref}\n disabled={disabled}\n value={value}\n onChange={onChange}\n type=\"text\"\n name={name}\n id={htmlFor}\n className=\"focus:outline-none pl-2 h-9 w-56 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed\"\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n {/* Search icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-6 h-6\">\n <path fillRule=\"evenodd\" d=\"M10.5 3.75a6.75 6.75 0 100 13.5 6.75 6.75 0 000-13.5zM2.25 10.5a8.25 8.25 0 1114.59 5.28l4.69 4.69a.75.75 0 11-1.06 1.06l-4.69-4.69A8.25 8.25 0 012.25 10.5z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n </div>\n </div>\n )\n})\n\nexport default SearchInput\n","export interface DropdownPillProps {\n value?: React.ReactNode\n hasSiblings?: boolean\n}\n\n/**\n * Pill chip used inside Dropdown to display selected values.\n */\nexport default function DropdownPill({ value, hasSiblings = false }: DropdownPillProps) {\n return (\n <div\n className={`bg-prussian-blue text-white text-sm text-ellipsis ${hasSiblings ? 'w-24' : 'w-max'} p-1 rounded-lg whitespace-nowrap overflow-hidden`}\n >\n {value}\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport SearchInput from './SearchInput'\nimport DropdownPill from './DropdownPill'\nimport COLORS from '../../utils/colors'\n\nexport interface DropdownItem {\n key: string | number\n label: React.ReactNode\n icon?: React.ReactNode\n}\n\nexport interface DropdownProps {\n isMultiselect?: boolean\n hasSearch?: boolean\n label?: React.ReactNode\n name?: string\n value?: any\n onChange?: (e: { target: { value: any; id?: string; name?: string } }) => void\n onBlur?: React.FocusEventHandler\n disabled?: boolean\n /** 'horizontal' | 'vertical' */\n layout?: string\n errorMessage?: React.ReactNode\n style?: React.CSSProperties\n htmlFor?: string\n items?: DropdownItem[]\n labelStyle?: React.CSSProperties\n placeholder?: string\n [key: string]: any\n}\n\n/**\n * Select / multi-select dropdown powered by Radix Popover.\n *\n * Radix handles focus-trap within the popover, keyboard dismiss (Escape),\n * and correct portal-based z-index stacking.\n *\n * Emits `{ target: { value, id, name } }` for form-compatibility.\n *\n * @example\n * // Single-select\n * <Dropdown label=\"Vessel\" items={vessels} value={form.vessel} onChange={handleChange} htmlFor=\"vessel\" />\n *\n * // Multi-select\n * <Dropdown isMultiselect label=\"Fuels\" items={fuels} value={form.fuels} onChange={handleChange} />\n */\nexport default function Dropdown({\n isMultiselect = false,\n hasSearch = true,\n label,\n name,\n value,\n onChange,\n disabled,\n layout = 'horizontal',\n errorMessage,\n style = {},\n htmlFor,\n items = [],\n labelStyle = {},\n placeholder,\n}: DropdownProps) {\n const [open, setOpen] = useState(false)\n const [selectedItems, setSelectedItems] = useState<(string | number)[]>([])\n const [hoveredItem, setHoveredItem] = useState<string | number | null>(null)\n const [searchTerm, setSearchTerm] = useState('')\n const [innerItems, setInnerItems] = useState<DropdownItem[]>([])\n\n useEffect(() => {\n setInnerItems(items)\n }, [items])\n\n useEffect(() => {\n if (isMultiselect && Array.isArray(value)) {\n setSelectedItems(value)\n }\n }, [isMultiselect, value])\n\n const selectItem = (key: string | number) => {\n if (isMultiselect) {\n const next = selectedItems.includes(key)\n ? selectedItems.filter((it) => it !== key)\n : [...selectedItems, key]\n setSelectedItems(next)\n onChange?.({ target: { value: next, id: htmlFor, name } })\n } else {\n setSelectedItems([key])\n onChange?.({ target: { value: key, id: htmlFor, name } })\n setOpen(false)\n }\n }\n\n const onSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const term = e.target.value\n setSearchTerm(term)\n setInnerItems(\n term.trim() === ''\n ? items\n : items.filter((it) =>\n String(it.label).toLowerCase().includes(term.toLowerCase())\n )\n )\n }\n\n const isSelected = (key: string | number) =>\n Array.isArray(value) ? value.includes(key) : value === key\n\n return (\n <div className=\"mt-2\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n >\n {label && (\n <label\n className=\"text-md font-bold ml-1 max-content select-none text-prussian-blue dark:text-white\"\n htmlFor={htmlFor}\n style={labelStyle}\n >\n {label}\n </label>\n )}\n\n <Popover.Root open={open && !disabled} onOpenChange={(o) => !disabled && setOpen(o)}>\n <Popover.Trigger asChild>\n <div\n id={htmlFor}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n style={style}\n className={`flex items-center justify-between relative h-9 rounded-lg cursor-pointer select-none ${disabled ? 'cursor-not-allowed bg-disabled' : 'bg-white'}`}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => e.key === 'Enter' && !disabled && setOpen(true)}\n >\n {/* Selected value(s) */}\n <div\n className={`h-7 pl-2 ${!style?.width ? 'min-w-[240px]' : ''} focus:outline-none text-prussian-blue flex items-center gap-1 overflow-hidden`}\n >\n {!value || (Array.isArray(value) && value.length === 0) ? (\n <span className=\"text-roman-silver text-sm\">{placeholder}</span>\n ) : Array.isArray(value) ? (\n <>\n {value.slice(0, 1).map((val) => (\n <DropdownPill\n key={String(val)}\n hasSiblings={value.length > 1}\n value={innerItems.find((it) => it.key === val)?.label}\n />\n ))}\n {value.length > 1 && <DropdownPill value={`+${value.length - 1} more`} />}\n </>\n ) : (\n <DropdownPill value={innerItems.find((it) => it.key === value)?.label} />\n )}\n </div>\n\n {/* Chevron */}\n <div className={`transition-transform duration-300 mr-2 ${open ? 'rotate-180' : 'rotate-0'}`}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: style?.width || 240 }}\n className=\"bg-ice rounded-lg shadow-md z-50 p-2 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\"\n onInteractOutside={() => setOpen(false)}\n >\n {hasSearch && (\n <div className=\"mb-2\">\n <SearchInput\n style={{ width: '100%' }}\n inputStyle={{ width: '100%' }}\n value={searchTerm}\n onChange={onSearchChange}\n placeholder=\"Search...\"\n />\n </div>\n )}\n <div role=\"listbox\" aria-multiselectable={isMultiselect} className=\"max-h-40 overflow-y-auto\">\n {innerItems.map((item, idx) => (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={isSelected(item.key)}\n aria-rowindex={idx}\n className={`flex items-center justify-between p-2 hover:bg-prussian-blue hover:text-white transition-all duration-150 text-sm text-prussian-blue rounded-lg cursor-pointer ${\n selectedItems.includes(item.key) ? 'bg-ice-dark' : ''\n }`}\n onClick={() => selectItem(item.key)}\n onMouseEnter={() => setHoveredItem(item.key)}\n onMouseLeave={() => setHoveredItem(null)}\n >\n <div className=\"flex items-center gap-2 text-xs\">\n {item.icon && <div>{item.icon}</div>}\n {item.label}\n </div>\n {isSelected(item.key) && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M4 10l4.5 4.5L16 6\"\n stroke={hoveredItem === item.key ? '#fff' : COLORS.PALETTE['prussian-blue']}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n ))}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport SearchInput from '../inputs/SearchInput'\nimport Dropdown from '../inputs/Dropdown'\nimport IconButton from './IconButton'\n\n/** ─────────────────── types ─────────────────── */\nexport interface TableColumn {\n key: string | number\n label: React.ReactNode\n keyBind: string\n component?: (cellValue: any, row: any) => React.ReactNode\n}\n\nexport interface PaginationOptions {\n enabled?: boolean\n perPage?: number\n withPicker?: boolean\n serverSide?: boolean\n /** Server-side: current 1-based page number */\n page?: number\n /** Server-side: total page count */\n maxPage?: number\n /** Server-side: total row count (used to calculate maxPage) */\n totalCount?: number\n pickerOptions?: Array<{ key: number; value: number; label: number }>\n onPageChange?: (page: number) => void\n onPerPageChange?: (perPage: number) => void\n}\n\nexport interface ExpandRowOptions {\n enabled?: boolean\n expandIcon?: React.ReactNode\n expandComponent?: (row: any) => React.ReactNode\n}\n\nexport interface TableProps {\n columns?: TableColumn[]\n rows?: any[]\n pagination?: PaginationOptions\n expandRow?: ExpandRowOptions\n hasSearch?: boolean\n footer?: React.ReactNode\n header?: React.ReactNode\n tableRef?: React.Ref<any>\n [key: string]: any\n}\n\n/** ─────────────────── defaults ─────────────────── */\nconst DEFAULT_PICKER: PaginationOptions['pickerOptions'] = [\n { key: 1, value: 5, label: 5 },\n { key: 2, value: 10, label: 10 },\n { key: 3, value: 15, label: 15 },\n { key: 4, value: 20, label: 20 },\n]\n\nconst DEFAULT_PAGINATION: PaginationOptions = {\n enabled: true,\n perPage: 15,\n withPicker: true,\n pickerOptions: DEFAULT_PICKER,\n}\n\nconst DEFAULT_EXPAND: ExpandRowOptions = {\n enabled: false,\n expandIcon: <></>,\n expandComponent: () => <></>,\n}\n\n/** ─────────────────── helpers ─────────────────── */\nfunction createDatasets(rows: any[], perPage: number | null): any[][] {\n if (!perPage) return [rows.slice()]\n const all: any[][] = []\n for (let i = 0; i < rows.length; i += perPage) {\n all.push(rows.slice(i, i + perPage))\n }\n return all\n}\n\n/** ─────────────────── sub-components ─────────────────── */\nfunction TableHeader({ columns }: { columns: TableColumn[] }) {\n return (\n <thead className=\"bg-surface-raised min-h-[50px] border-b border-b-border flex items-center\">\n <tr className=\"flex w-full items-center justify-center\">\n {columns.map((col) => (\n <th\n key={col.key}\n className=\"text-center w-full text-[13px] text-foreground\"\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n )\n}\n\nfunction TableBody({\n columns,\n rows,\n expandRow,\n}: {\n activePage?: number\n columns: TableColumn[]\n rows: any[]\n expandRow: ExpandRowOptions\n}) {\n const [visibleRows, setVisibleRows] = useState<Record<string, { visible: boolean }>>({})\n\n const toggleRow = (rowKey: string) => {\n setVisibleRows((prev) => ({\n ...prev,\n [rowKey]: { visible: !prev[rowKey]?.visible },\n }))\n }\n\n useEffect(() => {\n if (rows.length && Object.keys(visibleRows).length === 0) {\n const initial: Record<string, { visible: boolean }> = {}\n rows.forEach((row) => {\n initial[row.key] = { visible: false }\n })\n setVisibleRows(initial)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rows])\n\n return (\n <tbody className=\"w-full\">\n {rows.map((row, i) => (\n <React.Fragment key={row.key}>\n <tr\n className={`border-b border-b-border flex min-w-max hover:bg-surface-raised transition-all duration-150 ${\n i % 2 === 0\n ? 'bg-surface'\n : 'bg-surface-raised'\n }`}\n >\n {expandRow.enabled && (\n <td className=\"flex items-center\">\n <span\n onClick={() => toggleRow(row.key)}\n className={`p-2 cursor-pointer origin-center transition-all duration-200 ${\n visibleRows[row.key]?.visible ? 'rotate-180' : 'rotate-0'\n }`}\n >\n {expandRow.expandIcon ?? (\n /* PlusCircle */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"w-5 h-5 text-foreground-muted\">\n <path fillRule=\"evenodd\" d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25zM12.75 9a.75.75 0 00-1.5 0v2.25H9a.75.75 0 000 1.5h2.25V15a.75.75 0 001.5 0v-2.25H15a.75.75 0 000-1.5h-2.25V9z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </span>\n </td>\n )}\n {columns.map((col, index) => (\n <td\n key={index}\n className={`text-center min-h-[40px] w-full flex items-center justify-center p-1 border-border ${\n index !== columns.length - 1 ? 'border-r-2' : ''\n }`}\n >\n {'component' in col && col.component\n ? col.component(row[col.keyBind], row)\n : row[col.keyBind]}\n </td>\n ))}\n </tr>\n\n {expandRow.enabled && (\n <tr\n key={`extra-${i}`}\n className={`overflow-hidden w-full transition-all duration-300 ${\n visibleRows[row.key]?.visible ? 'max-h-[2000px]' : 'max-h-0'\n }`}\n >\n <td colSpan={columns.length} className=\"p-0 pb-1\">\n <div\n className={`overflow-hidden w-full transition-[max-height] duration-300 ${\n visibleRows[row.key]?.visible ? 'max-h-[2000px]' : 'max-h-0'\n }`}\n >\n {expandRow.expandComponent?.(row)}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n ))}\n </tbody>\n )\n}\n\nfunction Pagination({\n activePage,\n onPageChange,\n maxPage,\n options,\n onPerPageChange,\n serverSide = false,\n}: {\n activePage: number\n onPageChange: (page: number) => void\n maxPage: number\n options: PaginationOptions\n onPerPageChange: (perPage: number) => void\n serverSide?: boolean\n}) {\n const picker = options.pickerOptions ?? DEFAULT_PICKER\n const matchedOption = picker.find(\n (o) => o.label === options.perPage || o.value === options.perPage\n )\n const [perPageKey, setPerPageKey] = useState(() => matchedOption?.key ?? picker[0]?.key)\n const displayPerPageKey = serverSide ? matchedOption?.key ?? perPageKey : perPageKey\n\n useEffect(() => {\n if (serverSide && options.perPage != null) {\n const next = picker.find((o) => o.label === options.perPage || o.value === options.perPage)\n if (next) setPerPageKey(next.key)\n }\n }, [serverSide, options.perPage, picker])\n\n const navBtn = (icon: React.ReactNode, disabled: boolean, onClick: () => void) => (\n <IconButton disabled={disabled} onClick={onClick} icon={icon} />\n )\n\n const chevronRight = (color: string) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"h-5 w-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n\n const doubleChevronRight = (color: string) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"h-5 w-5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13 5l7 7-7 7M5 5l7 7-7 7\" />\n </svg>\n )\n\n const disabledColor = 'var(--color-foreground-muted)'\n const enabledColor = 'var(--color-foreground)'\n\n return (\n <div className=\"flex gap-2 items-center justify-end pt-2\">\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{doubleChevronRight(activePage === 0 ? disabledColor : enabledColor)}</span>,\n activePage === 0,\n () => onPageChange(0)\n )}\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{chevronRight(activePage === 0 ? disabledColor : enabledColor)}</span>,\n activePage === 0,\n () => activePage > 0 && onPageChange(activePage - 1)\n )}\n <span className=\"bg-surface-raised rounded-lg ml-2 mr-2 shadow-sm p-2 w-10 text-center select-none text-foreground\">\n {activePage + 1}\n </span>\n {navBtn(\n chevronRight(activePage === maxPage ? disabledColor : enabledColor),\n activePage === maxPage,\n () => activePage < maxPage && onPageChange(activePage + 1)\n )}\n {navBtn(\n doubleChevronRight(activePage === maxPage ? disabledColor : enabledColor),\n activePage === maxPage,\n () => onPageChange(maxPage)\n )}\n {options.withPicker && (\n <Dropdown\n style={{ width: 80, position: 'relative', bottom: 4 }}\n hasSearch={false}\n items={picker}\n isMultiselect={false}\n value={displayPerPageKey}\n onChange={({ target: { value } }) => {\n const key = typeof value === 'string' && /^\\d+$/.test(value) ? Number(value) : value\n if (!serverSide) setPerPageKey(key)\n const opt = picker.find((o) => o.key === key)\n onPerPageChange(opt?.label ?? opt?.value ?? key)\n }}\n />\n )}\n </div>\n )\n}\n\n/** ─────────────────── main component ─────────────────── */\n\n/**\n * Data table with optional search, pagination, and expandable rows.\n *\n * Supports both client-side and server-side pagination.\n *\n * @example\n * <Table\n * columns={[{ key: 'name', label: 'Name', keyBind: 'name' }]}\n * rows={data}\n * pagination={{ enabled: true, perPage: 15 }}\n * />\n */\nexport default function Table({\n columns = [],\n rows = [],\n pagination = DEFAULT_PAGINATION,\n expandRow = DEFAULT_EXPAND,\n hasSearch = true,\n footer = null,\n header = null,\n}: TableProps) {\n const searchRef = useRef<HTMLInputElement>(null)\n const [searchTerm, setSearchTerm] = useState('')\n const [perPage, setPerPage] = useState(\n typeof pagination.perPage === 'number' ? pagination.perPage : 15\n )\n const [activePage, setActivePage] = useState(0)\n const [datasets, setDatasets] = useState<any[][]>([])\n\n const isServerSide = !!(pagination.enabled && pagination.serverSide)\n\n const MAX_PAGE = useMemo(() => {\n if (isServerSide && typeof pagination.maxPage === 'number') return Math.max(0, pagination.maxPage)\n if (isServerSide && typeof pagination.totalCount === 'number')\n return Math.max(0, Math.ceil(pagination.totalCount / perPage) - 1)\n return datasets.length ? datasets.length - 1 : 0\n }, [isServerSide, pagination.maxPage, pagination.totalCount, perPage, datasets.length])\n\n const currentPageRows = useMemo(() => {\n if (isServerSide) return rows\n return datasets.length ? datasets[activePage] ?? [] : []\n }, [isServerSide, rows, datasets, activePage])\n\n useEffect(() => {\n if (pagination.enabled && !isServerSide) setPerPage(pagination.perPage ?? 15)\n }, [pagination, isServerSide])\n\n useEffect(() => {\n if (isServerSide && typeof pagination.perPage === 'number') setPerPage(pagination.perPage)\n }, [isServerSide, pagination.perPage])\n\n useEffect(() => {\n if (isServerSide) return\n setDatasets(createDatasets(rows, pagination.enabled ? perPage : null))\n }, [rows, perPage, pagination, isServerSide])\n\n useEffect(() => {\n if (isServerSide && typeof pagination.page === 'number' && pagination.page >= 1)\n setActivePage(pagination.page - 1)\n }, [isServerSide, pagination.page])\n\n const onSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const term = e.target.value\n setSearchTerm(term)\n if (isServerSide) return\n const filtered = rows.filter((row) =>\n Object.values(row).some(\n (v) => !!v && String(v).toLowerCase().includes(term.toLowerCase())\n )\n )\n setDatasets(createDatasets(filtered, pagination.enabled ? perPage : null))\n setActivePage(0)\n }\n\n const onPaginationChange = (perPageValue: number) => {\n setPerPage(perPageValue)\n setActivePage(0)\n if (isServerSide) pagination.onPerPageChange?.(perPageValue)\n }\n\n const handlePageChange = (newPage: number) => {\n if (isServerSide) {\n pagination.onPageChange?.(newPage + 1)\n return\n }\n setActivePage(newPage)\n }\n\n return (\n <div className=\"w-full h-max rounded-lg\">\n <div className=\"flex items-center justify-between mb-2\">\n {hasSearch && (\n <SearchInput\n ref={searchRef}\n value={searchTerm}\n onChange={onSearchChange}\n placeholder=\"Search term...\"\n />\n )}\n {pagination.enabled && (\n <Pagination\n activePage={activePage}\n onPageChange={handlePageChange}\n maxPage={MAX_PAGE}\n onPerPageChange={onPaginationChange}\n options={pagination}\n serverSide={isServerSide}\n />\n )}\n </div>\n <div>{header}</div>\n {/* Horizontal scroll wrapper — enables swipe-scroll on narrow viewports */}\n <div className=\"overflow-x-auto rounded-lg\">\n <table className=\"w-full\">\n <TableHeader columns={columns} />\n <TableBody columns={columns} rows={currentPageRows} expandRow={expandRow} />\n </table>\n </div>\n <div>{footer}</div>\n </div>\n )\n}\n","import React, { useId } from 'react'\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\n\nexport interface ThemeSwitchProps {\n checked: boolean\n onChange: (e: { target: { checked: boolean } }) => void\n /** Optional accessible label (defaults to \"Toggle dark mode\") */\n label?: string\n}\n\n/**\n * Theme (dark-mode) toggle switch powered by Radix Switch.\n *\n * The thumb color indicates mode: green = light, slate = dark.\n * Layout (position, margin) is the parent's responsibility — this component\n * renders inline with no external margins.\n *\n * @example\n * <ThemeSwitch checked={isDark} onChange={({ target }) => setDark(target.checked)} />\n */\nexport default function ThemeSwitch({ checked, onChange, label = 'Toggle dark mode' }: ThemeSwitchProps) {\n const id = useId()\n\n return (\n <label htmlFor={id} className=\"flex items-center gap-2 cursor-pointer select-none\">\n <SwitchPrimitive.Root\n id={id}\n checked={checked}\n onCheckedChange={(c) => onChange({ target: { checked: c } })}\n aria-label={label}\n className={[\n 'relative inline-flex h-6 w-11 items-center rounded-full',\n 'transition-colors duration-200',\n 'bg-foreground-secondary data-[state=checked]:bg-accent',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' ')}\n >\n <SwitchPrimitive.Thumb\n className={[\n 'pointer-events-none block h-5 w-5 rounded-full shadow-sm',\n 'transition-transform duration-200',\n 'data-[state=checked]:translate-x-[22px]',\n 'data-[state=unchecked]:translate-x-[2px]',\n // Moon icon (dark mode indicator) when checked, sun when unchecked\n checked ? 'bg-oxford-blue-900' : 'bg-white',\n ].join(' ')}\n >\n {/* Micro icon inside thumb */}\n {checked ? (\n // Moon\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" className=\"w-3 h-3 m-1 text-manatee\" aria-hidden=\"true\">\n <path d=\"M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z\" />\n </svg>\n ) : (\n // Sun\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" className=\"w-3 h-3 m-1 text-usafa-blue\" aria-hidden=\"true\">\n <path d=\"M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707z\" />\n </svg>\n )}\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n </label>\n )\n}\n","import React from 'react'\n\nexport interface TopBarProps {\n /** Brand area — logo, wordmark, or app name. Rendered on the leading edge. */\n brand?: React.ReactNode\n /**\n * Centre content — primary navigation links, breadcrumb, or page title.\n * On mobile (< md breakpoint) this moves below the brand row.\n */\n center?: React.ReactNode\n /**\n * Trailing actions — theme toggle, user avatar, notification bell, etc.\n * Rendered on the trailing edge.\n */\n actions?: React.ReactNode\n /**\n * Height in pixels (default 56). Controls the `h-*` style directly so\n * child scroll-offset calculations can consume it as a CSS var.\n */\n height?: number\n /** Additional className on the root element */\n className?: string\n}\n\n/**\n * App-shell top navigation bar.\n *\n * Three named slots: brand (leading), center, actions (trailing).\n * All slots are optional — omit what you don't need.\n *\n * The component is sticky by default (`sticky top-0`) with `z-[100]`.\n * Height is exposed as `--topbar-height` CSS variable on the element so\n * layout children can reference it for scroll-offset or sticky positioning.\n *\n * Light/dark aware via Phase B semantic tokens.\n *\n * @example\n * <TopBar\n * brand={<Logo />}\n * center={<NavLinks />}\n * actions={\n * <>\n * <ThemeSwitch checked={isDark} onChange={toggleDark} />\n * <UserAvatar />\n * </>\n * }\n * />\n */\nexport default function TopBar({\n brand,\n center,\n actions,\n height = 56,\n className = '',\n}: TopBarProps) {\n return (\n <header\n className={[\n 'sticky top-0 z-[100]',\n 'flex items-center justify-between gap-4',\n 'border-b border-border bg-surface',\n 'px-4 md:px-6',\n className,\n ].join(' ')}\n style={{\n height,\n // Expose as CSS var so consumers can write:\n // padding-top: calc(var(--topbar-height) + 1rem)\n ['--topbar-height' as string]: `${height}px`,\n }}\n >\n {/* ── Brand ── */}\n {brand !== undefined ? (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {brand}\n </div>\n ) : (\n // Reserve leading space even when brand is null so center stays centred\n <div aria-hidden=\"true\" className=\"flex-shrink-0 w-0\" />\n )}\n\n {/* ── Centre ── */}\n {center !== undefined && (\n <div className=\"flex flex-1 items-center justify-center min-w-0\">\n {center}\n </div>\n )}\n\n {/* ── Actions ── */}\n {actions !== undefined && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions}\n </div>\n )}\n </header>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport Tooltip, { TooltipProvider } from './Tooltip'\n\n/** ─────────────────── types ─────────────────── */\n\nexport interface SidebarItem {\n key: string\n icon: React.ReactNode\n label: string\n isActive?: boolean\n onClick?: () => void\n /** Numeric badge shown on the icon */\n badge?: number\n}\n\nexport interface SidebarSection {\n key: string\n /** Section title — visible only when expanded */\n title?: string\n items: SidebarItem[]\n}\n\nexport interface SidebarProps {\n sections: SidebarSection[]\n isExpanded: boolean\n onToggle?: () => void\n /** Expanded sidebar width in px (default 220) */\n expandedWidth?: number\n /** Collapsed sidebar width in px (default 52) */\n collapsedWidth?: number\n /** Slot rendered at the bottom of the sidebar (theme switch, user avatar…) */\n footer?: React.ReactNode\n}\n\n/** ─────────────────── sub-components ─────────────────── */\n\nfunction NavItem({\n item,\n isExpanded,\n}: {\n item: SidebarItem\n isExpanded: boolean\n}) {\n const btn = (\n <button\n type=\"button\"\n onClick={item.onClick}\n className={[\n 'group relative flex w-full items-center gap-2.5 rounded-md',\n 'px-2.5 py-2 transition-colors duration-100',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-inset',\n item.isActive\n ? 'bg-accent/10 text-accent'\n : 'text-foreground-secondary hover:bg-surface-raised hover:text-foreground',\n ].join(' ')}\n >\n {/* Icon */}\n <span className=\"relative flex h-5 w-5 flex-shrink-0 items-center justify-center\">\n {item.icon}\n {item.badge !== undefined && item.badge > 0 && (\n <span className=\"absolute -right-1 -top-1 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-status-error text-[9px] font-bold text-white leading-none\">\n {item.badge > 99 ? '99+' : item.badge}\n </span>\n )}\n </span>\n\n {/* Label — only visible when expanded */}\n {isExpanded && (\n <motion.span\n initial={false}\n animate={{ opacity: 1 }}\n className=\"truncate text-sm font-medium\"\n >\n {item.label}\n </motion.span>\n )}\n\n {/* Active indicator bar */}\n {item.isActive && (\n <span className=\"absolute inset-y-0 left-0 w-[3px] rounded-r-full bg-accent\" />\n )}\n </button>\n )\n\n if (isExpanded) return btn\n\n return (\n <Tooltip title={item.label} placement=\"right\" delayDuration={200}>\n {btn}\n </Tooltip>\n )\n}\n\n/** ─────────────────── main component ─────────────────── */\n\n/**\n * Collapsible application sidebar.\n *\n * When collapsed: icon-only with tooltips. When expanded: icon + label.\n * Width animates with an ease-out-expo curve. The parent (AppShell) is\n * responsible for shifting the main content by the sidebar width.\n *\n * @example\n * const [open, setOpen] = useState(true)\n * <Sidebar\n * sections={NAV_SECTIONS}\n * isExpanded={open}\n * onToggle={() => setOpen(o => !o)}\n * />\n */\nexport default function Sidebar({\n sections,\n isExpanded,\n onToggle,\n expandedWidth = 220,\n collapsedWidth = 52,\n footer,\n}: SidebarProps) {\n return (\n <TooltipProvider delayDuration={200}>\n <motion.aside\n initial={false}\n animate={{ width: isExpanded ? expandedWidth : collapsedWidth }}\n transition={{ type: 'tween', duration: 0.22, ease: [0.16, 1, 0.3, 1] }}\n className=\"relative flex h-full flex-col border-r border-border bg-surface overflow-hidden flex-shrink-0\"\n >\n {/* ── Toggle button ── */}\n <div className={[\n 'flex h-14 flex-shrink-0 items-center border-b border-border',\n isExpanded ? 'justify-between px-3' : 'justify-center px-1.5',\n ].join(' ')}>\n {isExpanded && (\n <motion.span\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.08 }}\n className=\"text-xs font-semibold uppercase tracking-widest text-foreground-muted select-none\"\n >\n Menu\n </motion.span>\n )}\n <Tooltip title={isExpanded ? 'Collapse menu' : 'Expand menu'} placement=\"right\" delayDuration={500}>\n <button\n type=\"button\"\n onClick={onToggle}\n aria-label={isExpanded ? 'Collapse sidebar' : 'Expand sidebar'}\n className=\"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md text-foreground-muted hover:bg-surface-raised hover:text-foreground transition-colors duration-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <motion.svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-4 w-4\"\n animate={{ rotate: isExpanded ? 0 : 180 }}\n transition={{ type: 'tween', duration: 0.22 }}\n >\n <path d=\"M13 5l-5 5 5 5\" />\n </motion.svg>\n </button>\n </Tooltip>\n </div>\n\n {/* ── Nav items ── */}\n <nav className=\"flex-1 overflow-y-auto overflow-x-hidden py-2 px-1.5 space-y-0.5\">\n {sections.map((section, si) => (\n <div key={section.key} className={si > 0 ? 'pt-3' : ''}>\n {/* Section title — hidden when collapsed */}\n {section.title && isExpanded && (\n <motion.p\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.06 }}\n className=\"px-2.5 pb-1 text-[10px] font-semibold uppercase tracking-widest text-foreground-muted select-none\"\n >\n {section.title}\n </motion.p>\n )}\n {section.items.map((item) => (\n <NavItem key={item.key} item={item} isExpanded={isExpanded} />\n ))}\n </div>\n ))}\n </nav>\n\n {/* ── Footer slot ── */}\n {footer && (\n <div className={[\n 'flex flex-shrink-0 items-center border-t border-border py-2',\n isExpanded ? 'px-3 gap-2' : 'justify-center px-1.5',\n ].join(' ')}>\n {footer}\n </div>\n )}\n </motion.aside>\n </TooltipProvider>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport Sidebar from './Sidebar'\nimport type { SidebarSection, SidebarProps } from './Sidebar'\n\nexport interface AppShellProps {\n /**\n * Top navigation bar.\n * Typically `<TopBar brand={...} actions={...} />`.\n * On mobile, a hamburger button is injected to the left of this slot when\n * `sidebarSections` is non-empty. The TopBar should leave some leading space\n * (or use its `center` / `actions` props) to avoid overlap.\n */\n topBar?: React.ReactNode\n\n /** Sidebar navigation sections */\n sidebarSections?: SidebarSection[]\n\n /** Expanded width of the sidebar in px (default 220) */\n sidebarExpandedWidth?: SidebarProps['expandedWidth']\n\n /** Collapsed width of the sidebar in px (default 52) */\n sidebarCollapsedWidth?: SidebarProps['collapsedWidth']\n\n /** Start expanded (default false) */\n sidebarDefaultExpanded?: boolean\n\n /** Slot rendered at the bottom of the sidebar */\n sidebarFooter?: SidebarProps['footer']\n\n /** Main page content */\n children?: React.ReactNode\n\n /** Root element className */\n className?: string\n}\n\n/**\n * Full-page application layout skeleton.\n *\n * Composes a sticky TopBar + collapsible Sidebar + scrollable content area.\n *\n * **Responsive behaviour:**\n * - **≥ md (768 px):** Sidebar renders inline, collapsible via its own toggle.\n * - **< md (mobile):** Sidebar becomes a fixed overlay drawer. A hamburger\n * button appears to the left of the TopBar slot to open it. Tapping the\n * backdrop or the sidebar's own toggle closes it.\n *\n * @example\n * <AppShell\n * topBar={<TopBar brand={<Logo />} actions={<ThemeSwitch ... />} />}\n * sidebarSections={NAV_SECTIONS}\n * >\n * <PageContent />\n * </AppShell>\n */\nexport default function AppShell({\n topBar,\n sidebarSections = [],\n sidebarExpandedWidth = 220,\n sidebarCollapsedWidth = 52,\n sidebarDefaultExpanded = false,\n sidebarFooter,\n children,\n className = '',\n}: AppShellProps) {\n const [expanded, setExpanded] = useState(sidebarDefaultExpanded)\n const [isMobile, setIsMobile] = useState(false)\n const [mobileOpen, setMobileOpen] = useState(false)\n\n // Track mobile breakpoint\n useEffect(() => {\n const mq = window.matchMedia('(max-width: 767px)')\n const update = (e: MediaQueryList | MediaQueryListEvent) => setIsMobile(e.matches)\n update(mq)\n mq.addEventListener('change', update as (e: MediaQueryListEvent) => void)\n return () => mq.removeEventListener('change', update as (e: MediaQueryListEvent) => void)\n }, [])\n\n // Auto-close mobile sidebar on resize to desktop\n useEffect(() => {\n if (!isMobile) setMobileOpen(false)\n }, [isMobile])\n\n const hasSidebar = sidebarSections.length > 0\n\n return (\n <div className={`flex flex-col h-screen bg-background ${className}`}>\n\n {/* ── TopBar row ── */}\n {topBar && (\n <div className=\"flex-shrink-0 flex items-stretch z-topbar\">\n {/* Mobile hamburger — injected to the left of the TopBar on small screens */}\n {hasSidebar && (\n <button\n type=\"button\"\n className={[\n 'md:hidden flex-shrink-0 self-stretch flex items-center justify-center w-14',\n 'border-r border-border',\n 'text-foreground-secondary hover:bg-surface-raised hover:text-foreground',\n 'transition-colors duration-100',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent',\n ].join(' ')}\n onClick={() => setMobileOpen((o) => !o)}\n aria-label={mobileOpen ? 'Close navigation' : 'Open navigation'}\n aria-expanded={mobileOpen}\n >\n {mobileOpen ? (\n /* X icon */\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n ) : (\n /* Hamburger icon */\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" aria-hidden=\"true\">\n <path d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )}\n </button>\n )}\n {/* TopBar fills remaining width */}\n <div className=\"flex-1 min-w-0\">\n {topBar}\n </div>\n </div>\n )}\n\n {/* ── Body row: Sidebar + Content ── */}\n <div className=\"flex flex-1 overflow-hidden\">\n\n {/* Desktop inline sidebar */}\n {hasSidebar && !isMobile && (\n <Sidebar\n sections={sidebarSections}\n isExpanded={expanded}\n onToggle={() => setExpanded((e) => !e)}\n expandedWidth={sidebarExpandedWidth}\n collapsedWidth={sidebarCollapsedWidth}\n footer={sidebarFooter}\n />\n )}\n\n {/* Mobile sidebar overlay (portal-less fixed stack) */}\n {hasSidebar && isMobile && (\n <>\n {/* Backdrop */}\n <AnimatePresence>\n {mobileOpen && (\n <motion.div\n className=\"fixed inset-0 bg-black/40 z-overlay md:hidden\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n onClick={() => setMobileOpen(false)}\n aria-hidden=\"true\"\n />\n )}\n </AnimatePresence>\n\n {/* Sidebar panel */}\n <AnimatePresence>\n {mobileOpen && (\n <motion.div\n className=\"fixed inset-y-0 left-0 z-modal md:hidden\"\n initial={{ x: '-100%' }}\n animate={{ x: 0 }}\n exit={{ x: '-100%' }}\n transition={{\n type: 'tween',\n duration: 0.26,\n ease: [0.16, 1, 0.3, 1], // ease-out-expo\n }}\n >\n <Sidebar\n sections={sidebarSections}\n isExpanded={true}\n onToggle={() => setMobileOpen(false)}\n expandedWidth={sidebarExpandedWidth}\n collapsedWidth={sidebarCollapsedWidth}\n footer={sidebarFooter}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </>\n )}\n\n {/* Main content */}\n <main className=\"flex-1 overflow-y-auto overflow-x-hidden\">\n <div className=\"h-full p-6\">\n {children}\n </div>\n </main>\n </div>\n </div>\n )\n}\n\n// Re-export SidebarSection for consumer convenience\nexport type { SidebarSection, SidebarItem } from './Sidebar'\n","import React, { useEffect, useMemo, useRef } from 'react'\n\n// ─── Theme config types ───────────────────────────────────────────────────────\n\nexport interface ThemeColors {\n background?: string\n surface?: string\n 'surface-raised'?: string\n border?: string\n 'border-strong'?: string\n foreground?: string\n 'foreground-secondary'?: string\n 'foreground-muted'?: string\n accent?: string\n 'accent-hover'?: string\n 'accent-foreground'?: string\n error?: string\n warning?: string\n success?: string\n info?: string\n}\n\nexport interface ThemeRadius {\n sm?: string | number\n md?: string | number\n lg?: string | number\n xl?: string | number\n '2xl'?: string | number\n full?: string | number\n}\n\nexport interface ThemeShadows {\n sm?: string\n md?: string\n lg?: string\n xl?: string\n}\n\nexport interface ThemeTypography {\n /** e.g. '\"Geist\", sans-serif' */\n fontFamily?: string\n fontSizeXs?: string\n fontSizeSm?: string\n fontSizeBase?: string\n fontSizeLg?: string\n fontSizeXl?: string\n fontSize2xl?: string\n fontSize3xl?: string\n fontWeightNormal?: number | string\n fontWeightMedium?: number | string\n fontWeightSemibold?: number | string\n fontWeightBold?: number | string\n lineHeightTight?: number | string\n lineHeightSnug?: number | string\n lineHeightNormal?: number | string\n lineHeightRelaxed?: number | string\n}\n\nexport interface ThemeDensity {\n /** Height of xs control (icon buttons, tiny chips). Default: 24px */\n controlXs?: string | number\n /** Height of sm control (small inputs/buttons). Default: 28px */\n controlSm?: string | number\n /** Height of md control (default inputs/buttons). Default: 36px */\n controlMd?: string | number\n /** Height of lg control (large touch targets). Default: 44px */\n controlLg?: string | number\n /** TopBar height. Default: 56px */\n topbar?: string | number\n}\n\nexport interface ThemeMotion {\n durationFast?: string\n durationNormal?: string\n durationSlow?: string\n durationGentle?: string\n}\n\n/**\n * Partial theme override configuration.\n * Every field is optional — only the keys you provide are overridden.\n */\nexport interface ThemeConfig {\n colors?: ThemeColors\n radius?: ThemeRadius\n shadows?: ThemeShadows\n typography?: ThemeTypography\n density?: ThemeDensity\n motion?: ThemeMotion\n}\n\nexport interface ThemeProviderProps {\n /**\n * Token overrides applied in both light and dark mode (on top of the defaults).\n * For dark-specific overrides see `darkTheme`.\n */\n theme?: ThemeConfig\n\n /**\n * Additional token overrides applied only when the wrapper element carries\n * the `.dark` class (i.e. when `colorScheme=\"dark\"` or when a parent sets `.dark`).\n * Injected via a scoped `<style>` tag — no inline-style limitations.\n */\n darkTheme?: ThemeConfig\n\n /**\n * Managed color scheme.\n * - `'light'` — removes `.dark` class from the wrapper\n * - `'dark'` — adds `.dark` class to the wrapper\n * - `'system'` — follows `prefers-color-scheme` media query\n * - `'auto'` — do nothing; inherit from an ancestor (default)\n */\n colorScheme?: 'light' | 'dark' | 'system' | 'auto'\n\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction px(v: string | number): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\nfunction str(v: string | number | undefined): string | undefined {\n return v == null ? undefined : String(v)\n}\n\nfunction toCssVars(theme?: ThemeConfig): Record<string, string> {\n if (!theme) return {}\n const out: Record<string, string> = {}\n\n if (theme.colors) {\n for (const [k, v] of Object.entries(theme.colors)) {\n if (v != null) out[`--color-${k}`] = v\n }\n }\n if (theme.radius) {\n for (const [k, v] of Object.entries(theme.radius)) {\n if (v != null) out[`--radius-${k}`] = px(v)\n }\n }\n if (theme.shadows) {\n for (const [k, v] of Object.entries(theme.shadows)) {\n if (v != null) out[`--shadow-${k}`] = v\n }\n }\n if (theme.typography) {\n const t = theme.typography\n const map: [string, string | number | undefined][] = [\n ['--font-family-sans', t.fontFamily],\n ['--font-size-xs', t.fontSizeXs],\n ['--font-size-sm', t.fontSizeSm],\n ['--font-size-base', t.fontSizeBase],\n ['--font-size-lg', t.fontSizeLg],\n ['--font-size-xl', t.fontSizeXl],\n ['--font-size-2xl', t.fontSize2xl],\n ['--font-size-3xl', t.fontSize3xl],\n ['--font-weight-normal', t.fontWeightNormal],\n ['--font-weight-medium', t.fontWeightMedium],\n ['--font-weight-semibold', t.fontWeightSemibold],\n ['--font-weight-bold', t.fontWeightBold],\n ['--line-height-tight', t.lineHeightTight],\n ['--line-height-snug', t.lineHeightSnug],\n ['--line-height-normal', t.lineHeightNormal],\n ['--line-height-relaxed', t.lineHeightRelaxed],\n ]\n for (const [cssVar, val] of map) {\n const s = str(val)\n if (s != null) out[cssVar] = s\n }\n }\n if (theme.density) {\n const d = theme.density\n const map: [string, string | number | undefined][] = [\n ['--height-control-xs', d.controlXs],\n ['--height-control-sm', d.controlSm],\n ['--height-control-md', d.controlMd],\n ['--height-control-lg', d.controlLg],\n ['--height-topbar', d.topbar],\n ]\n for (const [cssVar, val] of map) {\n if (val != null) out[cssVar] = px(val)\n }\n }\n if (theme.motion) {\n const m = theme.motion\n const map: [string, string | undefined][] = [\n ['--duration-fast', m.durationFast],\n ['--duration-normal', m.durationNormal],\n ['--duration-slow', m.durationSlow],\n ['--duration-gentle', m.durationGentle],\n ]\n for (const [cssVar, val] of map) {\n if (val != null) out[cssVar] = val\n }\n }\n\n return out\n}\n\nfunction varsToStyleString(vars: Record<string, string>): string {\n return Object.entries(vars).map(([k, v]) => `${k}: ${v};`).join(' ')\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Scoped theme provider.\n *\n * Wraps children in a `<div>` that carries CSS custom-property overrides\n * as inline styles. A scoped `<style>` tag handles dark-mode overrides.\n *\n * @example Basic brand color swap\n * <ThemeProvider theme={{ colors: { accent: '#e63946', 'accent-hover': '#c1121f' } }}>\n * <App />\n * </ThemeProvider>\n *\n * @example Compact density + custom font\n * <ThemeProvider\n * theme={{\n * density: { controlMd: 30, controlLg: 38, topbar: 48 },\n * typography: { fontFamily: '\"Geist\", sans-serif' },\n * }}\n * >\n * <Dashboard />\n * </ThemeProvider>\n *\n * @example Managed dark mode\n * <ThemeProvider\n * colorScheme=\"dark\"\n * theme={{ colors: { accent: '#60a5fa' } }}\n * darkTheme={{ colors: { accent: '#93c5fd' } }}\n * >\n * <App />\n * </ThemeProvider>\n */\nexport default function ThemeProvider({\n theme,\n darkTheme,\n colorScheme = 'auto',\n children,\n className = '',\n style,\n}: ThemeProviderProps) {\n const id = React.useId().replace(/:/g, '')\n const scopeClass = `geo-th-${id}`\n\n const divRef = useRef<HTMLDivElement>(null)\n\n // ── Managed color scheme ─────────────────────────────────────────────────\n useEffect(() => {\n const el = divRef.current\n if (!el) return\n\n if (colorScheme === 'auto') return\n\n if (colorScheme === 'system') {\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const apply = (e: MediaQueryListEvent | MediaQueryList) => {\n el.classList.toggle('dark', e.matches)\n }\n apply(mq)\n mq.addEventListener('change', apply)\n return () => mq.removeEventListener('change', apply)\n }\n\n el.classList.toggle('dark', colorScheme === 'dark')\n }, [colorScheme])\n\n // ── Inline CSS vars (light + always-on overrides) ────────────────────────\n const lightVars = useMemo(() => toCssVars(theme), [theme])\n\n // ── Scoped dark-mode override via injected <style> ───────────────────────\n const darkVarStr = useMemo(() => {\n if (!darkTheme) return ''\n const dvars = toCssVars(darkTheme)\n if (!Object.keys(dvars).length) return ''\n return `.${scopeClass}.dark { ${varsToStyleString(dvars)} }`\n // scopeClass is stable (derived from useId); only darkTheme matters\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [darkTheme])\n\n return (\n <>\n {darkVarStr && (\n <style dangerouslySetInnerHTML={{ __html: darkVarStr }} />\n )}\n <div\n ref={divRef}\n className={`${scopeClass} ${className}`.trim()}\n style={{ ...(lightVars as React.CSSProperties), ...style }}\n >\n {children}\n </div>\n </>\n )\n}\n","import React from 'react'\n\n/** ─────────────────── base ─────────────────── */\n\ninterface SkeletonBaseProps {\n className?: string\n /** Override inline styles */\n style?: React.CSSProperties\n}\n\n// Shared shimmer classes — the gradient sweeps across the element on repeat\nconst SHIMMER = [\n 'animate-shimmer rounded-sm',\n 'bg-[length:400%_100%]',\n 'bg-gradient-to-r',\n 'from-border via-border-strong/40 to-border',\n].join(' ')\n\n/** ─────────────────── SkeletonBox ─────────────────── */\n\nexport interface SkeletonBoxProps extends SkeletonBaseProps {\n width?: number | string\n height?: number | string\n /** Override border-radius (defaults to token --radius-md) */\n radius?: number | string\n}\n\n/**\n * Generic rectangular loading placeholder.\n * Use for images, cards, headers, or any block element.\n *\n * @example\n * <SkeletonBox width={240} height={160} />\n * <SkeletonBox width=\"100%\" height={48} radius=\"var(--radius-lg)\" />\n */\nexport function SkeletonBox({ width, height = 16, radius, className = '', style }: SkeletonBoxProps) {\n return (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`block ${SHIMMER} ${className}`}\n style={{\n width: width ?? '100%',\n height,\n borderRadius: radius ?? 'var(--radius-md)',\n ...style,\n }}\n />\n )\n}\n\n/** ─────────────────── SkeletonText ─────────────────── */\n\nexport interface SkeletonTextProps extends SkeletonBaseProps {\n /** Number of lines (default 3) */\n lines?: number\n /** Width of the last (shortest) line as a percentage (default 60) */\n lastLineWidth?: number\n /** Line height in px (default 14) */\n lineHeight?: number\n /** Gap between lines in px (default 8) */\n gap?: number\n}\n\n/**\n * Multi-line text loading placeholder.\n * Last line is shorter to mimic real paragraph layout.\n *\n * @example\n * <SkeletonText lines={4} lastLineWidth={45} />\n */\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = 60,\n lineHeight = 14,\n gap = 8,\n className = '',\n style,\n}: SkeletonTextProps) {\n return (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`flex flex-col ${className}`}\n style={{ gap, ...style }}\n >\n {Array.from({ length: lines }).map((_, i) => {\n const isLast = i === lines - 1\n const width = isLast && lines > 1 ? `${lastLineWidth}%` : '100%'\n return (\n <span\n key={i}\n className={`block ${SHIMMER}`}\n style={{ height: lineHeight, width, borderRadius: 'var(--radius-sm)' }}\n />\n )\n })}\n </div>\n )\n}\n\n/** ─────────────────── SkeletonCircle ─────────────────── */\n\nexport interface SkeletonCircleProps extends SkeletonBaseProps {\n /** Diameter in px (default 40) */\n size?: number\n}\n\n/**\n * Circular loading placeholder — avatars, icons, status indicators.\n *\n * @example\n * <SkeletonCircle size={48} />\n */\nexport function SkeletonCircle({ size = 40, className = '', style }: SkeletonCircleProps) {\n return (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`block flex-shrink-0 ${SHIMMER} ${className}`}\n style={{\n width: size,\n height: size,\n borderRadius: '50%',\n ...style,\n }}\n />\n )\n}\n\n/** ─────────────────── SkeletonCard ─────────────────── */\n\nexport interface SkeletonCardProps extends SkeletonBaseProps {\n /** Include a circular avatar in the header (default true) */\n hasAvatar?: boolean\n /** Number of text lines in the body (default 3) */\n lines?: number\n}\n\n/**\n * Composite card skeleton — avatar + heading + body text + action strip.\n * Use as a drop-in while real card data loads.\n *\n * @example\n * <div className=\"grid grid-cols-3 gap-4\">\n * {loading && Array.from({ length: 3 }).map((_, i) => <SkeletonCard key={i} />)}\n * </div>\n */\nexport function SkeletonCard({ hasAvatar = true, lines = 3, className = '', style }: SkeletonCardProps) {\n return (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`rounded-lg border border-border bg-surface p-4 ${className}`}\n style={style}\n >\n {/* Header row */}\n <div className=\"flex items-center gap-3 mb-4\">\n {hasAvatar && <SkeletonCircle size={36} />}\n <div className=\"flex-1 flex flex-col gap-2\">\n <SkeletonBox height={12} width=\"55%\" />\n <SkeletonBox height={10} width=\"35%\" />\n </div>\n </div>\n\n {/* Body text */}\n <SkeletonText lines={lines} lastLineWidth={55} />\n\n {/* Action strip */}\n <div className=\"mt-4 flex gap-2\">\n <SkeletonBox height={28} width={72} />\n <SkeletonBox height={28} width={56} />\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface TextInputProps {\n value?: any\n onChange?: React.ChangeEventHandler<HTMLInputElement>\n disabled?: boolean\n label?: React.ReactNode\n htmlFor?: string\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n /** 'horizontal' | 'vertical' */\n layout?: string\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n id?: string\n [key: string]: any\n}\n\n/**\n * Standard text input with label and validation message.\n */\nexport default function TextInput({\n value,\n onChange,\n disabled,\n label,\n htmlFor,\n placeholder,\n name,\n inputStyle,\n style,\n layout,\n onBlur,\n errorMessage,\n labelColor,\n}: TextInputProps) {\n return (\n <div className=\"relative flex flex-col items-center justify-center\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n style={style ?? {}}\n >\n <label\n style={{ color: labelColor || undefined }}\n className={`text-md font-bold ml-1 max-content ${!labelColor && 'text-prussian-blue dark:text-white'}`}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n <input\n autoComplete=\"off\"\n disabled={disabled}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n type=\"text\"\n name={name}\n id={htmlFor}\n className={`${errorMessage !== undefined ? 'border border-error' : ''} focus:outline-oxford-blue-700-opaque p-2 h-9 w-60 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed transition-all`}\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">\n {errorMessage}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface NumberInputProps {\n step?: number\n value?: any\n onChange?: (e: { target: { value: number; id?: string; name?: string } }) => void\n label?: React.ReactNode\n htmlFor?: string\n name?: string\n disabled?: boolean\n /** 'horizontal' | 'vertical' */\n layout?: string\n errorMessage?: React.ReactNode\n inputStyle?: React.CSSProperties\n labelStyle?: React.CSSProperties\n placeholder?: string\n style?: React.CSSProperties\n min?: number\n max?: number\n readOnly?: boolean\n [key: string]: any\n}\n\n/**\n * Number input with increment / decrement controls.\n */\nexport default function NumberInput({\n step = 1,\n value,\n onChange,\n label,\n htmlFor,\n name,\n disabled,\n layout,\n errorMessage,\n inputStyle,\n labelStyle,\n placeholder,\n style = {},\n min,\n max,\n readOnly = false,\n}: NumberInputProps) {\n const onIncrement = () => {\n let newValue = value ? parseFloat(value) + step : 0 + step\n if (max !== undefined && newValue > max) return\n onChange?.({ target: { value: newValue, id: htmlFor, name } })\n }\n\n const onDecrement = () => {\n let newValue = value ? parseFloat(value) - step : 0 - step\n if (min !== undefined && newValue < min) return\n onChange?.({ target: { value: newValue, id: htmlFor, name } })\n }\n\n return (\n <div>\n <div className=\"flex items-center justify-between pr-1 pl-1\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n >\n <label\n className=\"text-md font-bold ml-1 w-60 select-none text-prussian-blue dark:text-white\"\n style={labelStyle}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n <div\n style={style}\n className={`${disabled ? 'bg-disabled' : 'bg-white'} rounded-lg flex items-center pr-1 pl-2 w-max`}\n >\n <input\n min={min}\n max={max}\n autoComplete=\"off\"\n disabled={disabled}\n name={name}\n id={htmlFor}\n step={step}\n value={value}\n onChange={onChange as any}\n type=\"number\"\n className=\"focus:outline-0 focus-visible:outline-0 h-9 w-60 text-prussian-blue disabled:bg-disabled disabled:cursor-not-allowed transition-all\"\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n readOnly={readOnly}\n />\n <div className=\"flex flex-col\">\n <span\n onClick={onIncrement}\n className=\"rotate-180 cursor-pointer transition-all duration-300 hover:bg-ice rounded-sm\"\n >\n {/* ChevronDown up */}\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-3 w-3\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </span>\n <span\n onClick={onDecrement}\n className=\"cursor-pointer transition-all duration-300 hover:bg-ice rounded-sm\"\n >\n {/* ChevronDown down */}\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-3 w-3\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div className=\"text-center text-error min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface PasswordProps {\n value?: any\n onChange?: React.ChangeEventHandler<HTMLInputElement>\n disabled?: boolean\n label?: React.ReactNode\n htmlFor?: string\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n layout?: string\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n iconColor?: string\n [key: string]: any\n}\n\n/**\n * Password input with show/hide toggle.\n */\nexport default function Password({\n value,\n onChange,\n disabled,\n label,\n htmlFor,\n placeholder,\n name,\n inputStyle,\n style,\n layout,\n onBlur,\n errorMessage,\n labelColor,\n iconColor,\n}: PasswordProps) {\n const [passwordVisible, setPasswordVisible] = useState(false)\n const color = iconColor ?? COLORS.PALETTE['prussian-blue']\n\n return (\n <div className=\"relative flex flex-col items-center justify-center\" style={style ?? {}}>\n <div className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}>\n <label\n style={{ color: labelColor || undefined }}\n className={`text-md font-bold ml-1 max-content ${!labelColor && 'text-prussian-blue dark:text-white'}`}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n <div className=\"flex items-center gap-1\">\n <input\n autoComplete=\"off\"\n disabled={disabled}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n type={passwordVisible ? 'text' : 'password'}\n name={name}\n id={htmlFor}\n className={`${errorMessage !== undefined ? 'border border-error' : ''} focus:outline-oxford-blue-700-opaque p-2 h-9 w-52 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed transition-all`}\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n <button\n type=\"button\"\n className=\"cursor-pointer p-1\"\n onClick={() => setPasswordVisible(!passwordVisible)}\n aria-label={passwordVisible ? 'Hide password' : 'Show password'}\n >\n {passwordVisible ? (\n /* EyeSlash */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className=\"w-6 h-6\">\n <path d=\"M3.53 2.47a.75.75 0 00-1.06 1.06l18 18a.75.75 0 101.06-1.06l-18-18zM22.676 12.553a11.249 11.249 0 01-2.631 4.31l-3.099-3.099a5.25 5.25 0 00-6.71-6.71L7.759 4.577a11.217 11.217 0 014.242-.827c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113z\" />\n <path d=\"M15.75 12c0 .18-.013.357-.037.53l-4.244-4.243A3.75 3.75 0 0115.75 12zM12.53 15.713l-4.243-4.244a3.75 3.75 0 004.243 4.243z\" />\n <path d=\"M6.75 12c0-.619.107-1.213.304-1.764l-3.1-3.1a11.25 11.25 0 00-2.63 4.31c-.12.362-.12.752 0 1.114 1.489 4.467 5.704 7.69 10.675 7.69 1.5 0 2.933-.294 4.242-.827l-2.477-2.477A5.25 5.25 0 016.75 12z\" />\n </svg>\n ) : (\n /* Eye */\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={color} className=\"w-6 h-6\">\n <path d=\"M12 15a3 3 0 100-6 3 3 0 000 6z\" />\n <path fillRule=\"evenodd\" d=\"M1.323 11.447C2.811 6.976 7.028 3.75 12.001 3.75c4.97 0 9.185 3.223 10.675 7.69.12.362.12.752 0 1.113-1.487 4.471-5.705 7.697-10.677 7.697-4.97 0-9.186-3.223-10.675-7.69a1.762 1.762 0 010-1.113zM17.25 12a5.25 5.25 0 11-10.5 0 5.25 5.25 0 0110.5 0z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nexport interface CheckboxProps {\n /** Controlled checked state */\n checked?: boolean\n onChange?: (e: { target: { checked: boolean; id?: string; name?: string } }) => void\n label?: React.ReactNode\n name?: string\n /** `id` for the hidden input and the `<label htmlFor>` link */\n htmlFor?: string\n errorMessage?: React.ReactNode\n disabled?: boolean\n /** @deprecated Use `checked` */\n value?: boolean\n}\n\n/**\n * Accessible checkbox powered by Radix Checkbox.\n *\n * Radix handles keyboard activation, focus ring, and `role=\"checkbox\"` ARIA.\n * The check mark pops in with a spring animation on first check.\n *\n * @example\n * <Checkbox\n * htmlFor=\"agree\"\n * label=\"I agree to the terms\"\n * checked={form.agree}\n * onChange={({ target }) => setField('agree', target.checked)}\n * />\n */\nexport default function Checkbox({\n checked,\n value, // legacy alias\n onChange,\n label,\n name,\n htmlFor,\n errorMessage,\n disabled = false,\n}: CheckboxProps) {\n // Support legacy `value` prop transparently\n const isChecked = checked ?? value ?? false\n\n return (\n <div className=\"flex flex-col gap-1\">\n <label\n htmlFor={htmlFor}\n className={[\n 'inline-flex items-center gap-2.5',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n ].join(' ')}\n >\n <CheckboxPrimitive.Root\n id={htmlFor}\n name={name}\n checked={isChecked}\n disabled={disabled}\n onCheckedChange={(c) =>\n onChange?.({ target: { checked: !!c, id: htmlFor, name } })\n }\n className={[\n // Box\n 'relative flex h-[18px] w-[18px] flex-shrink-0 items-center justify-center',\n 'rounded-sm border transition-colors duration-150',\n // Unchecked\n 'border-border-strong bg-surface',\n // Checked\n 'data-[state=checked]:bg-accent data-[state=checked]:border-accent',\n // Focus\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-1',\n // Disabled\n 'disabled:cursor-not-allowed',\n ].join(' ')}\n aria-label={typeof label === 'string' ? label : undefined}\n >\n <CheckboxPrimitive.Indicator\n className=\"flex items-center justify-center data-[state=checked]:animate-check-pop\"\n >\n {/* Check mark */}\n <svg\n width=\"11\"\n height=\"9\"\n viewBox=\"0 0 11 9\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M1 4.5L4 7.5L10 1\"\n stroke=\"white\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n {label && (\n <span className=\"text-sm text-foreground-secondary select-none leading-snug\">\n {label}\n </span>\n )}\n </label>\n\n {errorMessage && (\n <span className=\"text-xs text-status-error pl-[26px]\">{errorMessage}</span>\n )}\n </div>\n )\n}\n","import React, { useId } from 'react'\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\n\nexport interface SwitchInputProps {\n checked?: boolean\n onChange?: (e: { target: { checked: boolean } }) => void\n checkedIcon?: React.ReactNode\n uncheckedIcon?: React.ReactNode\n [key: string]: any\n}\n\n/**\n * Form switch (on/off toggle) powered by Radix Switch.\n *\n * Radix handles keyboard activation, focus ring, and `role=\"switch\"` ARIA.\n * Accepts optional icon slots for the thumb in checked/unchecked states.\n *\n * Emits `{ target: { checked } }` for compatibility with existing handlers.\n *\n * @example\n * <Switch\n * checked={form.enabled}\n * onChange={({ target }) => setField('enabled', target.checked)}\n * />\n */\nexport default function Switch({\n checked = false,\n onChange,\n checkedIcon,\n uncheckedIcon,\n}: SwitchInputProps) {\n const id = useId()\n\n return (\n <div>\n <label htmlFor={id} className=\"flex items-center cursor-pointer mr-12 select-none\">\n <SwitchPrimitive.Root\n id={id}\n checked={checked}\n onCheckedChange={(c) => onChange?.({ target: { checked: c } })}\n className=\"relative inline-flex h-6 w-14 items-center rounded-full bg-prussian-blue dark:bg-white transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-usafa-blue\"\n >\n <SwitchPrimitive.Thumb\n className=\"pointer-events-none inline-flex h-8 w-8 items-center justify-center rounded-full bg-independence dark:bg-prussian-blue shadow transition-transform duration-200 data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-[-4px]\"\n >\n {checkedIcon && uncheckedIcon\n ? checked\n ? checkedIcon\n : uncheckedIcon\n : null}\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n </label>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport COLORS from '../../utils/colors'\n\nexport interface AutoCompleteItem {\n key: string\n value: string\n label: string\n icon?: React.ReactNode\n}\n\nexport interface AutoCompleteProps {\n disabled?: boolean\n label?: React.ReactNode\n placeholder?: string\n name?: string\n inputStyle?: React.CSSProperties\n style?: React.CSSProperties\n /** 'horizontal' | 'vertical' */\n layout?: string\n items?: AutoCompleteItem[]\n onItemClick?: (value: string) => void\n /** Custom \"empty\" message */\n emptyText?: string\n [key: string]: any\n}\n\n/**\n * Search-as-you-type autocomplete powered by Radix Popover.\n *\n * The popover opens when the input is focused and closes when an item is\n * selected or the user clicks away. Radix handles portal-based z-stacking.\n *\n * @example\n * <AutoComplete\n * label=\"Vessel\"\n * items={vessels.map(v => ({ key: v.imo, value: v.imo, label: v.name }))}\n * onItemClick={(imo) => setVessel(imo)}\n * />\n */\nexport default function AutoComplete({\n disabled,\n label,\n placeholder,\n name,\n inputStyle,\n style,\n layout = 'vertical',\n items = [],\n onItemClick,\n emptyText = 'No results found',\n}: AutoCompleteProps) {\n const [term, setTerm] = useState('')\n const [open, setOpen] = useState(false)\n\n const foundItems = term.trim()\n ? items.filter(\n ({ key, label }) =>\n label.toLowerCase().includes(term.toLowerCase()) ||\n key.toLowerCase().includes(term.toLowerCase())\n )\n : []\n\n const handleSelect = (item: AutoCompleteItem) => {\n setTerm(`${item.label} (${item.value})`)\n onItemClick?.(item.value)\n setOpen(false)\n }\n\n return (\n <div className=\"relative flex flex-col items-center justify-center\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n style={style ?? {}}\n >\n {label && (\n <label className=\"text-lg font-bold ml-1 max-content text-prussian-blue dark:text-white\">\n {label}\n </label>\n )}\n\n <Popover.Root open={open && !disabled} onOpenChange={(o) => !disabled && setOpen(o)}>\n <Popover.Anchor asChild>\n <div className=\"bg-white flex items-center gap-1 rounded-lg pr-2\">\n <input\n disabled={disabled}\n value={term}\n onChange={(e) => {\n setTerm(e.target.value)\n setOpen(true)\n }}\n onFocus={() => setOpen(true)}\n type=\"text\"\n name={name}\n className=\"focus:outline-none pl-2 h-9 w-56 outline-offset-2 text-prussian-blue mt-1 rounded-lg disabled:bg-disabled disabled:cursor-not-allowed\"\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n autoComplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-autocomplete=\"list\"\n />\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-5 h-5 flex-shrink-0\">\n <path fillRule=\"evenodd\" d=\"M10.5 3.75a6.75 6.75 0 100 13.5 6.75 6.75 0 000-13.5zM2.25 10.5a8.25 8.25 0 1114.59 5.28l4.69 4.69a.75.75 0 11-1.06 1.06l-4.69-4.69A8.25 8.25 0 012.25 10.5z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n </Popover.Anchor>\n\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className=\"w-64 bg-ice dark:bg-midnight-green-eagle-900 rounded-lg mt-1 shadow-md z-50 overflow-y-auto max-h-36 animate-in fade-in-0 zoom-in-95\"\n >\n {foundItems.length === 0 ? (\n <div className=\"h-full w-full flex flex-col items-center justify-center py-4 text-sm text-prussian-blue dark:text-white\">\n {emptyText}\n </div>\n ) : (\n <div role=\"listbox\">\n {foundItems.map((item) => (\n <div\n key={item.key}\n role=\"option\"\n className=\"text-sm flex items-center gap-2 p-2 transition-all duration-150 hover:bg-ice-dark dark:hover:bg-prussian-blue cursor-pointer text-prussian-blue dark:text-white\"\n onClick={() => handleSelect(item)}\n >\n {item.icon}\n <span>\n {item.label} ({item.value})\n </span>\n </div>\n ))}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport DropdownPill from './DropdownPill'\nimport COLORS from '../../utils/colors'\n\nexport interface TreeSelectItem {\n key: string | number\n label: React.ReactNode\n icon?: React.ReactNode\n}\n\nexport interface TreeSelectProps {\n hasSearch?: boolean\n label?: React.ReactNode\n name?: string\n value?: any\n onChange?: (e: { target: { value: any; id?: string; name?: string } }) => void\n onBlur?: React.FocusEventHandler\n disabled?: boolean\n /** 'horizontal' | 'vertical' */\n layout?: string\n errorMessage?: React.ReactNode\n style?: React.CSSProperties\n htmlFor?: string\n items?: TreeSelectItem[]\n}\n\n/**\n * Single-value select with a flat list, powered by Radix Popover.\n * Functionally similar to Dropdown (single-select only).\n *\n * @example\n * <TreeSelect label=\"Fleet\" items={fleets} value={form.fleet} onChange={handleChange} htmlFor=\"fleet\" />\n */\nexport default function TreeSelect({\n label,\n name,\n value,\n onChange,\n disabled,\n layout = 'horizontal',\n errorMessage,\n style = {},\n htmlFor,\n items = [],\n}: TreeSelectProps) {\n const [open, setOpen] = useState(false)\n const [hoveredItem, setHoveredItem] = useState<string | number | null>(null)\n const [innerItems, setInnerItems] = useState<TreeSelectItem[]>([])\n\n useEffect(() => {\n setInnerItems(items)\n }, [items])\n\n const selectItem = (key: string | number) => {\n onChange?.({ target: { value: key, id: htmlFor, name } })\n setOpen(false)\n }\n\n return (\n <div className=\"mt-2\">\n <div\n className={`flex ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}\n >\n {label && (\n <label\n className=\"text-md font-bold ml-1 max-content select-none text-prussian-blue dark:text-white\"\n htmlFor={htmlFor}\n >\n {label}\n </label>\n )}\n\n <Popover.Root open={open && !disabled} onOpenChange={(o) => !disabled && setOpen(o)}>\n <Popover.Trigger asChild>\n <div\n id={htmlFor}\n style={style}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={`flex items-center justify-between relative h-9 rounded-lg p-2 cursor-pointer ${disabled ? 'cursor-not-allowed bg-disabled' : 'bg-white'}`}\n tabIndex={disabled ? -1 : 0}\n >\n {/* Value display */}\n <div className={`h-7 ${!style?.width ? 'min-w-[240px]' : ''} focus:outline-none text-prussian-blue flex items-center gap-1`}>\n {Array.isArray(value) ? (\n <>\n {value.slice(0, 1).map((val, id) => (\n <DropdownPill\n key={id}\n hasSiblings={value.length > 1}\n value={innerItems.find((it) => it.key === val)?.label}\n />\n ))}\n {value.length > 1 && <DropdownPill value={`+${value.length - 1} more`} />}\n </>\n ) : value != null ? (\n <DropdownPill value={innerItems.find((it) => it.key === value)?.label} />\n ) : null}\n </div>\n\n {/* Chevron */}\n <div className={`transition-transform duration-300 ml-2 ${open ? 'rotate-180' : 'rotate-0'}`}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={COLORS.PALETTE['prussian-blue']} strokeWidth={2} className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n style={{ width: style?.width || 240 }}\n className=\"bg-ice rounded-lg shadow-md z-50 p-2 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\"\n >\n <div role=\"listbox\" className=\"max-h-40 overflow-y-auto\">\n {innerItems.map((item, idx) => (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={value === item.key}\n aria-rowindex={idx}\n className={`flex items-center justify-between p-2 hover:bg-prussian-blue hover:text-white transition-all duration-150 text-sm text-prussian-blue rounded-lg cursor-pointer`}\n onClick={() => selectItem(item.key)}\n onMouseEnter={() => setHoveredItem(item.key)}\n onMouseLeave={() => setHoveredItem(null)}\n >\n <div className=\"flex items-center gap-2 text-xs\">\n {item.icon && <div>{item.icon}</div>}\n {item.label}\n </div>\n {value === item.key && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M4 10l4.5 4.5L16 6\"\n stroke={hoveredItem === item.key ? '#fff' : COLORS.PALETTE['prussian-blue']}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n ))}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface FileInputProps {\n allowMultiple?: boolean\n onChange?: (e: { target: { files: File[]; name?: string; id?: string; value?: string } }) => void\n name?: string\n /** Accepted MIME types / extensions */\n accept?: string\n [key: string]: any\n}\n\n/**\n * Drag-and-drop / click file input.\n *\n * Decoupled from ThemeContext — uses CSS `dark:` classes.\n *\n * @example\n * <FileInput\n * name=\"xlsxUpload\"\n * accept=\".xlsx\"\n * onChange={(e) => setFile(e.target.files[0])}\n * />\n */\nexport default function FileInput({\n allowMultiple = false,\n onChange,\n name,\n accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n}: FileInputProps) {\n const fileInput = useRef<HTMLInputElement>(null)\n const [files, setFiles] = useState<File[]>([])\n\n const openPicker = () => {\n fileInput.current?.dispatchEvent(new MouseEvent('click', { bubbles: false }))\n }\n\n const handleFiles = (list: File[]) => {\n setFiles(list)\n onChange?.({ target: { files: list } })\n }\n\n const onDrop = (e: React.DragEvent) => {\n e.preventDefault()\n const fileList: File[] = []\n if (e.dataTransfer.items) {\n for (let i = 0; i < e.dataTransfer.items.length; i++) {\n if (e.dataTransfer.items[i].kind === 'file') {\n const f = e.dataTransfer.items[i].getAsFile()\n if (f) fileList.push(f)\n }\n }\n } else {\n for (let i = 0; i < e.dataTransfer.files.length; i++) {\n fileList.push(e.dataTransfer.files[i])\n }\n }\n handleFiles(fileList)\n }\n\n const localOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(Array.from(e.target.files ?? []))\n }\n\n const removeFile = (e: React.MouseEvent) => {\n e.stopPropagation()\n setFiles([])\n onChange?.({ target: { files: [], name, id: name, value: '' } })\n if (fileInput.current) fileInput.current.value = ''\n }\n\n return (\n <div\n onClick={openPicker}\n className=\"border-2 hover:border-prussian-blue border-ice-dark w-full h-full rounded-md transition-all duration-300 border-dashed dark:border-independence hover:dark:border-ice-dark cursor-pointer\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={onDrop}\n >\n <input\n id={name}\n name={name}\n onChange={localOnChange}\n ref={fileInput}\n hidden\n type=\"file\"\n accept={accept}\n multiple={allowMultiple}\n />\n\n {files.length === 0 ? (\n <div className=\"flex flex-col h-full items-center justify-center gap-2\">\n {/* Upload icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-16 h-16 dark:fill-white\">\n <path fillRule=\"evenodd\" d=\"M11.47 2.47a.75.75 0 011.06 0l4.5 4.5a.75.75 0 01-1.06 1.06l-3.22-3.22V16.5a.75.75 0 01-1.5 0V4.81L8.03 8.03a.75.75 0 01-1.06-1.06l4.5-4.5zM3 15.75a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z\" clipRule=\"evenodd\" />\n </svg>\n <div className=\"text-prussian-blue dark:text-white text-sm\">Click or Drop a file</div>\n </div>\n ) : (\n <div className=\"flex gap-3 items-center justify-center w-full h-full\">\n {files.map((file, id) => (\n <div\n key={`${id}${file.name}`}\n className=\"text-xs flex flex-col items-center w-20 h-24 text-center bg-ice-dark p-4 dark:bg-independence rounded-md relative\"\n >\n <button\n type=\"button\"\n onClick={removeFile}\n className=\"bg-error rounded-full w-4 h-4 absolute right-[-5px] top-[-5px] cursor-pointer flex items-center justify-center\"\n aria-label=\"Remove file\"\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"#fff\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n {/* File icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill={COLORS.PALETTE['prussian-blue']} className=\"w-10 h-10 dark:fill-white\">\n <path fillRule=\"evenodd\" d=\"M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0016.5 9h-1.875a1.875 1.875 0 01-1.875-1.875V5.25A3.75 3.75 0 009 1.5H5.625z\" clipRule=\"evenodd\" />\n <path d=\"M12.971 1.816A5.23 5.23 0 0114.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 013.434 1.279 9.768 9.768 0 00-6.963-6.963z\" />\n </svg>\n <span className=\"text-ellipsis whitespace-nowrap overflow-hidden w-full text-prussian-blue dark:text-white\">\n {file.name}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport Button from './Button'\nimport COLORS from '../../utils/colors'\n\n/** ─────────────────── helpers ─────────────────── */\nconst MONTHS: Record<number, string> = {\n 1: 'January', 2: 'February', 3: 'March', 4: 'April',\n 5: 'May', 6: 'June', 7: 'July', 8: 'August',\n 9: 'September', 10: 'October', 11: 'November', 12: 'December',\n}\nconst DAYS: Record<number, string> = { 0: 'Sun', 1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri', 6: 'Sat' }\n\nfunction formatDate(date: Date): string {\n const fmt = new Intl.DateTimeFormat('en-GB', { year: 'numeric', month: 'numeric', day: 'numeric' })\n const parts = fmt.formatToParts(date)\n const d = parts.find((x) => x.type === 'day')!.value\n const m = parts.find((x) => x.type === 'month')!.value\n const y = parts.find((x) => x.type === 'year')!.value\n return `${y}-${m}-${d}`\n}\n\nfunction getMonthDays(year: number, month: number): Date[] {\n const days: Date[] = []\n for (let i = 1; i <= 31; i++) {\n const d = new Date(year, month - 1, i)\n if (d.getMonth() + 1 > month) break\n days.push(d)\n }\n return days\n}\n\nconst ChevronRight = ({ color = COLORS.PALETTE['prussian-blue'] }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n)\n\nconst DoubleChevronRight = ({ color = COLORS.PALETTE['prussian-blue'] }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13 5l7 7-7 7M5 5l7 7-7 7\" />\n </svg>\n)\n\nconst ChevronDown = ({ color = COLORS.PALETTE['prussian-blue'] }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2} className=\"w-4 h-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n)\n\n/** ─────────────────── DatePicker ─────────────────── */\nexport interface DatePickerProps {\n value: Date\n onChange: (e: { target: { value: Date; id?: string; name?: string } }) => void\n layout?: 'horizontal' | 'vertical'\n label?: React.ReactNode\n htmlFor?: string\n name?: string\n style?: React.CSSProperties\n errorMessage?: React.ReactNode\n disableBefore?: Date | string\n disableAfter?: Date | string\n disabled?: boolean\n}\n\n/**\n * Custom calendar date picker.\n *\n * @example\n * <DatePicker.DatePicker\n * label=\"Report date\"\n * value={form.date}\n * onChange={({ target }) => setField('date', target.value)}\n * disableAfter={new Date()}\n * />\n */\nfunction DatePickerBase({\n value,\n onChange,\n layout,\n label,\n htmlFor,\n name,\n style = {},\n errorMessage,\n disableBefore,\n disableAfter,\n disabled,\n}: DatePickerProps) {\n const pickerRef = useRef<HTMLDivElement>(null)\n const calendarRef = useRef<HTMLDivElement>(null)\n const [isExpanded, setExpanded] = useState(false)\n const [isCloseToBottom, setCloseToBottom] = useState(false)\n const [currentYear, setCurrentYear] = useState(value.getFullYear())\n const [currentMonth, setCurrentMonth] = useState(value.getMonth() + 1)\n\n const toggle = () => { if (!disabled) setExpanded((p) => !p) }\n\n const toNextMonth = () => {\n if (currentMonth + 1 > 12) { setCurrentMonth(1); setCurrentYear((y) => y + 1) }\n else setCurrentMonth((m) => m + 1)\n }\n const toPrevMonth = () => {\n if (currentMonth - 1 === 0) { setCurrentMonth(12); setCurrentYear((y) => y - 1) }\n else setCurrentMonth((m) => m - 1)\n }\n\n const isToday = (d: Date) => {\n const t = new Date()\n return t.getDate() === d.getDate() && t.getMonth() === d.getMonth() && t.getFullYear() === d.getFullYear()\n }\n const isSelected = (d: Date) =>\n value.getDate() === d.getDate() && value.getMonth() === d.getMonth() && value.getFullYear() === d.getFullYear()\n\n const isDateDisabled = (d: Date) => {\n if (disableBefore && d.getTime() < new Date(disableBefore).getTime()) return true\n if (disableAfter && d.getTime() > new Date(disableAfter).getTime()) return true\n return false\n }\n\n const onDateClick = (d: Date) => {\n const next = new Date(formatDate(d))\n onChange({ target: { value: next, id: htmlFor, name } })\n setExpanded(false)\n setCurrentYear(d.getFullYear())\n setCurrentMonth(d.getMonth() + 1)\n }\n\n const renderCalendar = () => {\n const days = getMonthDays(currentYear, currentMonth)\n const firstDay = days[0].getDay()\n const cols: Date[][] = [[], [], [], [], [], [], []]\n days.forEach((d) => cols[d.getDay()].push(d))\n let ordered = [...cols]\n if (firstDay > 0) {\n ordered = [...ordered.splice(firstDay), ...ordered]\n }\n return ordered\n }\n\n useEffect(() => {\n const clickAway = (e: MouseEvent) => {\n if (\n pickerRef.current && !pickerRef.current.contains(e.target as Node) &&\n calendarRef.current && !calendarRef.current.contains(e.target as Node)\n ) setExpanded(false)\n }\n document.addEventListener('mousedown', clickAway)\n return () => document.removeEventListener('mousedown', clickAway)\n }, [])\n\n useEffect(() => {\n const bbox = pickerRef.current?.getBoundingClientRect()\n if (bbox && (bbox.y > window.innerHeight - 220 || bbox.bottom > window.innerHeight - 400)) {\n setCloseToBottom(true)\n } else setCloseToBottom(false)\n }, [])\n\n return (\n <div className=\"w-full\">\n <div className={`flex relative ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}>\n {label && (\n <label className=\"text-md font-bold ml-1 max-content text-prussian-blue dark:text-white\">\n {label}\n </label>\n )}\n <div\n style={style}\n ref={pickerRef}\n className={`flex items-center justify-between relative h-9 ${disabled ? 'bg-disabled cursor-not-allowed' : 'bg-white cursor-pointer'} rounded-lg p-2`}\n >\n <div\n onClick={toggle}\n className={`h-7 focus:outline-none text-prussian-blue ${disabled ? 'cursor-not-allowed' : 'cursor-pointer'} ${!style.width ? 'min-w-[240px]' : ''} flex items-center gap-1`}\n >\n {formatDate(value)}\n </div>\n <div\n onClick={toggle}\n className={`transition-all duration-300 ml-2 ${isExpanded ? 'rotate-180' : 'rotate-0 w-4 h-4'}`}\n >\n <ChevronDown />\n </div>\n </div>\n\n <div\n ref={calendarRef}\n className={`w-[280px] bg-ice absolute ${isCloseToBottom ? 'bottom-[40px]' : 'top-[60px]'} z-10 rounded-lg shadow-md transition-all duration-150 ${isExpanded ? 'h-max scale-100' : 'scale-0 pointer-events-none'}`}\n >\n {isExpanded && (\n <div className=\"pt-3\">\n {/* Month/year navigation */}\n <div className=\"flex items-center mx-auto w-max\">\n <span onClick={() => setCurrentYear((y) => y - 1)} className=\"cursor-pointer rotate-180 p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <DoubleChevronRight />\n </span>\n <span onClick={toPrevMonth} className=\"cursor-pointer rotate-180 p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <ChevronRight />\n </span>\n <span className=\"font-bold text-prussian-blue select-none w-[130px] text-center\">\n {currentYear} {MONTHS[currentMonth]}\n </span>\n <span onClick={toNextMonth} className=\"cursor-pointer p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <ChevronRight />\n </span>\n <span onClick={() => setCurrentYear((y) => y + 1)} className=\"cursor-pointer p-1 rounded-lg hover:bg-ice-dark transition-all duration-300\">\n <DoubleChevronRight />\n </span>\n </div>\n\n {/* Calendar grid */}\n <div className=\"flex gap-3 p-2\">\n {renderCalendar().map((weekDay, index) => (\n <div key={index} className=\"flex flex-col items-center gap-2\">\n <div className=\"text-center font-bold text-sm text-prussian-blue\">\n {weekDay[0] ? DAYS[weekDay[0].getDay()] : ''}\n </div>\n {weekDay.map((day) => (\n <div\n key={day.getDate()}\n onClick={() => !isDateDisabled(day) && onDateClick(day)}\n className={`cursor-pointer flex items-center justify-center text-prussian-blue rounded-md w-6 h-6 transition-all duration-300\n ${isToday(day) ? 'border border-prussian-blue' : ''}\n ${isSelected(day) ? 'bg-prussian-blue text-white' : ''}\n ${!isSelected(day) ? 'hover:bg-ice-dark' : ''}\n ${isDateDisabled(day) ? 'bg-ice-dark text-roman-silver cursor-not-allowed pointer-events-none' : ''}`}\n >\n {day.getDate()}\n </div>\n ))}\n </div>\n ))}\n </div>\n\n {/* Today shortcut */}\n <div className=\"pb-2 pr-2 flex items-center justify-end\">\n <Button\n onClick={() => onDateClick(new Date())}\n content=\"Today\"\n style={{ width: 'max-content', padding: '0px 5px', margin: '0' }}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n\n/** ─────────────────── TemporalPicker (year/number scroll) ─────────────────── */\nexport interface TemporalPickerProps {\n value: number\n onChange: (e: { target: { value: number } }) => void\n type?: 'year'\n upperLimit?: number\n lowerLimit?: number\n errorMessage?: React.ReactNode\n label?: React.ReactNode\n layout?: string\n style?: React.CSSProperties\n}\n\nfunction TemporalPickerBase({\n value,\n onChange,\n lowerLimit = 2000,\n upperLimit = new Date().getFullYear(),\n errorMessage,\n label,\n layout,\n style = {},\n}: TemporalPickerProps) {\n const pickerRef = useRef<HTMLDivElement>(null)\n const calendarRef = useRef<HTMLDivElement>(null)\n const valueRefs = useRef<{ value: number; ref: HTMLDivElement }[]>([])\n const [isExpanded, setExpanded] = useState(false)\n const [isCloseToBottom, setCloseToBottom] = useState(false)\n\n const innerValues = useMemo(() => {\n const vals: number[] = []\n for (let i = lowerLimit; i <= upperLimit; i++) vals.push(i)\n return vals\n }, [lowerLimit, upperLimit])\n\n useEffect(() => {\n const clickAway = (e: MouseEvent) => {\n if (\n pickerRef.current && !pickerRef.current.contains(e.target as Node) &&\n calendarRef.current && !calendarRef.current.contains(e.target as Node)\n ) setExpanded(false)\n }\n document.addEventListener('mousedown', clickAway)\n return () => document.removeEventListener('mousedown', clickAway)\n }, [])\n\n useEffect(() => {\n const bbox = pickerRef.current?.getBoundingClientRect()\n if (bbox && bbox.y > window.innerHeight - 220) setCloseToBottom(true)\n else setCloseToBottom(false)\n }, [])\n\n useEffect(() => {\n if (!isExpanded) return\n const t = setTimeout(() => {\n const node = valueRefs.current.find((n) => n.value === value)\n node?.ref.scrollIntoView({ block: 'end', inline: 'nearest', behavior: 'smooth' })\n }, 150)\n return () => clearTimeout(t)\n }, [isExpanded, value])\n\n const navigate = (delta: number) => {\n const next = value + delta\n if (next < lowerLimit || next > upperLimit) return\n onChange({ target: { value: next } })\n const node = valueRefs.current.find((n) => n.value === next)\n node?.ref.scrollIntoView({ block: 'end', inline: 'nearest', behavior: 'smooth' })\n }\n\n return (\n <div className=\"mt-2\">\n <div className={`flex relative ${layout === 'vertical' ? 'flex-col' : 'flex-row items-center gap-2'}`}>\n {label && <label className=\"text-md font-bold ml-1 max-content text-prussian-blue dark:text-white\">{label}</label>}\n <div\n style={style}\n ref={pickerRef}\n className=\"flex items-center justify-between relative h-9 bg-white rounded-lg p-2 cursor-pointer\"\n >\n <div\n onClick={() => setExpanded((p) => !p)}\n className={`h-7 ${!style.width ? 'min-w-[240px]' : ''} focus:outline-none text-prussian-blue cursor-pointer flex items-center gap-1`}\n >\n {innerValues.includes(value) ? value : 'N/A'}\n </div>\n <div onClick={() => setExpanded((p) => !p)} className={`transition-all duration-300 ml-2 ${isExpanded ? 'rotate-180' : 'rotate-0 w-4 h-4'}`}>\n <ChevronDown />\n </div>\n </div>\n\n <div\n style={{ width: style.width }}\n ref={calendarRef}\n className={`${!style.width ? 'w-[280px]' : ''} bg-ice absolute z-10 ${isCloseToBottom ? 'bottom-[40px]' : 'top-10'} rounded-lg shadow-md transition-all duration-150 right-0 overflow-hidden ${isExpanded ? 'h-max scale-100' : 'scale-0 pointer-events-none'}`}\n >\n <div onClick={() => navigate(-1)} className=\"flex items-center justify-center rotate-180 transition-all duration-300 hover:bg-ice-dark cursor-pointer rounded-br-lg rounded-bl-lg\">\n <ChevronDown />\n </div>\n <div className=\"h-8 overflow-hidden\">\n {innerValues.map((val) => (\n <div\n key={val}\n ref={(ref) => {\n if (!valueRefs.current.find((n) => n.value === val) && ref)\n valueRefs.current.push({ value: val, ref })\n }}\n className=\"font-bold text-center text-lg\"\n >\n {val}\n </div>\n ))}\n </div>\n <div onClick={() => navigate(1)} className=\"flex items-center justify-center transition-all hover:bg-ice-dark cursor-pointer rounded-br-lg rounded-bl-lg\">\n <ChevronDown />\n </div>\n </div>\n </div>\n <div className=\"text-center text-error dark:text-prussian-blue min-h-0\">{errorMessage}</div>\n </div>\n )\n}\n\n/** ─────────────────── Namespace export ─────────────────── */\n\n/**\n * Temporal date/time picker namespace.\n *\n * @example\n * import Temporal from '@geomak/ui'\n *\n * <Temporal.DatePicker value={date} onChange={handleChange} label=\"Date\" />\n * <Temporal.TemporalPicker value={year} type=\"year\" lowerLimit={2018} upperLimit={2026} onChange={handleChange} />\n */\nconst Temporal = {} as {\n DatePicker: typeof DatePickerBase\n TemporalPicker: typeof TemporalPickerBase\n}\n\nTemporal.DatePicker = DatePickerBase\nTemporal.TemporalPicker = TemporalPickerBase\n\nexport default Temporal\n"]}