@geomak/ui 1.7.5 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +204 -146
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +54 -17
- package/dist/index.d.ts +54 -17
- package/dist/index.js +204 -146
- package/dist/index.js.map +1 -1
- package/dist/styles.css +91 -129
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/icons/icons.tsx","../src/components/layout/Portal.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","useReducedMotion","Dialog2","AnimatePresence","motion","useState","useEffect","List","useRef","useMemo","React","SearchInput","Fragment","useId","vars","SwitchPrimitive2","label","Popover2","Popover3","ChevronRight","DoubleChevronRight","ChevronDown"],"mappings":"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","file":"index.js","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 React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface PortalProps {\n /** Content to render at the target node. */\n children: React.ReactNode\n /**\n * Where to mount the portal.\n * - omitted / `undefined` → `document.body` (the safe default for viewport-anchored UI)\n * - `HTMLElement` → that exact node\n * - `() => HTMLElement | null` → resolved at mount time (lets you query the DOM after layout)\n * - `null` → portal is disabled; nothing renders\n */\n target?: HTMLElement | (() => HTMLElement | null) | null\n}\n\n/**\n * SSR-safe DOM relocator. Renders `children` at a detached DOM node — by\n * default `document.body` — so that any `position: fixed` descendant resolves\n * against the real viewport, never against a transformed, filtered, or\n * contained ancestor.\n *\n * ## Why this exists\n *\n * Per the CSS spec, **any ancestor with `transform`, `filter`, `perspective`,\n * `will-change`, or `contain: layout|paint|strict` creates a new containing\n * block for `position: fixed` descendants**. The fixed element then resolves\n * its coordinates against that ancestor, not the viewport — silently breaking\n * full-screen overlays, toast viewports, mobile drawers, and loading screens\n * whenever a consumer wraps the component in:\n *\n * - a page-transition library (Framer Motion, view transitions)\n * - a modal or drawer (Storybook's centered-layout wrapper hits this too)\n * - a card with `contain: layout` or `will-change: transform`\n * - a CSS filter (`backdrop-blur`, `drop-shadow`)\n *\n * Portaling to `document.body` makes the element **immune** to any styling\n * its consumer applies to ancestor nodes. This is the same pattern Radix UI\n * uses internally for every overlay primitive (`Dialog.Portal`,\n * `Tooltip.Portal`, `Popover.Portal`, etc.).\n *\n * ## When to use it\n *\n * Wrap any element that uses `position: fixed` to anchor itself to the\n * viewport — full-screen overlays, toast viewports, drawers, loading screens,\n * command palettes, lightboxes.\n *\n * If you're already using a Radix primitive, prefer its built-in `*.Portal`\n * component (they're equivalent but lifecycle-aware for that primitive).\n *\n * ## When NOT to use it\n *\n * - For inline elements that already flow naturally with the document — Portal\n * is for **fixed/absolute escape**, not general layout.\n * - For SSR-critical content that must appear before hydration — Portal renders\n * `null` on the server and the first client render.\n * - For accessibility-critical content that depends on DOM proximity (form\n * labels, ARIA `aria-controls` targets) — escaping the tree can break focus\n * order and assistive-tech navigation.\n *\n * ## SSR / hydration\n *\n * `document.body` isn't available during SSR or the first client render.\n * `Portal` renders `null` until `useEffect` resolves the target post-mount,\n * then re-renders with the portal in place. Content that needs to appear\n * immediately on mount paints one frame later — acceptable for overlays\n * (the trigger interaction is what kicks them off anyway).\n *\n * @example Full-screen loading overlay\n * ```tsx\n * <Portal>\n * <div className=\"fixed inset-0 bg-black/40 z-overlay flex items-center justify-center\">\n * <Spinner />\n * </div>\n * </Portal>\n * ```\n *\n * @example Mount to a specific element\n * ```tsx\n * <Portal target={() => document.getElementById('app-root')}>\n * <Drawer />\n * </Portal>\n * ```\n *\n * @example Conditionally disable (render inline)\n * ```tsx\n * <Portal target={shouldPortal ? undefined : null}>\n * <Banner />\n * </Portal>\n * ```\n */\nexport default function Portal({ children, target }: PortalProps) {\n const [resolved, setResolved] = useState<HTMLElement | null>(null)\n\n useEffect(() => {\n if (target === null) {\n setResolved(null)\n return\n }\n const node =\n typeof target === 'function' ? target() :\n target ?? document.body\n setResolved(node ?? null)\n }, [target])\n\n return resolved ? createPortal(children, resolved) : null\n}\n","import { useMemo } from 'react'\n\nexport type IconButtonVariant = 'primary' | 'bordered'\n\nexport interface IconButtonProps {\n icon?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n /** Visual style. Defaults to `'primary'`. */\n type?: IconButtonVariant\n buttonType?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n size?: 'sm' | 'lg'\n loading?: boolean\n loadingIcon?: React.ReactNode\n title?: string\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 (max 90 dvh).\n */\n width?: number\n /**\n * @deprecated Use `width` instead. The second tuple value (height) was\n * never honoured and is silently ignored. Kept for backwards\n * compatibility — will be removed in a future major version.\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 width,\n size,\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 // Prefer the new `width` prop; fall back to the deprecated `size[0]`;\n // finally default to 600 px.\n const maxWidth = width ?? size?.[0] ?? 600\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,\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 — render children unconditionally so they\n stay mounted through Radix's exit animation.\n Previously `{isOpen && children}` unmounted\n children the moment isOpen flipped to false,\n losing form state mid-close. */}\n <div className={`flex-1 overflow-y-auto p-5 ${hasFooter ? '' : 'pb-5'}`}>\n {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 — render children unconditionally so they\n stay mounted through Radix's exit animation.\n Previously `{isOpen && children}` unmounted\n children the moment isOpen flipped to false,\n losing form state mid-close. */}\n <div className=\"flex-1 overflow-y-auto p-5\">\n {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 // Trigger + close button are SIBLINGS, not nested.\n // Nesting a clickable element inside <button> is invalid\n // HTML and breaks keyboard activation of the inner one.\n // The wrapper carries `group` so the close button can\n // react to the trigger's `data-state=active` for styling.\n <div\n key={tab.key}\n className=\"snap-start snap-always relative flex items-center flex-1 min-w-[120px] max-w-[220px] flex-shrink-0 group\"\n >\n <TabsPrimitive.Trigger\n value={tab.key}\n className={`w-full ${tabsClosable ? 'pr-8' : 'pr-3'} pl-3 py-2 rounded-3xl cursor-pointer transition-all duration-200 select-none h-10 text-left\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 block\">{tab.title}</span>\n </TabsPrimitive.Trigger>\n {tabsClosable && (\n <button\n type=\"button\"\n aria-label={`Close ${tab.title}`}\n onClick={(e) => {\n e.stopPropagation()\n onTabClose?.(tab.key)\n }}\n className=\"absolute right-1.5 top-1/2 -translate-y-1/2 rounded p-0.5 text-foreground-secondary group-data-[state=active]:text-accent-foreground hover:bg-black/10 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\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 {/* The Trigger handles BOTH expand/collapse (via Radix) and\n onNodeClick — clicking anywhere on the parent row fires\n both, consistently. Previously only the label fired\n onNodeClick while the chevron only toggled — asymmetric\n behaviour that confused consumers. */}\n <Accordion.Trigger\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 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 >\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 aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n <span className=\"text-sm font-semibold text-foreground select-none\">\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'\nimport Portal from '../layout/Portal'\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\n// The Viewport is rendered into a React portal at `document.body`, so these\n// `fixed` positions are guaranteed to resolve against the real viewport — never\n// against a transformed/filtered ancestor (the standard CSS containing-block\n// gotcha: any ancestor with `transform`, `filter`, `perspective`, or `contain`\n// creates a new containing block for fixed descendants, silently breaking layout).\nconst VIEWPORT_CLASSES: Record<NotificationPosition, string> = {\n 'top-right': 'fixed top-4 right-4 flex flex-col items-end',\n 'top-left': 'fixed top-4 left-4 flex flex-col items-start',\n 'top-center': 'fixed top-4 left-1/2 flex flex-col items-center -translate-x-1/2',\n 'bottom-right': 'fixed bottom-4 right-4 flex flex-col-reverse items-end',\n 'bottom-left': 'fixed bottom-4 left-4 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.\n// Uses y + scale only — no x translation — so the card always stays within\n// the viewport boundary and the animation is fully visible.\n// y is large enough (±24px) to be perceptible, and opacity completes faster\n// than the position tween so the card is already opaque while it still has\n// meaningful distance left to travel — making the movement clearly visible.\nfunction getInitialMotion(pos: NotificationPosition, reduced: boolean | null) {\n if (reduced) return { opacity: 0, y: 0, scale: 1 }\n const bottom = pos.startsWith('bottom')\n return {\n opacity: 0,\n y: bottom ? 24 : -24, // rise from below (bottom) or drop from above (top)\n scale: 0.92,\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 // pointer-events-auto re-enables clicks on the toast card itself;\n // the parent viewport is pointer-events-none so empty space doesn't\n // block interaction with the page underneath.\n className=\"pointer-events-auto\"\n initial={initial}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: pos.startsWith('bottom') ? 16 : -16, scale: 0.94,\n transition: reduced\n ? { duration: 0 }\n : {\n opacity: { duration: 0.14, delay: 0.06 },\n y: { type: 'tween', duration: 0.22, ease: [0.4, 0, 1, 1] },\n scale: { type: 'tween', duration: 0.22, ease: [0.4, 0, 1, 1] },\n },\n }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n // Opacity finishes in 0.15 s — card is fully opaque while y/scale\n // still have ~55 % of their travel left → movement is clearly visible.\n opacity: { duration: 0.15 },\n y: { type: 'tween', duration: 0.34, ease: [0.16, 1, 0.3, 1] },\n scale: { type: 'tween', duration: 0.34, ease: [0.16, 1, 0.3, 1] },\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 {/* Portaled into <body> so `position: fixed` resolves against\n the real viewport — see Portal.tsx for the why. */}\n <Portal>\n <Toast.Viewport\n asChild\n className={[\n VIEWPORT_CLASSES[position],\n 'z-[500000] gap-2 w-[332px] outline-none pointer-events-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 </Portal>\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 from 'react'\nimport { motion, useReducedMotion, type Variants } from 'framer-motion'\nimport Portal from '../layout/Portal'\n\nexport interface LoadingSpinnerProps {\n /** Text revealed letter-by-letter beneath the spinner. */\n prompt: string\n /**\n * Optional override for the spinner ring colour. Accepts any CSS colour.\n * Defaults to the accent token so it picks up theme overrides.\n */\n spinnerColor?: string\n /**\n * Optional override for the prompt text colour.\n * Defaults to the foreground token (light/dark aware).\n */\n textColor?: string\n /**\n * Backdrop opacity (0 – 1). Defaults to 0.92 — close enough to opaque to\n * block UI underneath while still hinting at the previous state.\n */\n backdropOpacity?: number\n}\n\n// Framer variants drive the staggered letter reveal — no refs, no setTimeout,\n// no classList mutation, no DOM access at all. The container schedules each\n// child to start 60 ms after the previous one; each child fades + lifts in\n// over 250 ms. With `useReducedMotion` the container falls back to an instant\n// reveal so the prompt is still visible.\nconst containerVariants: Variants = {\n hidden: {},\n visible: { transition: { staggerChildren: 0.06 } },\n}\n\nconst letterVariants: Variants = {\n hidden: { opacity: 0, y: 6 },\n visible: { opacity: 1, y: 0, transition: { duration: 0.25, ease: 'easeOut' } },\n}\n\n/**\n * Full-screen loading overlay with a spinning ring and a staggered text\n * reveal. Portaled into `document.body` so it always covers the actual\n * viewport regardless of where it's rendered in the React tree.\n *\n * Honours `prefers-reduced-motion`: the spinner still rotates (continuous\n * spin is informative, not decorative) but the letter stagger collapses to\n * an instant reveal.\n *\n * @example\n * {isLoading && <LoadingSpinner prompt=\"Loading vessels…\" />}\n *\n * @example\n * <LoadingSpinner\n * prompt=\"Saving\"\n * spinnerColor=\"#10b981\"\n * backdropOpacity={0.7}\n * />\n */\nexport default function LoadingSpinner({\n prompt,\n spinnerColor,\n textColor,\n backdropOpacity = 0.92,\n}: LoadingSpinnerProps) {\n const reduced = useReducedMotion()\n const letters = Array.from(prompt)\n\n return (\n <Portal>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label={prompt}\n className=\"fixed inset-0 z-[8000000] flex flex-col items-center justify-center gap-6 bg-background\"\n style={{ opacity: backdropOpacity }}\n >\n {/* Spinning ring — Tailwind `animate-spin` is a built-in\n `animation: spin 1s linear infinite`. The ring is two\n transparent edges + two coloured edges so it reads as\n a rotating arc. `currentColor` lets `spinnerColor`\n drive the ring via `style.color`. */}\n <div\n className=\"w-20 h-20 rounded-2xl border-[6px] border-transparent border-t-current border-r-current animate-spin\"\n style={{ color: spinnerColor ?? 'var(--color-accent)' }}\n aria-hidden=\"true\"\n />\n\n {/* Letter-by-letter reveal */}\n <motion.div\n className=\"text-3xl font-bold tracking-tight select-none\"\n style={{ color: textColor ?? 'var(--color-foreground)' }}\n variants={containerVariants}\n initial={reduced ? 'visible' : 'hidden'}\n animate=\"visible\"\n >\n {letters.map((letter, index) => (\n <motion.span\n key={index}\n // Preserve whitespace runs (spaces in prompts) so\n // the layout doesn't collapse multi-word prompts.\n className=\"inline-block whitespace-pre\"\n variants={letterVariants}\n >\n {letter}\n </motion.span>\n ))}\n </motion.div>\n </div>\n </Portal>\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}\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 // tabIndex + Enter/Space onKeyDown makes each option\n // keyboard-activatable. Previously the items were only mouse-\n // clickable — keyboard-only users couldn't select anything.\n <div\n key={item.key}\n role=\"option\"\n aria-selected={activeKey === item.key}\n tabIndex={0}\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 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent ${\n activeKey === item.key ? 'bg-ice-dark dark:bg-independence' : ''\n }`}\n onClick={() => onItemClick(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onItemClick(item)\n }\n }}\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) => {\n // Space and Enter are both canonical activation keys for\n // role=\"button\". preventDefault stops Space from scrolling\n // the page when the button is focused.\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.()\n }\n }}\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?: string\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 /** Label/input orientation. Defaults to `'vertical'`. */\n layout?: 'horizontal' | 'vertical'\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=\"search\"` gives consumers the native clear button\n // and an Enter-friendly virtual keyboard hint on mobile.\n type=\"search\"\n enterKeyHint=\"search\"\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","import type { ReactNode } from 'react'\n\nexport interface DropdownPillProps {\n value?: 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, useId, 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\n/**\n * Item key type — DOM-friendly subset of `React.Key` (no bigint, since UI\n * keys are always strings or numbers in practice).\n */\nexport type DropdownKey = string | number\n\n/**\n * Selected value(s). In single-select mode this is a single key matching\n * one of the items. In multi-select mode it is an array of keys.\n */\nexport type DropdownValue = DropdownKey | DropdownKey[]\n\nexport interface DropdownProps {\n isMultiselect?: boolean\n hasSearch?: boolean\n label?: React.ReactNode\n name?: string\n value?: DropdownValue\n onChange?: (e: { target: { value: DropdownValue; id?: string; name?: string } }) => void\n onBlur?: React.FocusEventHandler\n disabled?: boolean\n /** Label/input orientation. Defaults to `'vertical'`. */\n layout?: 'horizontal' | 'vertical'\n errorMessage?: React.ReactNode\n style?: React.CSSProperties\n htmlFor?: string\n items?: DropdownItem[]\n labelStyle?: React.CSSProperties\n placeholder?: string\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 // Stable id for the error region so the combobox can point at it via\n // aria-describedby when validation fails.\n const errorId = useId()\n const hasError = errorMessage != null\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 aria-invalid={hasError || undefined}\n aria-describedby={hasError ? errorId : undefined}\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) => {\n if (disabled) return\n // Open on Enter, Space, ArrowDown, ArrowUp — the\n // canonical combobox activation keys per WAI-ARIA.\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n setOpen(true)\n }\n }}\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) => (\n // aria-rowindex was previously set here but\n // it's invalid ARIA on role=\"option\" (it\n // belongs on rows of a grid/treegrid). Dropped.\n // tabIndex={0} + Enter/Space handler makes the\n // option keyboard-activatable; the full\n // combobox roving-tabindex pattern is deferred\n // until the planned Phase-5 rewrite.\n <div\n key={item.key}\n role=\"option\"\n aria-selected={isSelected(item.key)}\n tabIndex={0}\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 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent ${\n selectedItems.includes(item.key) ? 'bg-ice-dark' : ''\n }`}\n onClick={() => selectItem(item.key)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n selectItem(item.key)\n }\n }}\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 {hasError && (\n <div id={errorId} className=\"text-center text-error dark:text-prussian-blue min-h-0\">\n {errorMessage}\n </div>\n )}\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 ─────────────────── */\n\n/**\n * Column descriptor for the Table.\n *\n * The generic `T` is the shape of a row — `keyBind` must be one of T's\n * string-keyed properties, and `component(cellValue, row)` receives the\n * matching value with full type inference. When used without a generic\n * (`TableColumn[]`), `T` falls back to `Record<string, any>` for backwards\n * compatibility — narrower typing is preferred whenever possible:\n *\n * ```ts\n * type Vessel = { id: number; name: string; status: 'At Sea' | 'In Port' }\n * const cols: TableColumn<Vessel>[] = [\n * { key: 'name', label: 'Name', keyBind: 'name' }, // cellValue inferred as string\n * ]\n * ```\n */\nexport interface TableColumn<T extends Record<string, any> = Record<string, any>> {\n /** React reconciliation key for the column itself. */\n key: React.Key\n label: React.ReactNode\n /** Property on the row to read for this column. */\n keyBind: keyof T & string\n /** Custom cell renderer. Receives the cell value and the full row. */\n component?: (cellValue: T[keyof T], row: T) => React.ReactNode\n /** Explicit column width (CSS length or px number). Optional — defaults to auto. */\n width?: string | number\n /** Text alignment for both header and cells. Defaults to `'center'`. */\n align?: 'left' | 'center' | 'right'\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<T extends Record<string, any> = Record<string, any>> {\n enabled?: boolean\n expandIcon?: React.ReactNode\n expandComponent?: (row: T) => React.ReactNode\n}\n\nexport interface TableProps<T extends Record<string, any> = Record<string, any>> {\n columns?: TableColumn<T>[]\n rows?: T[]\n /**\n * Returns a stable key for each row, used for React reconciliation AND\n * for tracking expanded state when `expandRow.enabled` is true.\n * Defaults to the row index — fine for static lists, but pass an\n * explicit getter (e.g. `(row) => row.id`) if rows can be reordered or\n * filtered while expand state should persist.\n */\n getRowKey?: (row: T, index: number) => React.Key\n pagination?: PaginationOptions\n expandRow?: ExpandRowOptions<T>\n hasSearch?: boolean\n footer?: React.ReactNode\n header?: React.ReactNode\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}\n\n/** ─────────────────── helpers ─────────────────── */\n\nfunction createDatasets<T>(rows: T[], perPage: number | null): T[][] {\n if (!perPage) return [rows.slice()]\n const all: T[][] = []\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/**\n * Default row-key strategy — index-based. Stable across renders for static\n * lists; pass an explicit `getRowKey` for any list that mutates.\n */\nconst defaultGetRowKey = (_row: unknown, index: number): React.Key => index\n\nconst cellAlign = (align: TableColumn['align']) =>\n align === 'left' ? 'text-left' : align === 'right' ? 'text-right' : 'text-center'\n\n/** ─────────────────── sub-components ─────────────────── */\n\nfunction TableHeader<T extends Record<string, any>>({\n columns,\n hasExpand,\n}: {\n columns: TableColumn<T>[]\n hasExpand: boolean\n}) {\n return (\n <thead className=\"bg-surface-raised border-b border-border\">\n <tr>\n {hasExpand && <th aria-hidden=\"true\" className=\"w-9\" />}\n {columns.map((col) => (\n <th\n key={col.key}\n scope=\"col\"\n className={`${cellAlign(col.align)} text-sm font-semibold text-foreground py-3 px-3`}\n style={col.width != null ? { width: col.width } : undefined}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n )\n}\n\nconst DefaultExpandIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-5 h-5 text-foreground-muted\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n 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\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\nfunction TableBody<T extends Record<string, any>>({\n columns,\n rows,\n expandRow,\n getRowKey,\n}: {\n columns: TableColumn<T>[]\n rows: T[]\n expandRow: ExpandRowOptions<T>\n getRowKey: (row: T, index: number) => React.Key\n}) {\n // Expand state is keyed by the row's stable key — survives reorder/filter\n // as long as `getRowKey` returns the same value for the same row.\n const [expanded, setExpanded] = useState<Set<React.Key>>(() => new Set())\n\n const toggleRow = (rowKey: React.Key) => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(rowKey)) next.delete(rowKey)\n else next.add(rowKey)\n return next\n })\n }\n\n const hasExpand = !!expandRow.enabled\n const expandColCount = columns.length + (hasExpand ? 1 : 0)\n\n return (\n <tbody>\n {rows.map((row, i) => {\n const rowKey = getRowKey(row, i)\n const isExpanded = expanded.has(rowKey)\n return (\n <React.Fragment key={rowKey}>\n <tr\n className={`border-b border-border hover:bg-surface-raised transition-colors duration-150 ${\n i % 2 === 0 ? 'bg-surface' : 'bg-surface-raised'\n }`}\n >\n {hasExpand && (\n <td className=\"p-0 align-middle w-9\">\n <button\n type=\"button\"\n onClick={() => toggleRow(rowKey)}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n className={`w-9 h-9 inline-flex items-center justify-center rounded-md hover:bg-surface/80 transition-transform duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent ${\n isExpanded ? 'rotate-180' : ''\n }`}\n >\n {expandRow.expandIcon ?? DefaultExpandIcon}\n </button>\n </td>\n )}\n {columns.map((col) => (\n <td\n key={col.key}\n className={`${cellAlign(col.align)} text-sm text-foreground py-2 px-3 align-middle`}\n >\n {col.component\n ? col.component(row[col.keyBind] as T[keyof T], row)\n : (row[col.keyBind] as React.ReactNode)}\n </td>\n ))}\n </tr>\n\n {hasExpand && isExpanded && (\n <tr className=\"bg-surface\">\n <td colSpan={expandColCount} className=\"p-0 border-b border-border\">\n <div className=\"p-3\">{expandRow.expandComponent?.(row)}</div>\n </td>\n </tr>\n )}\n </React.Fragment>\n )\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 = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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 = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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 return (\n <div className=\"flex gap-2 items-center justify-end pt-2\">\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{doubleChevronRight}</span>,\n activePage === 0,\n () => onPageChange(0)\n )}\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{chevronRight}</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,\n activePage === maxPage,\n () => activePage < maxPage && onPageChange(activePage + 1)\n )}\n {navBtn(\n doubleChevronRight,\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 // Pagination is single-select; ignore array values that\n // could come through from a multi-select Dropdown.\n if (Array.isArray(value)) return\n const numKey = typeof value === 'number' ? value : Number(value)\n if (!serverSide) setPerPageKey(numKey)\n const opt = picker.find((o) => o.key === numKey)\n onPerPageChange(opt?.label ?? opt?.value ?? numKey)\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 * - **Typed rows**: pass a generic `T` for full type inference on columns\n * and cell renderers (`<Table<Vessel> ... />`).\n * - **Real `<table>` semantics**: keeps row / col / cell context intact for\n * screen readers and lets the browser handle column sizing natively.\n * Per-column widths via `column.width`.\n * - **Search**: client-side filter across ALL row values; result is\n * memoized so each keystroke costs O(n) once per term change, not per\n * render. Set `pagination.serverSide` to skip client-side filter and\n * pagination entirely.\n * - **Expand**: each row gets a real `<button>` with `aria-expanded`.\n * Expand state is keyed by `getRowKey(row, i)` so it survives reorders.\n *\n * @example Static, fully typed\n * ```tsx\n * type Vessel = { id: number; name: string; status: string }\n * <Table<Vessel>\n * columns={[\n * { key: 'name', label: 'Name', keyBind: 'name' },\n * { key: 'status', label: 'Status', keyBind: 'status', width: 120 },\n * ]}\n * rows={vessels}\n * getRowKey={(row) => row.id}\n * />\n * ```\n *\n * @example Server-side pagination\n * ```tsx\n * <Table\n * columns={cols}\n * rows={pageRows}\n * pagination={{\n * enabled: true, serverSide: true, perPage: 20,\n * page: currentPage, totalCount, onPageChange, onPerPageChange,\n * }}\n * />\n * ```\n */\nexport default function Table<T extends Record<string, any> = Record<string, any>>({\n columns = [],\n rows = [],\n getRowKey = defaultGetRowKey,\n pagination = DEFAULT_PAGINATION,\n expandRow = DEFAULT_EXPAND as ExpandRowOptions<T>,\n hasSearch = true,\n footer = null,\n header = null,\n}: TableProps<T>) {\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\n const isServerSide = !!(pagination.enabled && pagination.serverSide)\n\n // Filter is derived state — memoized so each keystroke only runs the\n // O(n × columns) scan once per `searchTerm` change, not on every render.\n // Server-side mode short-circuits: the consumer's API is the filter.\n const filteredRows = useMemo(() => {\n if (isServerSide || !searchTerm) return rows\n const term = searchTerm.toLowerCase()\n return rows.filter((row) =>\n Object.values(row).some(\n (v) => v != null && String(v).toLowerCase().includes(term)\n )\n )\n }, [rows, searchTerm, isServerSide])\n\n // Pagination buckets — also derived. Re-bucketed whenever the filtered\n // set OR page size changes.\n const datasets = useMemo(() => {\n if (isServerSide) return [rows]\n return createDatasets(filteredRows, pagination.enabled ? perPage : null)\n }, [filteredRows, perPage, pagination.enabled, isServerSide, rows])\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[activePage] ?? []\n }, [isServerSide, rows, datasets, activePage])\n\n // Sync per-page state with pagination prop when not server-side\n useEffect(() => {\n if (pagination.enabled && !isServerSide && typeof pagination.perPage === 'number') {\n setPerPage(pagination.perPage)\n }\n }, [pagination.enabled, pagination.perPage, isServerSide])\n\n // Server-side: mirror the per-page from props\n useEffect(() => {\n if (isServerSide && typeof pagination.perPage === 'number') setPerPage(pagination.perPage)\n }, [isServerSide, pagination.perPage])\n\n // Server-side: mirror the 1-based page from props\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 setSearchTerm(e.target.value)\n // Reset to the first page so the user sees the top of the filtered set.\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 without forcing the table itself to layout horizontally. */}\n <div className=\"overflow-x-auto rounded-lg\">\n <table className=\"w-full border-collapse\">\n <TableHeader columns={columns} hasExpand={!!expandRow.enabled} />\n <TableBody\n columns={columns}\n rows={currentPageRows}\n expandRow={expandRow}\n getRowKey={getRowKey}\n />\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'\nimport Portal from '../layout/Portal'\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 — portaled to <body> so the fixed\n backdrop and drawer always cover the real viewport, never\n a transformed/contained ancestor (page-transition libs,\n CSS `contain`, parent `will-change`, etc.). */}\n {hasSidebar && isMobile && (\n <Portal>\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 </Portal>\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\n// ── XSS-safe CSS-value sanitiser ─────────────────────────────────────────────\n// The dark-theme CSS vars are serialised into a `<style>` block via\n// `dangerouslySetInnerHTML`. If a consumer-supplied value contained `</style>`,\n// `;`, or `}`, it would close the style block early and let arbitrary HTML\n// (including `<script>`) execute. We allow normal CSS value characters\n// (letters, digits, punctuation needed for `rgb()`, `oklch()`, multi-word\n// font-family lists, etc.) but reject the characters that can break CSS\n// escaping — including comment delimiters and the backslash hex-escape.\n//\n// React inline `style={…}` values do NOT need this check: React applies them\n// as DOM `.style.<prop> = value`, where a malicious value can only affect\n// that single property and cannot break out into siblings.\nconst CSS_VALUE_REJECT_RE = /[;{}<>\\\\]|\\*\\/|\\/\\*/\n\nfunction isSafeCssValue(v: unknown): v is string {\n if (typeof v !== 'string') return false\n if (v.length > 500) return false // unreasonable values are suspicious\n return !CSS_VALUE_REJECT_RE.test(v)\n}\n\nfunction varsToStyleString(vars: Record<string, string>): string {\n const out: string[] = []\n for (const [k, v] of Object.entries(vars)) {\n if (!isSafeCssValue(v)) {\n // Warn unconditionally — these values are a security risk; the\n // consumer needs to fix them in both dev and prod. (We don't\n // gate on `process.env.NODE_ENV` because that's not always\n // defined in browser bundles.)\n console.warn(\n `[ThemeProvider] Dropping unsafe value for \"${k}\". ` +\n `Theme values may contain letters, digits, and CSS punctuation ` +\n `but must not include: ; { } < > \\\\ /* */`,\n )\n continue\n }\n out.push(`${k}: ${v};`)\n }\n return out.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, { useId } from 'react'\n\nexport interface TextInputProps {\n value?: string\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 /** Label/input orientation. Defaults to `'horizontal'`. */\n layout?: 'horizontal' | 'vertical'\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n id?: string\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 // `useId` gives us a stable, SSR-safe id for the error region so that\n // `aria-describedby` on the input can point at it. The id only matters\n // when an error is actually being announced.\n const errorId = useId()\n const hasError = errorMessage != null\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 // Render <label> only when a label is provided. An empty\n // <label htmlFor=…> announces as an unlabeled control in\n // some screen readers.\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 )}\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 aria-invalid={hasError || undefined}\n aria-describedby={hasError ? errorId : undefined}\n className={`${hasError ? '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 {/* Error region is keyed to the input via aria-describedby. Only\n rendered when there is an actual error so screen readers don't\n read empty descriptions. */}\n {hasError && (\n <div id={errorId} className=\"text-center text-error dark:text-prussian-blue min-h-0\">\n {errorMessage}\n </div>\n )}\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, { useId, useState } from 'react'\nimport COLORS from '../../utils/colors'\n\nexport interface PasswordProps {\n value?: string\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 /** Label/input orientation. Defaults to `'horizontal'`. */\n layout?: 'horizontal' | 'vertical'\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n iconColor?: string\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 // Stable, SSR-safe id for the error region — `aria-describedby` on the\n // input points here so screen readers announce the validation message.\n const errorId = useId()\n const hasError = errorMessage != null\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 // Render <label> only when a label is provided. An empty\n // <label htmlFor=…> announces as an unlabeled control in\n // some screen readers.\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 )}\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 aria-invalid={hasError || undefined}\n aria-describedby={hasError ? errorId : undefined}\n className={`${hasError ? '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 {/* Error region keyed to the input via aria-describedby. */}\n {hasError && (\n <div id={errorId} className=\"text-center text-error dark:text-prussian-blue min-h-0\">\n {errorMessage}\n </div>\n )}\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}\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 /** Label/input orientation. Defaults to `'vertical'`. */\n layout?: 'horizontal' | 'vertical'\n items?: AutoCompleteItem[]\n onItemClick?: (value: string) => void\n /** Custom \"empty\" message */\n emptyText?: string\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 // tabIndex + Enter/Space onKeyDown\n // makes each option keyboard-activatable.\n // Full roving-tabindex / arrow-key nav\n // is deferred to the Phase-5 rewrite.\n <div\n key={item.key}\n role=\"option\"\n tabIndex={0}\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 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n onClick={() => handleSelect(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSelect(item)\n }\n }}\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}\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 // Native .click() is the idiomatic call — synthesising a MouseEvent\n // works but is noisy in test environments (jsdom) and unnecessary.\n fileInput.current?.click()\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 // Dropzone is keyboard-activatable: role=\"button\", focusable via\n // tabIndex, and Space/Enter trigger the file picker. Without these\n // a keyboard-only user could not upload a file.\n <div\n role=\"button\"\n tabIndex={0}\n aria-label=\"Upload file — click or drop\"\n onClick={openPicker}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openPicker()\n }\n }}\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 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\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/layout/Portal.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","useReducedMotion","Dialog2","AnimatePresence","motion","useState","useEffect","Fragment","List","useRef","useMemo","React","SearchInput","useId","vars","SwitchPrimitive2","label","Popover2","Popover3","ChevronRight","DoubleChevronRight","ChevronDown"],"mappings":"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","file":"index.js","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 React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface PortalProps {\n /** Content to render at the target node. */\n children: React.ReactNode\n /**\n * Where to mount the portal.\n * - omitted / `undefined` → `document.body` (the safe default for viewport-anchored UI)\n * - `HTMLElement` → that exact node\n * - `() => HTMLElement | null` → resolved at mount time (lets you query the DOM after layout)\n * - `null` → portal is disabled; nothing renders\n */\n target?: HTMLElement | (() => HTMLElement | null) | null\n}\n\n/**\n * SSR-safe DOM relocator. Renders `children` at a detached DOM node — by\n * default `document.body` — so that any `position: fixed` descendant resolves\n * against the real viewport, never against a transformed, filtered, or\n * contained ancestor.\n *\n * ## Why this exists\n *\n * Per the CSS spec, **any ancestor with `transform`, `filter`, `perspective`,\n * `will-change`, or `contain: layout|paint|strict` creates a new containing\n * block for `position: fixed` descendants**. The fixed element then resolves\n * its coordinates against that ancestor, not the viewport — silently breaking\n * full-screen overlays, toast viewports, mobile drawers, and loading screens\n * whenever a consumer wraps the component in:\n *\n * - a page-transition library (Framer Motion, view transitions)\n * - a modal or drawer (Storybook's centered-layout wrapper hits this too)\n * - a card with `contain: layout` or `will-change: transform`\n * - a CSS filter (`backdrop-blur`, `drop-shadow`)\n *\n * Portaling to `document.body` makes the element **immune** to any styling\n * its consumer applies to ancestor nodes. This is the same pattern Radix UI\n * uses internally for every overlay primitive (`Dialog.Portal`,\n * `Tooltip.Portal`, `Popover.Portal`, etc.).\n *\n * ## When to use it\n *\n * Wrap any element that uses `position: fixed` to anchor itself to the\n * viewport — full-screen overlays, toast viewports, drawers, loading screens,\n * command palettes, lightboxes.\n *\n * If you're already using a Radix primitive, prefer its built-in `*.Portal`\n * component (they're equivalent but lifecycle-aware for that primitive).\n *\n * ## When NOT to use it\n *\n * - For inline elements that already flow naturally with the document — Portal\n * is for **fixed/absolute escape**, not general layout.\n * - For SSR-critical content that must appear before hydration — Portal renders\n * `null` on the server and the first client render.\n * - For accessibility-critical content that depends on DOM proximity (form\n * labels, ARIA `aria-controls` targets) — escaping the tree can break focus\n * order and assistive-tech navigation.\n *\n * ## SSR / hydration\n *\n * `document.body` isn't available during SSR or the first client render.\n * `Portal` renders `null` until `useEffect` resolves the target post-mount,\n * then re-renders with the portal in place. Content that needs to appear\n * immediately on mount paints one frame later — acceptable for overlays\n * (the trigger interaction is what kicks them off anyway).\n *\n * @example Full-screen loading overlay\n * ```tsx\n * <Portal>\n * <div className=\"fixed inset-0 bg-black/40 z-overlay flex items-center justify-center\">\n * <Spinner />\n * </div>\n * </Portal>\n * ```\n *\n * @example Mount to a specific element\n * ```tsx\n * <Portal target={() => document.getElementById('app-root')}>\n * <Drawer />\n * </Portal>\n * ```\n *\n * @example Conditionally disable (render inline)\n * ```tsx\n * <Portal target={shouldPortal ? undefined : null}>\n * <Banner />\n * </Portal>\n * ```\n */\nexport default function Portal({ children, target }: PortalProps) {\n const [resolved, setResolved] = useState<HTMLElement | null>(null)\n\n useEffect(() => {\n if (target === null) {\n setResolved(null)\n return\n }\n const node =\n typeof target === 'function' ? target() :\n target ?? document.body\n setResolved(node ?? null)\n }, [target])\n\n return resolved ? createPortal(children, resolved) : null\n}\n","import { useMemo } from 'react'\n\nexport type IconButtonVariant = 'primary' | 'bordered'\n\nexport interface IconButtonProps {\n icon?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n /** Visual style. Defaults to `'primary'`. */\n type?: IconButtonVariant\n buttonType?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n size?: 'sm' | 'lg'\n loading?: boolean\n loadingIcon?: React.ReactNode\n title?: string\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 // Single semantic palette handles both light and dark modes via\n // CSS vars on the consumer's ThemeProvider — no `dark:` variants\n // needed.\n return 'bg-accent text-accent-fg hover:bg-accent-hover'\n }\n if (type === 'bordered') {\n return 'bg-surface text-foreground hover:bg-surface-raised border border-border-strong'\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-md transition-colors duration-150 ${colorScheme} disabled:bg-surface-raised disabled:text-foreground-muted disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-accent`}\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-accent-fg',\n 'hover:bg-accent-hover',\n 'active:bg-accent',\n 'disabled:bg-foreground-muted disabled:text-accent-fg/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-accent-fg',\n 'active:bg-accent-hover active:text-accent-fg',\n 'disabled:border-foreground-muted disabled:text-foreground-muted disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2',\n ].join(' '),\n\n ghost: [\n // Semantic tokens handle both light and dark modes — no `dark:`\n // variants needed.\n 'bg-transparent text-foreground-secondary',\n 'hover:bg-surface-raised hover:text-foreground',\n 'active:bg-surface',\n 'disabled:text-foreground-muted 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-accent-fg',\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 (max 90 dvh).\n */\n width?: number\n /**\n * @deprecated Use `width` instead. The second tuple value (height) was\n * never honoured and is silently ignored. Kept for backwards\n * compatibility — will be removed in a future major version.\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 width,\n size,\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 // Prefer the new `width` prop; fall back to the deprecated `size[0]`;\n // finally default to 600 px.\n const maxWidth = width ?? size?.[0] ?? 600\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,\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 — render children unconditionally so they\n stay mounted through Radix's exit animation.\n Previously `{isOpen && children}` unmounted\n children the moment isOpen flipped to false,\n losing form state mid-close. */}\n <div className={`flex-1 overflow-y-auto p-5 ${hasFooter ? '' : 'pb-5'}`}>\n {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 — render children unconditionally so they\n stay mounted through Radix's exit animation.\n Previously `{isOpen && children}` unmounted\n children the moment isOpen flipped to false,\n losing form state mid-close. */}\n <div className=\"flex-1 overflow-y-auto p-5\">\n {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 // Trigger + close button are SIBLINGS, not nested.\n // Nesting a clickable element inside <button> is invalid\n // HTML and breaks keyboard activation of the inner one.\n // The wrapper carries `group` so the close button can\n // react to the trigger's `data-state=active` for styling.\n <div\n key={tab.key}\n className=\"snap-start snap-always relative flex items-center flex-1 min-w-[120px] max-w-[220px] flex-shrink-0 group\"\n >\n <TabsPrimitive.Trigger\n value={tab.key}\n className={`w-full ${tabsClosable ? 'pr-8' : 'pr-3'} pl-3 py-2 rounded-3xl cursor-pointer transition-all duration-200 select-none h-10 text-left\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 block\">{tab.title}</span>\n </TabsPrimitive.Trigger>\n {tabsClosable && (\n <button\n type=\"button\"\n aria-label={`Close ${tab.title}`}\n onClick={(e) => {\n e.stopPropagation()\n onTabClose?.(tab.key)\n }}\n className=\"absolute right-1.5 top-1/2 -translate-y-1/2 rounded p-0.5 text-foreground-secondary group-data-[state=active]:text-accent-foreground hover:bg-black/10 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\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 {/* The Trigger handles BOTH expand/collapse (via Radix) and\n onNodeClick — clicking anywhere on the parent row fires\n both, consistently. Previously only the label fired\n onNodeClick while the chevron only toggled — asymmetric\n behaviour that confused consumers. */}\n <Accordion.Trigger\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 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 >\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 aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n <span className=\"text-sm font-semibold text-foreground select-none\">\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 // Semantic tokens handle both light and dark modes via\n // CSS vars — no `dark:` variants needed.\n index === 0 && 'rounded-l-lg border-r border-border',\n index === items.length - 1 && 'rounded-r-lg border-l border-border',\n 'p-2 cursor-pointer transition-colors duration-150 text-foreground-secondary',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-accent',\n 'bg-surface hover:bg-surface-raised',\n 'data-[state=on]:bg-accent data-[state=on]:text-accent-fg',\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'\nimport Portal from '../layout/Portal'\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\n// The Viewport is rendered into a React portal at `document.body`, so these\n// `fixed` positions are guaranteed to resolve against the real viewport — never\n// against a transformed/filtered ancestor (the standard CSS containing-block\n// gotcha: any ancestor with `transform`, `filter`, `perspective`, or `contain`\n// creates a new containing block for fixed descendants, silently breaking layout).\nconst VIEWPORT_CLASSES: Record<NotificationPosition, string> = {\n 'top-right': 'fixed top-4 right-4 flex flex-col items-end',\n 'top-left': 'fixed top-4 left-4 flex flex-col items-start',\n 'top-center': 'fixed top-4 left-1/2 flex flex-col items-center -translate-x-1/2',\n 'bottom-right': 'fixed bottom-4 right-4 flex flex-col-reverse items-end',\n 'bottom-left': 'fixed bottom-4 left-4 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.\n// Uses y + scale only — no x translation — so the card always stays within\n// the viewport boundary and the animation is fully visible.\n// y is large enough (±24px) to be perceptible, and opacity completes faster\n// than the position tween so the card is already opaque while it still has\n// meaningful distance left to travel — making the movement clearly visible.\nfunction getInitialMotion(pos: NotificationPosition, reduced: boolean | null) {\n if (reduced) return { opacity: 0, y: 0, scale: 1 }\n const bottom = pos.startsWith('bottom')\n return {\n opacity: 0,\n y: bottom ? 24 : -24, // rise from below (bottom) or drop from above (top)\n scale: 0.92,\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 // pointer-events-auto re-enables clicks on the toast card itself;\n // the parent viewport is pointer-events-none so empty space doesn't\n // block interaction with the page underneath.\n className=\"pointer-events-auto\"\n initial={initial}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: pos.startsWith('bottom') ? 16 : -16, scale: 0.94,\n transition: reduced\n ? { duration: 0 }\n : {\n opacity: { duration: 0.14, delay: 0.06 },\n y: { type: 'tween', duration: 0.22, ease: [0.4, 0, 1, 1] },\n scale: { type: 'tween', duration: 0.22, ease: [0.4, 0, 1, 1] },\n },\n }}\n transition={\n reduced\n ? { duration: 0 }\n : {\n // Opacity finishes in 0.15 s — card is fully opaque while y/scale\n // still have ~55 % of their travel left → movement is clearly visible.\n opacity: { duration: 0.15 },\n y: { type: 'tween', duration: 0.34, ease: [0.16, 1, 0.3, 1] },\n scale: { type: 'tween', duration: 0.34, ease: [0.16, 1, 0.3, 1] },\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 {/* Portaled into <body> so `position: fixed` resolves against\n the real viewport — see Portal.tsx for the why. */}\n <Portal>\n <Toast.Viewport\n asChild\n className={[\n VIEWPORT_CLASSES[position],\n 'z-[500000] gap-2 w-[332px] outline-none pointer-events-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 </Portal>\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 from 'react'\nimport { motion, useReducedMotion, type Variants } from 'framer-motion'\nimport Portal from '../layout/Portal'\n\nexport type LoadingSpinnerSize = 'sm' | 'md' | 'lg'\n\nexport interface LoadingSpinnerProps {\n /**\n * Text revealed letter-by-letter beneath the spinner. Optional — pass\n * `undefined` for a pure spinner with no caption (e.g. inline mode).\n */\n prompt?: string\n /** Spinner size variant. Defaults to `'md'`. */\n size?: LoadingSpinnerSize\n /**\n * When `true`, renders inline at the call site (no portal, no fullscreen\n * overlay, no backdrop). Useful inside cards, table rows, drawers, or\n * empty-state slots. Defaults to `false` (fullscreen overlay).\n */\n inline?: boolean\n /**\n * Optional override for the spinner ring colour. Accepts any CSS colour.\n * Defaults to the `--color-accent` token so it picks up theme overrides.\n */\n spinnerColor?: string\n /**\n * Optional override for the prompt text colour.\n * Defaults to the `--color-foreground` token (light/dark aware).\n */\n textColor?: string\n /**\n * Backdrop opacity (0 – 1) for the fullscreen overlay. Defaults to 0.8 —\n * close enough to opaque to block UI underneath while still hinting at the\n * previous state. Ignored when `inline` is true.\n */\n backdropOpacity?: number\n}\n\n// ── Size → dimensions table ─────────────────────────────────────────────────\n// Outer ring, inner ring, centre dot, ring stroke width, text size.\nconst SIZE_MAP = {\n sm: { outer: 'w-8 h-8', inner: 'w-4 h-4', dot: 'w-1 h-1', stroke: 'border-2', text: 'text-xs' },\n md: { outer: 'w-20 h-20', inner: 'w-12 h-12', dot: 'w-2 h-2', stroke: 'border-[3px]', text: 'text-2xl' },\n lg: { outer: 'w-32 h-32', inner: 'w-20 h-20', dot: 'w-3 h-3', stroke: 'border-4', text: 'text-4xl' },\n} as const satisfies Record<LoadingSpinnerSize, {\n outer: string; inner: string; dot: string; stroke: string; text: string\n}>\n\n// ── Letter-stagger variants ─────────────────────────────────────────────────\n// 60 ms stagger, 250 ms fade + lift per glyph. With `useReducedMotion` the\n// container falls back to instant reveal — the prompt stays visible.\nconst containerVariants: Variants = {\n hidden: {},\n visible: { transition: { staggerChildren: 0.05 } },\n}\n\nconst letterVariants: Variants = {\n hidden: { opacity: 0, y: 4 },\n visible: { opacity: 1, y: 0, transition: { duration: 0.22, ease: 'easeOut' } },\n}\n\n// ── Spinner core (rings + dot) ──────────────────────────────────────────────\n// Two concentric arcs rotating at different speeds in opposite directions,\n// with a centred breathing dot. Each ring uses two opposing border edges so\n// the rotation reads as a 180° arc traversal — sharper than a full ring.\n// All three elements rotate around the same centre via `relative + absolute`.\nfunction SpinnerCore({ size, color }: { size: LoadingSpinnerSize; color?: string }) {\n const dims = SIZE_MAP[size]\n const ringColor = color ?? 'var(--color-accent)'\n return (\n <div className=\"relative flex items-center justify-center\" style={{ color: ringColor }}>\n {/* Outer arc — slower clockwise */}\n <div\n className={`${dims.outer} ${dims.stroke} rounded-full border-transparent border-t-current border-r-current animate-spin`}\n style={{ animationDuration: '1.4s' }}\n aria-hidden=\"true\"\n />\n {/* Inner arc — faster counter-clockwise, lower opacity for layering */}\n <div\n className={`absolute ${dims.inner} ${dims.stroke} rounded-full border-transparent border-b-current border-l-current animate-spin opacity-60`}\n style={{ animationDuration: '0.9s', animationDirection: 'reverse' }}\n aria-hidden=\"true\"\n />\n {/* Centre dot — breathing pulse */}\n <div\n className={`absolute ${dims.dot} rounded-full bg-current animate-breathe`}\n aria-hidden=\"true\"\n />\n </div>\n )\n}\n\n/**\n * Enterprise-grade loading indicator.\n *\n * Two concentric arcs counter-rotating around a breathing centre dot, with\n * an optional staggered letter reveal beneath. Portaled to `document.body`\n * for the fullscreen overlay so it always covers the actual viewport\n * regardless of where it sits in the React tree.\n *\n * **Two modes:**\n * - **Fullscreen overlay** (default): semi-opaque backdrop with\n * `backdrop-blur-sm` for a modern depth effect. Use during page-level\n * loading, route transitions, or critical mutations.\n * - **Inline** (`inline`): just the spinner + optional caption rendered at\n * the call site. Use inside cards, table rows, drawers, empty states,\n * or anywhere a smaller loading affordance is appropriate.\n *\n * **Accessibility**: `role=\"status\"` + `aria-label`/`aria-live` make the\n * indicator announce-able to screen readers. `prefers-reduced-motion`\n * collapses the letter stagger to instant reveal — the spinner rings keep\n * rotating since a continuous spinner is informative, not decorative.\n *\n * @example Fullscreen overlay (page load)\n * ```tsx\n * {isLoading && <LoadingSpinner prompt=\"Loading vessels…\" />}\n * ```\n *\n * @example Inline (inside a card)\n * ```tsx\n * <Card>\n * {data ? <Chart data={data} /> : <LoadingSpinner inline size=\"sm\" />}\n * </Card>\n * ```\n *\n * @example Themed overlay\n * ```tsx\n * <LoadingSpinner\n * prompt=\"Saving\"\n * size=\"lg\"\n * spinnerColor=\"#10b981\"\n * backdropOpacity={0.7}\n * />\n * ```\n */\nexport default function LoadingSpinner({\n prompt,\n size = 'md',\n inline = false,\n spinnerColor,\n textColor,\n backdropOpacity = 0.8,\n}: LoadingSpinnerProps) {\n const reduced = useReducedMotion()\n const letters = prompt ? Array.from(prompt) : []\n const dims = SIZE_MAP[size]\n\n const content = (\n <>\n <SpinnerCore size={size} color={spinnerColor} />\n\n {letters.length > 0 && (\n <motion.div\n className={`${dims.text} font-semibold tracking-tight select-none`}\n style={{ color: textColor ?? 'var(--color-foreground)' }}\n variants={containerVariants}\n initial={reduced ? 'visible' : 'hidden'}\n animate=\"visible\"\n aria-hidden=\"true\"\n >\n {letters.map((letter, index) => (\n <motion.span\n key={index}\n className=\"inline-block whitespace-pre\"\n variants={letterVariants}\n >\n {letter}\n </motion.span>\n ))}\n </motion.div>\n )}\n </>\n )\n\n // ── Inline mode ─────────────────────────────────────────────────────────\n if (inline) {\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label={prompt ?? 'Loading'}\n className=\"flex flex-col items-center justify-center gap-3\"\n >\n {content}\n </div>\n )\n }\n\n // ── Fullscreen overlay ──────────────────────────────────────────────────\n return (\n <Portal>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label={prompt ?? 'Loading'}\n className=\"fixed inset-0 z-[8000000] flex flex-col items-center justify-center gap-6 bg-background backdrop-blur-sm\"\n style={{ opacity: backdropOpacity }}\n >\n {content}\n </div>\n </Portal>\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 // `calculated-height` and `dark:glassmorphism` were orphaned CSS classes\n // (never defined anywhere). Replaced with semantic `min-h-full` +\n // `bg-surface` which works in both light and dark modes via the\n // ThemeProvider's CSS vars.\n <div\n className={`w-full min-h-full pl-2 pr-2 pb-2 transition-opacity duration-300 ${visible ? 'opacity-100' : 'opacity-0'}`}\n >\n <div className={`bg-surface 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}\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 // tabIndex + Enter/Space onKeyDown makes each option\n // keyboard-activatable. Previously the items were only mouse-\n // clickable — keyboard-only users couldn't select anything.\n <div\n key={item.key}\n role=\"option\"\n aria-selected={activeKey === item.key}\n tabIndex={0}\n className={`hover:bg-surface-raised cursor-pointer p-3 border-b border-border transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent ${\n activeKey === item.key ? 'bg-surface-raised text-foreground' : 'text-foreground-secondary'\n }`}\n onClick={() => onItemClick(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onItemClick(item)\n }\n }}\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-surface-raised 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=\"currentColor\" 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=\"currentColor\" 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-accent hover:text-accent-fg ${\n isActive ? 'bg-accent text-accent-fg' : 'text-foreground-secondary'\n } rounded-lg p-2 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-accent`}\n onClick={onClick}\n tabIndex={0}\n onKeyDown={(e) => {\n // Space and Enter are both canonical activation keys for\n // role=\"button\". preventDefault stops Space from scrolling\n // the page when the button is focused.\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.()\n }\n }}\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 // `calculated-height` was an orphaned CSS class. Replaced with `h-full`\n // so the MenuBar fills whatever vertical space its parent gives it.\n <nav\n aria-label=\"Main navigation\"\n className=\"w-16 h-full bg-surface-raised 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'\n\nexport interface SearchInputProps {\n value?: string\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 /** Label/input orientation. Defaults to `'vertical'`. */\n layout?: 'horizontal' | 'vertical'\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-sm font-medium ml-1 max-content text-foreground\" htmlFor={htmlFor}>\n {label}\n </label>\n )}\n <div className=\"bg-surface text-foreground flex items-center gap-1 rounded-lg border border-border pr-2 focus-within:ring-2 focus-within:ring-accent transition-colors\">\n <input\n ref={ref}\n disabled={disabled}\n value={value}\n onChange={onChange}\n // `type=\"search\"` gives consumers the native clear button\n // and an Enter-friendly virtual keyboard hint on mobile.\n type=\"search\"\n enterKeyHint=\"search\"\n name={name}\n id={htmlFor}\n className=\"bg-transparent focus:outline-none pl-2 h-9 w-56 rounded-lg disabled:cursor-not-allowed\"\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n {/* Search icon — uses currentColor so it follows the input text */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"w-5 h-5 text-foreground-muted\" aria-hidden=\"true\">\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","import type { ReactNode } from 'react'\n\nexport interface DropdownPillProps {\n value?: 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-accent text-accent-fg text-sm text-ellipsis ${hasSiblings ? 'w-24' : 'w-max'} p-1 px-2 rounded-lg whitespace-nowrap overflow-hidden`}\n >\n {value}\n </div>\n )\n}\n","import React, { useEffect, useId, useState } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport SearchInput from './SearchInput'\nimport DropdownPill from './DropdownPill'\n\nexport interface DropdownItem {\n key: string | number\n label: React.ReactNode\n icon?: React.ReactNode\n}\n\n/**\n * Item key type — DOM-friendly subset of `React.Key` (no bigint, since UI\n * keys are always strings or numbers in practice).\n */\nexport type DropdownKey = string | number\n\n/**\n * Selected value(s). In single-select mode this is a single key matching\n * one of the items. In multi-select mode it is an array of keys.\n */\nexport type DropdownValue = DropdownKey | DropdownKey[]\n\nexport interface DropdownProps {\n isMultiselect?: boolean\n hasSearch?: boolean\n label?: React.ReactNode\n name?: string\n value?: DropdownValue\n onChange?: (e: { target: { value: DropdownValue; id?: string; name?: string } }) => void\n onBlur?: React.FocusEventHandler\n disabled?: boolean\n /** Label/input orientation. Defaults to `'vertical'`. */\n layout?: 'horizontal' | 'vertical'\n errorMessage?: React.ReactNode\n style?: React.CSSProperties\n htmlFor?: string\n items?: DropdownItem[]\n labelStyle?: React.CSSProperties\n placeholder?: string\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 [searchTerm, setSearchTerm] = useState('')\n const [innerItems, setInnerItems] = useState<DropdownItem[]>([])\n // Stable id for the error region so the combobox can point at it via\n // aria-describedby when validation fails.\n const errorId = useId()\n const hasError = errorMessage != null\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-sm font-medium ml-1 max-content select-none text-foreground\"\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 aria-invalid={hasError || undefined}\n aria-describedby={hasError ? errorId : undefined}\n style={style}\n className={`flex items-center justify-between relative h-9 rounded-lg border border-border cursor-pointer select-none focus:outline-none focus-visible:ring-2 focus-visible:ring-accent ${disabled ? 'cursor-not-allowed bg-surface-raised text-foreground-muted' : 'bg-surface text-foreground'} ${hasError ? 'border-status-error' : ''}`}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (disabled) return\n // Open on Enter, Space, ArrowDown, ArrowUp — the\n // canonical combobox activation keys per WAI-ARIA.\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n setOpen(true)\n }\n }}\n >\n {/* Selected value(s) */}\n <div\n className={`h-7 pl-2 ${!style?.width ? 'min-w-[240px]' : ''} flex items-center gap-1 overflow-hidden`}\n >\n {!value || (Array.isArray(value) && value.length === 0) ? (\n <span className=\"text-foreground-muted 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 — currentColor follows trigger text */}\n <div className={`transition-transform duration-200 mr-2 ${open ? 'rotate-180' : 'rotate-0'}`} aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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-surface text-foreground border border-border 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) => (\n // aria-rowindex was previously set here but\n // it's invalid ARIA on role=\"option\" (it\n // belongs on rows of a grid/treegrid). Dropped.\n // tabIndex={0} + Enter/Space handler makes the\n // option keyboard-activatable; the full\n // combobox roving-tabindex pattern is deferred\n // until the planned Phase-5 rewrite.\n <div\n key={item.key}\n role=\"option\"\n aria-selected={isSelected(item.key)}\n tabIndex={0}\n className={`flex items-center justify-between p-2 hover:bg-accent hover:text-accent-fg transition-colors duration-150 text-sm rounded-lg cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-accent ${\n selectedItems.includes(item.key) ? 'bg-surface-raised text-foreground' : 'text-foreground'\n }`}\n onClick={() => selectItem(item.key)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n selectItem(item.key)\n }\n }}\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 // currentColor — checkmark follows\n // the item's text colour, which\n // flips automatically on hover.\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4 10l4.5 4.5L16 6\"\n stroke=\"currentColor\"\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 {hasError && (\n <div id={errorId} className=\"text-center text-status-error text-xs mt-1\">\n {errorMessage}\n </div>\n )}\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 ─────────────────── */\n\n/**\n * Column descriptor for the Table.\n *\n * The generic `T` is the shape of a row — `keyBind` must be one of T's\n * string-keyed properties, and `component(cellValue, row)` receives the\n * matching value with full type inference. When used without a generic\n * (`TableColumn[]`), `T` falls back to `Record<string, any>` for backwards\n * compatibility — narrower typing is preferred whenever possible:\n *\n * ```ts\n * type Vessel = { id: number; name: string; status: 'At Sea' | 'In Port' }\n * const cols: TableColumn<Vessel>[] = [\n * { key: 'name', label: 'Name', keyBind: 'name' }, // cellValue inferred as string\n * ]\n * ```\n */\nexport interface TableColumn<T extends Record<string, any> = Record<string, any>> {\n /** React reconciliation key for the column itself. */\n key: React.Key\n label: React.ReactNode\n /** Property on the row to read for this column. */\n keyBind: keyof T & string\n /** Custom cell renderer. Receives the cell value and the full row. */\n component?: (cellValue: T[keyof T], row: T) => React.ReactNode\n /** Explicit column width (CSS length or px number). Optional — defaults to auto. */\n width?: string | number\n /** Text alignment for both header and cells. Defaults to `'center'`. */\n align?: 'left' | 'center' | 'right'\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<T extends Record<string, any> = Record<string, any>> {\n enabled?: boolean\n expandIcon?: React.ReactNode\n expandComponent?: (row: T) => React.ReactNode\n}\n\nexport interface TableProps<T extends Record<string, any> = Record<string, any>> {\n columns?: TableColumn<T>[]\n rows?: T[]\n /**\n * Returns a stable key for each row, used for React reconciliation AND\n * for tracking expanded state when `expandRow.enabled` is true.\n * Defaults to the row index — fine for static lists, but pass an\n * explicit getter (e.g. `(row) => row.id`) if rows can be reordered or\n * filtered while expand state should persist.\n */\n getRowKey?: (row: T, index: number) => React.Key\n pagination?: PaginationOptions\n expandRow?: ExpandRowOptions<T>\n hasSearch?: boolean\n footer?: React.ReactNode\n header?: React.ReactNode\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}\n\n/** ─────────────────── helpers ─────────────────── */\n\nfunction createDatasets<T>(rows: T[], perPage: number | null): T[][] {\n if (!perPage) return [rows.slice()]\n const all: T[][] = []\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/**\n * Default row-key strategy — index-based. Stable across renders for static\n * lists; pass an explicit `getRowKey` for any list that mutates.\n */\nconst defaultGetRowKey = (_row: unknown, index: number): React.Key => index\n\nconst cellAlign = (align: TableColumn['align']) =>\n align === 'left' ? 'text-left' : align === 'right' ? 'text-right' : 'text-center'\n\n/** ─────────────────── sub-components ─────────────────── */\n\nfunction TableHeader<T extends Record<string, any>>({\n columns,\n hasExpand,\n}: {\n columns: TableColumn<T>[]\n hasExpand: boolean\n}) {\n return (\n <thead className=\"bg-surface-raised border-b border-border\">\n <tr>\n {hasExpand && <th aria-hidden=\"true\" className=\"w-9\" />}\n {columns.map((col) => (\n <th\n key={col.key}\n scope=\"col\"\n className={`${cellAlign(col.align)} text-sm font-semibold text-foreground py-3 px-3`}\n style={col.width != null ? { width: col.width } : undefined}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n )\n}\n\nconst DefaultExpandIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-5 h-5 text-foreground-muted\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n 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\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\nfunction TableBody<T extends Record<string, any>>({\n columns,\n rows,\n expandRow,\n getRowKey,\n}: {\n columns: TableColumn<T>[]\n rows: T[]\n expandRow: ExpandRowOptions<T>\n getRowKey: (row: T, index: number) => React.Key\n}) {\n // Expand state is keyed by the row's stable key — survives reorder/filter\n // as long as `getRowKey` returns the same value for the same row.\n const [expanded, setExpanded] = useState<Set<React.Key>>(() => new Set())\n\n const toggleRow = (rowKey: React.Key) => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(rowKey)) next.delete(rowKey)\n else next.add(rowKey)\n return next\n })\n }\n\n const hasExpand = !!expandRow.enabled\n const expandColCount = columns.length + (hasExpand ? 1 : 0)\n\n return (\n <tbody>\n {rows.map((row, i) => {\n const rowKey = getRowKey(row, i)\n const isExpanded = expanded.has(rowKey)\n return (\n <React.Fragment key={rowKey}>\n <tr\n className={`border-b border-border hover:bg-surface-raised transition-colors duration-150 ${\n i % 2 === 0 ? 'bg-surface' : 'bg-surface-raised'\n }`}\n >\n {hasExpand && (\n <td className=\"p-0 align-middle w-9\">\n <button\n type=\"button\"\n onClick={() => toggleRow(rowKey)}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n className={`w-9 h-9 inline-flex items-center justify-center rounded-md hover:bg-surface/80 transition-transform duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent ${\n isExpanded ? 'rotate-180' : ''\n }`}\n >\n {expandRow.expandIcon ?? DefaultExpandIcon}\n </button>\n </td>\n )}\n {columns.map((col) => (\n <td\n key={col.key}\n className={`${cellAlign(col.align)} text-sm text-foreground py-2 px-3 align-middle`}\n >\n {col.component\n ? col.component(row[col.keyBind] as T[keyof T], row)\n : (row[col.keyBind] as React.ReactNode)}\n </td>\n ))}\n </tr>\n\n {hasExpand && isExpanded && (\n <tr className=\"bg-surface\">\n <td colSpan={expandColCount} className=\"p-0 border-b border-border\">\n <div className=\"p-3\">{expandRow.expandComponent?.(row)}</div>\n </td>\n </tr>\n )}\n </React.Fragment>\n )\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 = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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 = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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 return (\n <div className=\"flex gap-2 items-center justify-end pt-2\">\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{doubleChevronRight}</span>,\n activePage === 0,\n () => onPageChange(0)\n )}\n {navBtn(\n <span className=\"rotate-180 inline-flex\">{chevronRight}</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,\n activePage === maxPage,\n () => activePage < maxPage && onPageChange(activePage + 1)\n )}\n {navBtn(\n doubleChevronRight,\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 // Pagination is single-select; ignore array values that\n // could come through from a multi-select Dropdown.\n if (Array.isArray(value)) return\n const numKey = typeof value === 'number' ? value : Number(value)\n if (!serverSide) setPerPageKey(numKey)\n const opt = picker.find((o) => o.key === numKey)\n onPerPageChange(opt?.label ?? opt?.value ?? numKey)\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 * - **Typed rows**: pass a generic `T` for full type inference on columns\n * and cell renderers (`<Table<Vessel> ... />`).\n * - **Real `<table>` semantics**: keeps row / col / cell context intact for\n * screen readers and lets the browser handle column sizing natively.\n * Per-column widths via `column.width`.\n * - **Search**: client-side filter across ALL row values; result is\n * memoized so each keystroke costs O(n) once per term change, not per\n * render. Set `pagination.serverSide` to skip client-side filter and\n * pagination entirely.\n * - **Expand**: each row gets a real `<button>` with `aria-expanded`.\n * Expand state is keyed by `getRowKey(row, i)` so it survives reorders.\n *\n * @example Static, fully typed\n * ```tsx\n * type Vessel = { id: number; name: string; status: string }\n * <Table<Vessel>\n * columns={[\n * { key: 'name', label: 'Name', keyBind: 'name' },\n * { key: 'status', label: 'Status', keyBind: 'status', width: 120 },\n * ]}\n * rows={vessels}\n * getRowKey={(row) => row.id}\n * />\n * ```\n *\n * @example Server-side pagination\n * ```tsx\n * <Table\n * columns={cols}\n * rows={pageRows}\n * pagination={{\n * enabled: true, serverSide: true, perPage: 20,\n * page: currentPage, totalCount, onPageChange, onPerPageChange,\n * }}\n * />\n * ```\n */\nexport default function Table<T extends Record<string, any> = Record<string, any>>({\n columns = [],\n rows = [],\n getRowKey = defaultGetRowKey,\n pagination = DEFAULT_PAGINATION,\n expandRow = DEFAULT_EXPAND as ExpandRowOptions<T>,\n hasSearch = true,\n footer = null,\n header = null,\n}: TableProps<T>) {\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\n const isServerSide = !!(pagination.enabled && pagination.serverSide)\n\n // Filter is derived state — memoized so each keystroke only runs the\n // O(n × columns) scan once per `searchTerm` change, not on every render.\n // Server-side mode short-circuits: the consumer's API is the filter.\n const filteredRows = useMemo(() => {\n if (isServerSide || !searchTerm) return rows\n const term = searchTerm.toLowerCase()\n return rows.filter((row) =>\n Object.values(row).some(\n (v) => v != null && String(v).toLowerCase().includes(term)\n )\n )\n }, [rows, searchTerm, isServerSide])\n\n // Pagination buckets — also derived. Re-bucketed whenever the filtered\n // set OR page size changes.\n const datasets = useMemo(() => {\n if (isServerSide) return [rows]\n return createDatasets(filteredRows, pagination.enabled ? perPage : null)\n }, [filteredRows, perPage, pagination.enabled, isServerSide, rows])\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[activePage] ?? []\n }, [isServerSide, rows, datasets, activePage])\n\n // Sync per-page state with pagination prop when not server-side\n useEffect(() => {\n if (pagination.enabled && !isServerSide && typeof pagination.perPage === 'number') {\n setPerPage(pagination.perPage)\n }\n }, [pagination.enabled, pagination.perPage, isServerSide])\n\n // Server-side: mirror the per-page from props\n useEffect(() => {\n if (isServerSide && typeof pagination.perPage === 'number') setPerPage(pagination.perPage)\n }, [isServerSide, pagination.perPage])\n\n // Server-side: mirror the 1-based page from props\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 setSearchTerm(e.target.value)\n // Reset to the first page so the user sees the top of the filtered set.\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 without forcing the table itself to layout horizontally. */}\n <div className=\"overflow-x-auto rounded-lg\">\n <table className=\"w-full border-collapse\">\n <TableHeader columns={columns} hasExpand={!!expandRow.enabled} />\n <TableBody\n columns={columns}\n rows={currentPageRows}\n expandRow={expandRow}\n getRowKey={getRowKey}\n />\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'\nimport Portal from '../layout/Portal'\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 — portaled to <body> so the fixed\n backdrop and drawer always cover the real viewport, never\n a transformed/contained ancestor (page-transition libs,\n CSS `contain`, parent `will-change`, etc.). */}\n {hasSidebar && isMobile && (\n <Portal>\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 </Portal>\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\n// ── XSS-safe CSS-value sanitiser ─────────────────────────────────────────────\n// The dark-theme CSS vars are serialised into a `<style>` block via\n// `dangerouslySetInnerHTML`. If a consumer-supplied value contained `</style>`,\n// `;`, or `}`, it would close the style block early and let arbitrary HTML\n// (including `<script>`) execute. We allow normal CSS value characters\n// (letters, digits, punctuation needed for `rgb()`, `oklch()`, multi-word\n// font-family lists, etc.) but reject the characters that can break CSS\n// escaping — including comment delimiters and the backslash hex-escape.\n//\n// React inline `style={…}` values do NOT need this check: React applies them\n// as DOM `.style.<prop> = value`, where a malicious value can only affect\n// that single property and cannot break out into siblings.\nconst CSS_VALUE_REJECT_RE = /[;{}<>\\\\]|\\*\\/|\\/\\*/\n\nfunction isSafeCssValue(v: unknown): v is string {\n if (typeof v !== 'string') return false\n if (v.length > 500) return false // unreasonable values are suspicious\n return !CSS_VALUE_REJECT_RE.test(v)\n}\n\nfunction varsToStyleString(vars: Record<string, string>): string {\n const out: string[] = []\n for (const [k, v] of Object.entries(vars)) {\n if (!isSafeCssValue(v)) {\n // Warn unconditionally — these values are a security risk; the\n // consumer needs to fix them in both dev and prod. (We don't\n // gate on `process.env.NODE_ENV` because that's not always\n // defined in browser bundles.)\n console.warn(\n `[ThemeProvider] Dropping unsafe value for \"${k}\". ` +\n `Theme values may contain letters, digits, and CSS punctuation ` +\n `but must not include: ; { } < > \\\\ /* */`,\n )\n continue\n }\n out.push(`${k}: ${v};`)\n }\n return out.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, { useId } from 'react'\n\nexport interface TextInputProps {\n value?: string\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 /** Label/input orientation. Defaults to `'horizontal'`. */\n layout?: 'horizontal' | 'vertical'\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n id?: string\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 // `useId` gives us a stable, SSR-safe id for the error region so that\n // `aria-describedby` on the input can point at it. The id only matters\n // when an error is actually being announced.\n const errorId = useId()\n const hasError = errorMessage != null\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 // Render <label> only when a label is provided. An empty\n // <label htmlFor=…> announces as an unlabeled control in\n // some screen readers.\n <label\n style={{ color: labelColor || undefined }}\n className={`text-sm font-medium ml-1 max-content ${!labelColor && 'text-foreground'}`}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n )}\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 aria-invalid={hasError || undefined}\n aria-describedby={hasError ? errorId : undefined}\n className={`${hasError ? 'border border-status-error' : 'border border-border'} bg-surface text-foreground p-2 h-9 w-60 mt-1 rounded-lg disabled:bg-surface-raised disabled:text-foreground-muted disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-accent transition-colors`}\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n </div>\n {/* Error region is keyed to the input via aria-describedby. Only\n rendered when there is an actual error so screen readers don't\n read empty descriptions. */}\n {hasError && (\n <div id={errorId} className=\"text-center text-status-error text-xs mt-1\">\n {errorMessage}\n </div>\n )}\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, { useId, useState } from 'react'\n\nexport interface PasswordProps {\n value?: string\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 /** Label/input orientation. Defaults to `'horizontal'`. */\n layout?: 'horizontal' | 'vertical'\n onBlur?: React.FocusEventHandler<HTMLInputElement>\n errorMessage?: React.ReactNode\n labelColor?: string\n iconColor?: string\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 // Stable, SSR-safe id for the error region — `aria-describedby` on the\n // input points here so screen readers announce the validation message.\n const errorId = useId()\n const hasError = errorMessage != null\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 <label\n style={{ color: labelColor || undefined }}\n className={`text-sm font-medium ml-1 max-content ${!labelColor && 'text-foreground'}`}\n htmlFor={htmlFor}\n >\n {label}\n </label>\n )}\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 aria-invalid={hasError || undefined}\n aria-describedby={hasError ? errorId : undefined}\n className={`${hasError ? 'border border-status-error' : 'border border-border'} bg-surface text-foreground p-2 h-9 w-52 mt-1 rounded-lg disabled:bg-surface-raised disabled:text-foreground-muted disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-accent transition-colors`}\n style={inputStyle ?? {}}\n placeholder={placeholder ?? ''}\n />\n <button\n type=\"button\"\n className=\"cursor-pointer p-1 text-foreground-secondary hover:text-foreground rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n style={iconColor ? { color: iconColor } : undefined}\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=\"currentColor\" 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=\"currentColor\" 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 {/* Error region keyed to the input via aria-describedby. */}\n {hasError && (\n <div id={errorId} className=\"text-center text-status-error text-xs mt-1\">\n {errorMessage}\n </div>\n )}\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}\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 // mr-12 was a hardcoded right margin that broke layouts; spacing\n // is the parent's responsibility now.\n <label htmlFor={id} className=\"flex items-center cursor-pointer 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-foreground-secondary data-[state=checked]:bg-accent transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2\"\n >\n <SwitchPrimitive.Thumb\n className=\"pointer-events-none inline-flex h-8 w-8 items-center justify-center rounded-full bg-background text-foreground 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'\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 /** Label/input orientation. Defaults to `'vertical'`. */\n layout?: 'horizontal' | 'vertical'\n items?: AutoCompleteItem[]\n onItemClick?: (value: string) => void\n /** Custom \"empty\" message */\n emptyText?: string\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-sm font-medium ml-1 max-content text-foreground\">\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-surface text-foreground flex items-center gap-1 rounded-lg border border-border pr-2 focus-within:ring-2 focus-within:ring-accent transition-colors\">\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=\"bg-transparent focus:outline-none pl-2 h-9 w-56 rounded-lg 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=\"currentColor\" className=\"w-5 h-5 flex-shrink-0 text-foreground-muted\" aria-hidden=\"true\">\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-surface border border-border 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-foreground-secondary\">\n {emptyText}\n </div>\n ) : (\n <div role=\"listbox\">\n {foundItems.map((item) => (\n // tabIndex + Enter/Space onKeyDown\n // makes each option keyboard-activatable.\n // Full roving-tabindex / arrow-key nav\n // is deferred to the Phase-5 rewrite.\n <div\n key={item.key}\n role=\"option\"\n tabIndex={0}\n className=\"text-sm flex items-center gap-2 p-2 transition-colors duration-150 hover:bg-surface-raised cursor-pointer text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n onClick={() => handleSelect(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSelect(item)\n }\n }}\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'\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}\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 // Native .click() is the idiomatic call — synthesising a MouseEvent\n // works but is noisy in test environments (jsdom) and unnecessary.\n fileInput.current?.click()\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 // Dropzone is keyboard-activatable: role=\"button\", focusable via\n // tabIndex, and Space/Enter trigger the file picker. Without these\n // a keyboard-only user could not upload a file.\n <div\n role=\"button\"\n tabIndex={0}\n aria-label=\"Upload file — click or drop\"\n onClick={openPicker}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openPicker()\n }\n }}\n className=\"border-2 border-dashed border-border hover:border-accent w-full h-full rounded-md transition-colors duration-200 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-accent text-foreground-secondary hover:text-foreground\"\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 — currentColor lets the parent's text-foreground drive it */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"w-16 h-16\" aria-hidden=\"true\">\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-sm\">Click or Drop a file</div>\n </div>\n ) : (\n <div className=\"flex gap-3 items-center justify-center w-full h-full p-3\">\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-surface-raised text-foreground p-4 rounded-md relative\"\n >\n <button\n type=\"button\"\n onClick={removeFile}\n className=\"bg-status-error rounded-full w-4 h-4 absolute right-[-5px] top-[-5px] cursor-pointer flex items-center justify-center focus:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n aria-label=\"Remove file\"\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\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=\"currentColor\" className=\"w-10 h-10\" aria-hidden=\"true\">\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\">\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"]}
|